简介:这份鲲鹏云大数据实验docx面向高校学生与云计算初学者,聚焦在华为云环境中从零搭建Hadoop集群的完整实践。内容以实验报告形式记录,涵盖购买ECS与OBS、获取AK/SK认证密钥、配置节点互信与SSH免密登录、创建目录结构、编写core-site.xml等核心配置文件,以及初始化NameNode、启动HDFS服务等关键环节,并特别记录了Java家目录错误导致的反复排错过程。资源包内含1个docx文档,大小约2.52MB,结构清晰,便于按步骤对照操作。目前已有891人学习下载,适合作为大数据实验课程参考或云平台部署练手材料,读者可借此掌握OBS作为数据源的配置方法、集群分发同步技巧及服务启动排错思路,对理解鲲鹏云环境下大数据基础设施的部署流程具有较高参考价值。
1. 鲲鹏云上跑 Hadoop:一份能直接抄的实验报告长什么样
如果你正在找一份能在鲲鹏云(ARM 架构)上把 Hadoop 集群真正跑起来的实验记录,而不是那种只贴几张截图、关键配置全部打码的“演示文档”,那这份 docx 值得你花时间拆一遍。它记录的是从零购买华为云 ECS、开通 OBS、配置三节点互信,到改core-site.xml对接 OBS、初始化 NameNode、启动 HDFS 的完整链路。适合两类人:一是课程设计或实验报告需要交差、但不想在环境上反复翻车的学生;二是第一次在 ARM 云主机上部署 Hadoop、被JAVA_HOME和架构差异折腾过的运维新手。它最大的价值不是“教你 Hadoop 是什么”,而是把踩过的坑和修正过程留在了文档里——这比一份干净但跑不通的教程有用得多。
2. 环境准备:ECS、OBS 与 AK/SK 的获取逻辑
2.1 为什么选鲲鹏 ECS 而不是 x86
华为云 ECS 分 x86 和鲲鹏(ARM)两种架构。这份实验选鲲鹏,核心原因是课程或项目要求验证大数据组件在国产化 ARM 平台上的兼容性。Hadoop 2.8.3 本身对 ARM 的支持需要依赖 OpenJDK 的 aarch64 版本,不能直接拿 x86 的 JDK 包往上装。购买时注意三点:规格选kc1或kci1系列(鲲鹏通用计算型),镜像选 openEuler 或 CentOS 的 ARM 版本,带宽按实验规模 5M 起步即可。三台节点的内网要互通,建议买在同一 VPC、同一安全组下,否则后面配/etc/hosts和 SSH 互信会多出很多网络排查工作。
2.2 OBS 并行文件系统与 AK/SK 的对应关系
Hadoop 对接 OBS 不是把 OBS 当普通对象存储用,而是通过hadoop-obs插件把 OBS 挂载成 HDFS 兼容的文件系统。购买 OBS 时要选“并行文件系统”,普通对象桶不支持 Hadoop 的 rename 和 append 语义。创建完成后进入桶详情页,能看到两个 Endpoint:
| 类型 | Endpoint 地址 |
|---|---|
| IPv4 | obs.cn-north-4.myhuaweicloud.com |
| 双栈 | obs.dualstack.cn-north-4.myhuaweicloud.com |
操作完成后下载credentials.csv,里面三列分别是User Name、Access Key Id、Secret Access Key。这三样东西后面要原样填进core-site.xml,少一个字符都会导致NoAwsCredentialsException。我一般会先把 AK/SK 写进一个临时文件,配完再删,避免手抄出错。
# 查看 credentials.csv 内容(示例结构) cat credentials.csv # User Name,Access Key Id,Secret Access Key # "roy_yuki",S8RSFKYBTOSPA9YX92XB,gjGNhoN8NkApdf4zjKcNDpLsQdsBW1RXl117E06q注意:AK/SK 属于账号级凭证,实验结束后建议在华为云控制台禁用或删除对应的访问密钥,不要长期留在实验环境里。
2.3 三节点基础环境统一操作
三台节点(Node0001/0002/0003)在装 Hadoop 之前,必须做四件相同的事:改主机名、配/etc/hosts、装 OpenJDK、配 SSH 互信。顺序不能乱,因为互信依赖主机名解析。
# 各节点执行:编辑 hosts vim /etc/hosts # 追加以下内容(IP 以实际购买为准) 124.70.110.126 node-0001 120.46.156.37 node-0002 121.36.3.111 node-0003 # 各节点执行:生成密钥对(一路回车) ssh-keygen -t rsa # 各节点执行:查看公钥 cat /root/.ssh/id_rsa.pub把三台机器的公钥分别追加到每台的/root/.ssh/authorized_keys里,然后从 node-0001 依次ssh node-0002、ssh node-0003测试。第一次会提示yes/no,输 yes 后如果直接跳转不输密码,互信就通了。这一步的坑在于:如果你买 ECS 时选了“密钥对”登录方式,root 的.ssh目录权限可能不是 700,会导致互信失效,执行chmod 700 /root/.ssh && chmod 600 /root/.ssh/authorized_keys即可。
3. Hadoop 安装与 OBS 对接:配置文件逐个拆
3.1 目录规划与安装包解压
Hadoop 的目录结构建议按“安装目录 + 数据目录”分离的原则来建。这份实验里用了/home/modules放安装包,/home/modules/data/buf和/home/nm/localdir放运行时数据。这样做的原因是:后面如果数据盘满了,可以直接挂新盘到 data 目录,不用动安装目录。
# node-0001 执行 mkdir -p /home/modules/data/buf mkdir -p /home/nm/localdir cd /root cp hadoop-2.8.3.tar.gz /home/modules/ cd /home/modules/ tar -zxvf hadoop-2.8.3.tar.gz解压后得到/home/modules/hadoop-2.8.3。注意 ARM 环境下不要用hadoop-2.8.3.tar.gz里自带的 native 库,需要额外下载 aarch64 版本的hadoop-native包替换lib/native目录,否则启动时会报Unable to load native-hadoop library。这个警告在 x86 上通常可以忽略,但在 ARM 上如果涉及压缩和校验,不替换会直接失败。
3.2 core-site.xml 对接 OBS 的关键参数
core-site.xml是整个对接的核心,它决定了 Hadoop 把 OBS 当成什么文件系统来用。以下是最小可用配置:
<configuration> <property> <name>fs.obs.access.key</name> <value>S8RSFKYBTOSPA9YX92XB</value> </property> <property> <name>fs.obs.secret.key</name> <value>gjGNhoN8NkApdf4zjKcNDpLsQdsBW1RXl117E06q</value> </property> <property> <name>fs.obs.endpoint</name> <value>obs.cn-north-4.myhuaweicloud.com</value> </property> <property> <name>fs.obs.impl</name> <value>org.apache.hadoop.fs.obs.OBSFileSystem</value> </property> <property> <name>fs.defaultFS</name> <value>obs://your-bucket-name</value> </property> </configuration>参数说明:fs.obs.access.key和fs.obs.secret.key填credentials.csv里的对应值;fs.obs.endpoint填 IPv4 地址即可,双栈地址在纯 IPv4 环境下反而可能解析慢;fs.defaultFS改成obs://加你的桶名,这样默认文件系统就是 OBS,而不是本地 HDFS。如果你还想保留本地 HDFS 作为二级存储,可以把fs.defaultFS设成hdfs://node-0001:9000,然后在代码里显式指定obs://路径。
3.3 hdfs-site.xml、yarn-site.xml 与 mapred-site.xml 的联动
这三个文件分别管 HDFS 副本、YARN 资源调度和 MapReduce 运行时。在对接 OBS 的场景下,HDFS 的角色被弱化,但 NameNode 和 DataNode 仍然要起来,因为 YARN 的日志聚合和中间结果可能落在 HDFS 上。
<!-- hdfs-site.xml 关键项 --> <property> <name>dfs.replication</name> <value>2</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>/home/modules/data/buf</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/home/nm/localdir</value> </property>dfs.replication设 2 是因为三节点集群里留一台给 NameNode 和 ResourceManager,实际能跑 DataNode 的就两台。设 3 会导致副本永远达不到要求,HDFS 一直处于Under-replicated状态。dfs.namenode.name.dir和dfs.datanode.data.dir指向之前建的目录,注意这两个目录不要放在同一个磁盘分区,否则 NameNode 和 DataNode 抢 IO。
yarn-site.xml里最关键的是yarn.resourcemanager.hostname指向 node-0001,以及yarn.nodemanager.aux-services设为mapreduce_shuffle。mapred-site.xml里把mapreduce.framework.name设为yarn,这样 MapReduce 任务才会走 YARN 调度而不是本地模式。
3.4 JAVA_HOME 配置与分发同步
这份实验里反复出现的“因为 javahome 错误导致失败”,根源是 openEuler 上 OpenJDK 的安装路径和 CentOS 不一样。在鲲鹏 openEuler 上,java-1.8.0-openjdk的实际路径是:
# 查找真实 JAVA_HOME readlink -f $(which java) # 输出示例:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-1.h5.oe1.aarch64/jre/bin/java # 去掉末尾 /jre/bin/java 即为 JAVA_HOME然后在/etc/profile里写:
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-1.h5.oe1.aarch64 export HADOOP_HOME=/home/modules/hadoop-2.8.3 export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH改完执行source /etc/profile,再用java -version确认。分发到各节点时,用scp把整个 Hadoop 目录传过去,但/etc/profile要每台单独改,因为路径里的 JDK 版本号可能因节点安装时间不同而有细微差异。
# 分发 Hadoop 包到 node-0002 和 node-0003 scp -r /home/modules/hadoop-2.8.3 root@node-0002:/home/modules/ scp -r /home/modules/hadoop-2.8.3 root@node-0003:/home/modules/分发完成后,在 node-0001 上执行hdfs namenode -format初始化,然后start-dfs.sh和start-yarn.sh。如果start-dfs.sh报JAVA_HOME is not set,说明 SSH 非交互式登录没有加载/etc/profile,需要在hadoop-env.sh里显式写死export JAVA_HOME=...。
4. 避坑排查:三节点集群最容易翻车的五个点
4.1 现象:NameNode 格式化后启动失败,日志报Cannot assign requested address
原因:core-site.xml里fs.defaultFS写的是公网 IP 或主机名,但 NameNode 绑定的是内网地址。鲲鹏 ECS 默认有两块网卡,公网 IP 是 NAT 映射的,直接绑公网 IP 会失败。
解决:fs.defaultFS用内网 IP 或/etc/hosts里配的主机名,不要用公网 IP。如果已经格式化了,删掉dfs.namenode.name.dir下的所有内容重新格式化。
4.2 现象:DataNode 启动后立刻退出,日志显示Incompatible clusterIDs
原因:NameNode 格式化多次,每次生成的 clusterID 不同,DataNode 还保留着旧的 clusterID。
解决:停掉所有节点,删除所有节点的dfs.datanode.data.dir目录内容,重新执行hdfs namenode -format,再启动。注意格式化只能做一次,不要反复执行。
4.3 现象:hadoop fs -ls obs://bucket/报NoAwsCredentialsException
原因:core-site.xml里的 AK/SK 没填、填错,或者credentials.csv里的引号被一起复制进去了。
解决:检查 AK/SK 是否有多余空格或引号,确认fs.obs.impl的类名拼写正确。如果用的是hadoop-obs插件,确认hadoop-obs-x.x.x.jar已经放到$HADOOP_HOME/share/hadoop/common/lib/下。
4.4 现象:start-yarn.sh后 ResourceManager 没起来,jps看不到进程
原因:yarn-site.xml里yarn.resourcemanager.hostname配错,或者yarn.nodemanager.aux-services没设成mapreduce_shuffle。
解决:确认yarn.resourcemanager.hostname指向 node-0001,yarn.nodemanager.aux-services和yarn.nodemanager.aux-services.mapreduce_shuffle.class两个属性都配上。改完分发到所有节点再重启。
4.5 现象:SSH 互信配好后,start-dfs.sh仍然提示输入密码
原因:/root/.ssh/authorized_keys权限不对,或者sshd_config里PubkeyAuthentication被关了。
解决:chmod 700 /root/.ssh && chmod 600 /root/.ssh/authorized_keys,检查/etc/ssh/sshd_config里PubkeyAuthentication yes和AuthorizedKeysFile .ssh/authorized_keys没有被注释。改完systemctl restart sshd。
5. 验证与进阶:用 OBS 跑一个 WordCount 确认链路
集群起来之后,别急着关页面。用 OBS 作为输入输出跑一个 WordCount,能一次性验证 HDFS、YARN、OBS 对接三条链路是否都通。
# 在 OBS 桶里建一个 input 目录,上传一个文本文件 hadoop fs -mkdir obs://your-bucket/input hadoop fs -put /root/test.txt obs://your-bucket/input/ # 提交 WordCount 任务 hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.3.jar \ wordcount obs://your-bucket/input obs://your-bucket/output # 查看结果 hadoop fs -ls obs://your-bucket/output hadoop fs -cat obs://your-bucket/output/part-r-00000 | head -20如果任务卡在map 0% reduce 0%超过两分钟,去 YARN 的 Web UI(http://node-0001:8088)看 Application 状态。常见原因是yarn.nodemanager.resource.memory-mb设得太小,默认 8192MB 在 2 核 4G 的 ECS 上跑不动,改成 2048 或 3072 再试。另一个高频问题是 OBS 的fs.obs.buffer.dir没配,默认落在/tmp下,磁盘满了任务就挂,建议显式指向/home/modules/data/buf。
跑通之后,把core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml四个文件备份一份。下次再搭集群,直接替换这四个文件加/etc/profile,十分钟就能复现。从那以后我每次配完 Hadoop 都强制走一遍 WordCount,不跑通不算完——这个习惯帮我省掉了至少三次“以为配好了结果答辩现场翻车”的尴尬。希望帮到你。
本文还有配套的精品资源,点击获取