简介本资源是一份完整的华为云大数据实验教学报告面向高校大数据、云计算相关专业学生及初入云平台实践的开发者聚焦在华为云环境中动手搭建与管理Hadoop/Spark集群的核心能力培养。报告系统覆盖四大实验模块基于ECS云主机的手动部署大数据环境、调用华为云原生服务OBS、ECS等构建数据底座、使用BigData Pro一站式方案完成HadoopSpark协同集群搭建以及通过Spark SQL实现大数据交互式查询。内容包含详细操作步骤、密钥配置示例、节点SSH连接验证、防火墙关闭指令、OBS互联测试等关键排错细节目录结构清晰实操性强。资源为1个4.36MB的docx文档涵盖全部实验过程、配置命令截图与结果验证说明便于对照复现与课堂延伸学习。目前已有2443人学习下载是理解华为云大数据技术栈落地路径的优质实践参考材料。1. 华为云大数据实验环境别在 node1 上死磕 JDK 版本Hadoop 3.3.6 和 OpenJDK 11 的兼容性才是第一道生死线你刚在华为云买了四台 ECSnode1node4 全部重装 CentOS 7.9兴致勃勃执行java -version显示 OpenJDK 17接着hdfs namenode -format直接报UnsupportedClassVersionError: org/apache/hadoop/hdfs/server/namenode/NameNode has been compiled by a more recent version of the Java Runtime——恭喜你已成功卡在 Hadoop 集群启动前 5 分钟。这不是个例而是华为云大数据实验报告里最常被跳过的「版本玄学」Hadoop 3.3.x 官方明确要求 JDK 8 或 JDK 11但不支持 JDK 17而华为云新购 ECS 默认镜像预装的 OpenJDK 常为 17 或 21。更致命的是实验报告里只写「下载 OpenJDK」却没标版本号导致大量学生在 node1 上反复重装、改环境变量、删.bashrc最后发现是 JDK 大版本越界。这套环境不是给单点跑 demo 用的而是要支撑 Hadoop Spark OBS 三端互通、SSH 免密跳转、WordCount 跨节点调度、OBS 数据源直读的真实集群行为。它适合两类人一是高校大数据课程实操环节需交完整实验报告的学生二是想在生产级云平台非 Docker 伪分布上亲手拧紧每颗螺丝的初级云运维工程师。别信「一键脚本」这里每一行ssh-copy-id、每一个/etc/hosts条目、每一次core-site.xml的fs.defaultFS值都得亲手敲、亲手验、亲手记日志路径。2. 准备华为云基础资源ECS 规格选型、OBS 桶创建与 AK/SK 安全落盘2.1 选购 ECS 实例为什么必须选「通用计算型 s6」而非「内存优化型 m6」华为云 ECS 实例类型直接影响 Hadoop YARN 资源调度稳定性。实验报告中 node1node4 均使用s6.large.22vCPU/4GB这是经过验证的最小可行配置。若误选m6.xlarge4vCPU/16GBYARN ResourceManager 会因内存超配触发Container killed by YARN for exceeding memory limits若选c6.large.2计算型则磁盘 IO 不足导致 HDFS DataNode 写入延迟飙升hdfs dfs -put卡在 99%。关键参数必须手动确认镜像选择「CentOS 7.9 64bit」官方镜像非 Alibaba Cloud 或 Tencent OS 衍生版避免 systemd 服务管理差异系统盘≥100GB SSDHadoop 日志和临时文件默认写入/var/log/hadoop和/tmp/hadoop-root数据盘挂载一块 200GB 以上高效云硬盘非超高IO格式化为 ext4挂载至/data后续 HDFSdfs.datanode.data.dir指向此处网络VPC 必须为同一子网如192.168.0.0/24安全组放行全部内网端口192.168.0.0/24→192.168.0.0/24并开放外部 SSH22、Hadoop WebUI50070/8088、Spark UI4040。提示购买后立即登录控制台在「弹性云服务器」列表页点击实例名称进入「远程登录」→「VNC 登录」首次登录强制修改 root 密码。切勿跳过此步——后续所有节点互信均基于 root 用户。2.2 创建 OBS 桶地域、Endpoint 与权限策略的硬绑定关系OBS 是本实验的数据底座其配置错误将导致hadoop fs -ls obs://mybucket/直接超时。实验报告中obs.cn-north-4.myhuaweicloud.com是华北-北京四区专属 Endpoint不可替换为obs.cn-east-2.myhuaweicloud.com或obs.myhuaweicloud.com。创建步骤必须严格按顺序进入「对象存储服务 OBS」控制台 → 「创建桶」桶名全小写、仅含字母数字和短横线如hadoop-data-2024长度 3–63 字符区域必须选「华北-北京四」cn-north-4与 ECS 实例同地域否则跨域访问延迟 300msOBS Connector 初始化失败存储类别选「标准存储」低频/归档存储不支持 Hadoop FileSystem API桶策略创建后立即进入桶 → 「权限管理」→ 「桶策略」→ 粘贴以下 JSON替换hadoop-data-2024为你的桶名{ Statement: [ { Effect: Allow, Principal: *, Action: [obs:GetObject], Resource: [arn:aws:obs:cn-north-4:000000000000:bucket/hadoop-data-2024/*] } ] }注意该策略仅开放读取符合实验安全要求若需写入如hadoop fs -put需追加obs:PutObject权限。2.3 获取并安全存储 AK/SKcredentials.csv 的三重校验法实验报告中credentials.csv文件包含三要素User Name,Access Key Id,Secret Access Key。但直接复制粘贴极易出错——AK/SK 含大小写字母、数字、特殊字符且Secret Access Key末尾常带换行符。必须执行三重校验格式校验用cat credentials.csv | tr -d \r\n | sed s/ //g清除所有空格和换行输出应为单行roy_yuki,S8RSFKYBTOSPA9YX92XB,gjGNhoN8NkApdf4zjKcNDpLsQdsBW1RXl117E06q长度校验Access Key Id固定 20 位如S8RSFKYBTOSPA9YX92XBSecret Access Key固定 40 位如gjGNhoN8NkApdf4zjKcNDpLsQdsBW1RXl117E06q可用性校验在 node1 执行curl -X GET -H Authorization: AWS S8RSFKYBTOSPA9YX92XB:gjGNhoN8NkApdf4zjKcNDpLsQdsBW1RXl117E06q https://obs.cn-north-4.myhuaweicloud.com返回?xml version1.0 encodingUTF-8?ListAllMyBucketsResult xmlnshttp://obs.cn-north-4.myhuaweicloud.com/doc/2015-06-30/即成功。校验通过后将 AK/SK 写入/root/.hadoop-credentials权限600内容如下export OBS_ACCESS_KEY_IDS8RSFKYBTOSPA9YX92XB export OBS_SECRET_ACCESS_KEYgjGNhoN8NkApdf4zjKcNDpLsQdsBW1RXl117E06q export OBS_ENDPOINTobs.cn-north-4.myhuaweicloud.com执行source /root/.hadoop-credentials加载并加入/root/.bashrc末尾确保所有终端生效。3. 搭建 Hadoop 3.3.6 集群从 JDK 11 降级到 SSH 免密跳转的完整链路3.1 统一安装 OpenJDK 11卸载默认 JDK 并锁定版本华为云新购 ECS 常预装 OpenJDK 17必须彻底卸载并安装 JDK 11。在 node1node4逐台执行# 卸载所有 JDK yum remove -y java-* # 清理残留 rm -rf /usr/lib/jvm/* # 下载 OpenJDK 11.0.22Hadoop 3.3.6 官方测试版本 wget https://download.java.net/java/GA/jdk11/9/GPL/openjdk-11.0.22_linux-x64_bin.tar.gz tar -zxvf openjdk-11.0.22_linux-x64_bin.tar.gz -C /usr/lib/jvm/ # 创建软链接 ln -sf /usr/lib/jvm/jdk-11.0.22 /usr/lib/jvm/java-11-openjdk # 配置环境变量 echo export JAVA_HOME/usr/lib/jvm/java-11-openjdk /etc/profile echo export PATH$JAVA_HOME/bin:$PATH /etc/profile source /etc/profile # 验证 java -version # 输出必须为 openjdk version 11.0.22 2024-01-16逻辑说明/usr/lib/jvm/java-11-openjdk是 Hadoophadoop-env.sh中JAVA_HOME的默认路径source /etc/profile确保所有用户包括 hdfs 用户生效若跳过rm -rf /usr/lib/jvm/*旧 JDK 库可能被优先加载。3.2 配置/etc/hosts与 SSH 免密四节点环形信任的实操细节Hadoop 集群依赖节点间无密码 SSH 跳转但实验报告中ssh-rsa AAAAB3...公钥片段易被截断。正确流程如下统一 hosts在 node1 编辑/etc/hosts填入全部四节点内网 IP非公网 IP192.168.0.10 node1 ecs-ca89-0001 192.168.0.53 node2 ecs-ca89-0002 192.168.0.169 node3 ecs-ca89-0003 192.168.0.77 node4 ecs-ca89-0004生成密钥对在 node1 执行ssh-keygen -t rsa -b 4096 -f /root/.ssh/id_rsa -N 必须指定-N 空密码否则后续ssh-copy-id交互式输入失败分发公钥将/root/.ssh/id_rsa.pub内容整段含ssh-rsa AAAAB3... rootecs-ca89-0001复制分别登录 node2/node3/node4在各自/root/.ssh/authorized_keys末尾粘贴不要覆盖原有内容验证跳转在 node1 执行ssh node2 hostname java -version # 应输出 node2 和 openjdk 11.0.22 ssh node3 hostname java -version ssh node4 hostname java -version若提示Permission denied (publickey)检查/root/.ssh/authorized_keys权限是否为600目录/root/.ssh是否为700。3.3 部署 Hadoop 3.3.6解压、配置、分发的原子操作下载地址必须为 Apache 官方镜像非华为云镜像站后者常滞后# 在 node1 下载并解压 wget https://downloads.apache.org/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz tar -zxvf hadoop-3.3.6.tar.gz -C /opt/ chown -R root:root /opt/hadoop-3.3.6 ln -sf /opt/hadoop-3.3.6 /opt/hadoop核心配置文件修改全部在/opt/hadoop/etc/hadoop/目录下hadoop-env.sh取消export JAVA_HOME注释改为export JAVA_HOME/usr/lib/jvm/java-11-openjdkcore-site.xml设置默认文件系统为 OBSconfiguration property namefs.defaultFS/name valueobs://hadoop-data-2024.cn-north-4.myhuaweicloud.com/value /property property namefs.obs.impl/name valueorg.apache.hadoop.fs.obs.OBSFileSystem/value /property /configurationhdfs-site.xml配置副本数与数据目录configuration property namedfs.replication/name value3/value /property property namedfs.namenode.name.dir/name value/data/hadoop/namenode/value /property property namedfs.datanode.data.dir/name value/data/hadoop/datanode/value /property /configurationworkers原slaves列出所有 DataNodenode2 node3 node4配置完成后将整个/opt/hadoop目录同步至其他节点# 在 node1 执行 scp -r /opt/hadoop node2:/opt/ scp -r /opt/hadoop node3:/opt/ scp -r /opt/hadoop node4:/opt/参数说明dfs.replication3对应四节点集群1 NN 3 DN确保数据高可用/data/hadoop/目录需提前在 node2/node3/node4 创建并赋权chown -R root:root /data/hadoop。4. Hadoop 集群启动与 OBS 互联验证绕过 WebUI 黑匣子的命令行诊断法4.1 格式化 NameNode 并启动集群三阶段启动顺序不可逆Hadoop 启动有严格依赖顺序NameNode → DataNode → ResourceManager → NodeManager。在 node1 执行# 格式化 NameNode仅首次执行 /opt/hadoop/bin/hdfs namenode -format # 启动 HDFS自动拉起 NameNode 和所有 workers 上的 DataNode /opt/hadoop/sbin/start-dfs.sh # 启动 YARNResourceManager 在 node1NodeManager 在 node2/node3/node4 /opt/hadoop/sbin/start-yarn.sh验证进程是否存活# 在 node1 查看 jps | grep -E (NameNode|ResourceManager) # 在 node2/node3/node4 查看 jps | grep -E (DataNode|NodeManager)正常输出应为node1NameNode、ResourceManagernode2/node3/node4DataNode、NodeManager若jps无输出立即检查/opt/hadoop/logs/下对应日志重点看hadoop-root-namenode-node1.log中ERROR行。4.2 测试 OBS 互联用hadoop fs命令替代 WebUI 的可靠性验证实验报告中测试与 OBS 互联步骤过于简略。真实验证需分三层OBS 连通性测试在 node1 执行hadoop fs -ls obs://hadoop-data-2024.cn-north-4.myhuaweicloud.com/应列出桶内文件若为空则返回成功无报错写入测试上传本地文件并校验大小echo hello hadoop on obs /tmp/test.txt hadoop fs -put /tmp/test.txt obs://hadoop-data-2024.cn-north-4.myhuaweicloud.com/test/ hadoop fs -ls obs://hadoop-data-2024.cn-north-4.myhuaweicloud.com/test/ # 输出应含 test.txt 及其 size19 字节读取测试从 OBS 读取并统计行数hadoop fs -cat obs://hadoop-data-2024.cn-north-4.myhuaweicloud.com/test/test.txt | wc -l # 应输出 1关键点obs://URI 中的域名必须与 OBS 控制台显示的 Endpoint 完全一致含.cn-north-4.myhuaweicloud.com少一个字符即UnknownHostException。4.3 运行 WordCount 示例从本地文件到 OBS 的端到端验证实验报告中执行 hadoop wordcount未指明输入源。完整流程如下准备输入数据在 node1 创建本地输入目录mkdir -p /input/wordcount echo hello world hello hadoop /input/wordcount/input.txt echo hadoop is great /input/wordcount/input.txt提交 MapReduce 任务/opt/hadoop/bin/hadoop jar /opt/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar \ wordcount /input/wordcount /output/wordcount查看结果输出默认在 HDFS但可重定向至 OBS# 查看 HDFS 输出 hadoop fs -cat /output/wordcount/part-r-00000 # 或直接输出到 OBS需先创建 obs 输出目录 hadoop fs -mkdir obs://hadoop-data-2024.cn-north-4.myhuaweicloud.com/output/wordcount hadoop fs -cp /output/wordcount/* obs://hadoop-data-2024.cn-north-4.myhuaweicloud.com/output/wordcount/成功标志part-r-00000内容为great 1 hadopp 1 hadoop 2 hello 2 is 1 world 1若任务卡在ACCEPTED状态检查 YARN ResourceManager WebUIhttp://192.168.0.10:8088中 Application Status常见原因是NodeManager未启动或内存不足。5. 常见问题排查五条血泪经验总结专治实验报告里没写的翻车现场5.1 现象start-dfs.sh后jps显示 NameNode但hadoop fs -ls /报Connection refused原因NameNode 已启动但未完成初始化Safe mode ON或core-site.xml中fs.defaultFS仍为hdfs://node1:9000未切换至 OBS解决执行hadoop dfsadmin -safemode get若为ON则等待 30 秒后重试检查core-site.xml确认value为obs://...重启 NameNodehadoop-daemon.sh stop namenode hadoop-daemon.sh start namenode。5.2 现象hadoop fs -ls obs://...返回java.lang.NoClassDefFoundError: org/apache/hadoop/fs/obs/OBSFileSystem原因Hadoop 发行版未内置 OBS Connector或hadoop-aws依赖版本不匹配解决下载hadoop-aws-3.3.6.jar和aws-java-sdk-bundle-1.12.262.jar放入/opt/hadoop/share/hadoop/tools/lib/并在core-site.xml中添加property namefs.obs.impl/name valueorg.apache.hadoop.fs.obs.OBSFileSystem/value /property property namefs.AbstractFileSystem.obs.impl/name valueorg.apache.hadoop.fs.obs.OBS/value /property5.3 现象ssh node2成功但start-dfs.sh无法在 node2 启动 DataNode日志报Permission denied原因/root/.ssh/authorized_keys权限错误应为600或/root/.ssh目录权限 700解决在 node2 执行chmod 600 /root/.ssh/authorized_keys chmod 700 /root/.ssh再试ssh node1反向验证。5.4 现象WordCount 任务运行中hadoop fs -ls /output/wordcount显示part-r-00000但大小为 0原因MapReduce 输出目录已存在Hadoop 默认拒绝覆盖org.apache.hadoop.mapred.FileAlreadyExistsException解决每次运行前清空输出目录hadoop fs -rm -r /output/wordcount或在命令中加-D mapreduce.output.fileoutputformat.compressfalse避免压缩干扰。5.5 现象OBS 桶中文件可见但hadoop fs -cat obs://.../file.txt报403 Forbidden原因OBS 桶策略未授权当前 AK/SK 的GetObject权限或Secret Access Key复制时末尾含不可见字符如\r解决重新下载credentials.csv用vim -b credentials.csv查看二进制模式删除^M符号或在/root/.hadoop-credentials中用printf转义export OBS_SECRET_ACCESS_KEY$(printf %b gjGNhoN8NkApdf4zjKcNDpLsQdsBW1RXl117E06q)6. 验证集群健康度用三条命令构建你的后悔药清单装完 Hadoop 不代表能跑通真正的验证藏在日志、端口和进程状态的交叉比对里。我给自己立了一条铁律每次部署完必须在 node1 上顺序执行这三条命令缺一不可——它们是我从上百次翻车中提炼出的「后悔药」。6.1 命令一netstat -tuln | grep -E :(50070|8088|9000|9001)这个命令直击 Hadoop 服务端口存活真相。Hadoop 3.3.6 的关键端口映射如下端口服务期望监听地址异常表现50070NameNode WebUI:::50070或0.0.0.0:50070若为127.0.0.1:50070表示仅本地可访问需检查hdfs-site.xml中dfs.namenode.http-address是否设为node1:500708088ResourceManager WebUI:::8088若缺失说明start-yarn.sh未执行或yarn.resourcemanager.address配置错误9000HDFS RPC旧版:::9000若启用 OBS此端口可不监听但fs.defaultFS必须为obs://执行后应看到至少两行输出50070 和 8088。若只有127.0.0.1:50070立刻编辑/opt/hadoop/etc/hadoop/hdfs-site.xml添加property namedfs.namenode.http-address/name valuenode1:50070/value /property property namedfs.namenode.rpc-address/name valuenode1:9000/value /property然后重启 NameNode。6.2 命令二hadoop dfsadmin -report \| head -20hadoop dfsadmin -report是 HDFS 的体检报告但原始输出过长。head -20能快速定位三个核心指标Configured Capacity显示集群总容量如Configured Capacity: 597124218880 (556.12 GB)若为0说明dfs.datanode.data.dir路径不存在或权限不足DFS Used%正常应为0%刚格式化若 0%且无数据写入可能是日志文件占满Live datanodes显示Live datanodes (3)数字必须等于workers文件中节点数若为0说明 DataNode 未启动或心跳失败。若Live datanodes为0立即检查 node2/node3/node4 的/opt/hadoop/logs/hadoop-root-datanode-*.log搜索Failed to connect to大概率是core-site.xml中fs.defaultFS仍指向hdfs://而非obs://导致 DataNode 尝试连接不存在的 NameNode。6.3 命令三curl -s http://192.168.0.10:50070/jmx?qryHadoop:serviceNameNode,nameNameNodeInfo \| jq .beans[0].LiveNodes这条命令用curljq解析 NameNode 的 JMX 接口直接获取实时存活节点列表。jq需提前安装yum install -y jq。输出应为类似{ node2:9866: { infoAddr: 192.168.0.53:9864, xferaddr: 192.168.0.53:9866, lastContact: 1717023456, usedSpace: 1073741824 }, node3:9866: { ... }, node4:9866: { ... } }关键判断逻辑键名node2:9866必须与/etc/hosts中定义的 hostname 一致不能是 IPlastContact时间戳距当前时间差应 30秒否则 DataNode 心跳超时若返回空{}或null说明 NameNode JMX 未启用需在hadoop-env.sh中添加export HADOOP_NAMENODE_OPTS-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port9999 -Dcom.sun.management.jmxremote.authenticatefalse -Dcom.sun.management.jmxremote.sslfalse $HADOOP_NAMENODE_OPTS从那以后我每次部署完 Hadoop都强制走一遍这三条命令——不是为了炫技而是因为它们能在我提交实验报告前 5 分钟揪出那个藏在core-site.xml里、把obs://写成oss://的手抖错误。希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?