简介:本资源是一份完整的华为云大数据实验教学报告,面向高校大数据、云计算相关专业学生及初入云平台实践的开发者,聚焦在华为云环境中动手搭建与管理Hadoop/Spark集群的核心能力培养。报告系统覆盖四大实验模块:基于ECS云主机的手动部署大数据环境、调用华为云原生服务(OBS、ECS、数据库等)构建数据处理链路、使用BigData Pro一站式方案完成Hadoop+Spark协同集群配置,以及通过Spark SQL实现大数据交互式查询。内容含详细操作步骤、密钥配置示例、节点SSH连接命令、防火墙关闭指令、OBS桶访问验证等实战细节,目录结构清晰,便于分阶段复现与查证。资源为1个4.36MB的docx文档,涵盖全部实验过程、截图提示与关键配置参数,无额外附件。目前已有2443人学习下载,是理解华为云大数据基础设施落地、掌握云上集群部署与SQL分析闭环的优质实操参考材料。
1. 华为云大数据实验报告:不是模板套用,而是真实跑通 Hadoop+Spark+OBS 四节点集群的完整链路
你手头这份《华为云大数据实验报告hhu》,不是某高校PPT截图拼凑的“概念演示”,而是一份在华为云真实 ECS 实例上逐行敲命令、逐节点配 SSH、逐服务测连通性、最终跑出hadoop jar hadoop-mapreduce-examples-*.jar wordcount成功日志的实操记录。它解决的不是“什么是 Hadoop”这种教科书问题,而是“为什么 node1 能 ssh node2 却连不上 node3”“为什么 OBS 桶地址填对了却报AccessDenied”“为什么 Spark UI 页面打不开但日志没报错”这类卡住你三小时的真实故障。适合正在准备课程设计、实训考核或刚接触云上大数据部署的工程师——你需要的不是理论推导,是能立刻复制粘贴、改 IP 改主机名就能复现的命令流和排错路径。整份报告覆盖从 ECS 购买、OBS 桶创建、四节点 SSH 免密互通、Hadoop 完全分布式配置、Spark on YARN 集成,到最终用wordcount验证数据从本地文件 → HDFS → MapReduce → OBS 的端到端流转。所有操作均基于华为云华北-4(cn-north-4)Region,适配当前控制台界面与 API 行为,不依赖过时镜像或废弃服务。
2. 四节点 ECS 环境初始化:从购买到免密登录的硬核打通
2.1 购买 ECS 实例并确认网络拓扑
华为云控制台中,进入“弹性云服务器 ECS” → “购买弹性云服务器”。关键配置必须严格匹配实验要求:
- 区域:
华北-4 (cn-north-4)—— 后续 OBS 地址obs.cn-north-4.myhuaweicloud.com强绑定此 Region,跨 Region 访问会触发鉴权失败; - 可用区:全部实例选同一可用区(如
cn-north-4a),避免内网延迟高导致心跳超时; - 镜像:选择
CentOS 7.9 64bit(非 Alibaba Cloud 或 TencentOS),因实验中所有yum install命令及/etc/hosts配置均基于此系统行为; - 规格:最低
4U8G(如s6.large.2),Hadoop ResourceManager 和 NodeManager 对内存敏感,低于 8G 易 OOM; - 系统盘:
超高IO类型,容量 ≥ 100GB,HDFS 数据块默认写入系统盘,小容量会导致No space left on device; - 网络:必须勾选“分配弹性公网 IP”,否则无法从本地终端 SSH 登录;同时确保“安全组”放行
22(SSH)、50070/9870(HDFS WebUI)、8088(YARN ResourceManager)、4040(Spark UI)端口。
提示:购买后等待实例状态变为“运行中”,再点击“远程登录”获取初始密码。切勿跳过“重置密码”步骤,否则后续所有 SSH 操作将失败。
2.2 统一配置/etc/hosts并验证内网互通
四台 ECS 实例启动后,需强制统一其内网 DNS 解析,这是 Hadoop 集群通信的基石。登录每台机器(以node1为例):
# 使用华为云控制台提供的 VNC 或本地终端 SSH 登录 ssh root@124.70.110.126 # node1 公网 IP # 输入重置后的密码 # 编辑 hosts 文件,删除原有内容,严格按以下格式写入(注意:IP 与主机名间为 Tab 键,非空格!) cat > /etc/hosts << 'EOF' 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.0.10 ecs-ca89-0001 node1 192.168.0.53 ecs-ca89-0002 node2 192.168.0.169 ecs-ca89-0003 node3 192.168.0.77 ecs-ca89-0004 node4 EOF # 保存后立即测试解析是否生效 ping -c 2 node2 # 应返回 192.168.0.53 的 ICMP 响应参数说明:
192.168.0.x是华为云默认 VPC 内网段,必须与你实际分配的内网 IP 完全一致(可在 ECS 控制台“网络信息”栏查看);- 主机名
node1~node4是 Hadoop 配置文件中core-site.xml和yarn-site.xml引用的标识,不可用ecs-ca89-0001等云平台生成名替代; Tab分隔符是 Linux hosts 解析的关键,空格会导致ssh node2时解析为node2.localdomain而非node2,引发连接拒绝。
2.3 四节点 SSH 免密登录:用ssh-copy-id替代手动追加公钥
实验原文中直接粘贴ssh-rsa AAAA...公钥到authorized_keys,极易因换行符丢失或权限错误失败。正确做法是:
# 在 node1 上执行(作为集群主节点) ssh-keygen -t rsa -b 4096 -N "" -f ~/.ssh/id_rsa # 生成无密码密钥对 # 将 node1 的公钥分发到所有节点(包括自己) for host in node1 node2 node3 node4; do ssh-copy-id -o StrictHostKeyChecking=no $host done # 验证:从 node1 无密码登录其他节点 ssh node2 "hostname; echo '✅ node1 → node2 OK'" ssh node3 "hostname; echo '✅ node1 → node3 OK'" # 若提示输入密码,说明免密未生效,立即执行: chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys逻辑说明:
ssh-copy-id自动处理~/.ssh/authorized_keys权限(必须600)、目录权限(必须700)及公钥格式校验;-o StrictHostKeyChecking=no跳过首次连接的yes/no确认,避免脚本中断;- 验证命令中嵌入
hostname是为了确认登录的是目标机器而非本地 shell,防止因 hosts 配置错误导致“看似成功实则连错”。
2.4 关闭防火墙与 SELinux:绕过云平台默认策略干扰
华为云 ECS 默认启用firewalld,且SELinux处于enforcing模式,这两者会拦截 Hadoop RPC 端口(如8020,9000)和 YARN 容器通信。必须全局关闭:
# 所有节点执行(node1~node4) systemctl stop firewalld && systemctl disable firewalld setenforce 0 # 临时禁用 SELinux sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config # 永久禁用 reboot # 重启确保生效踩坑点:仅stop firewalld不够!disable才能保证重启后不自启;setenforce 0只是运行时生效,必须修改/etc/selinux/config才持久。若跳过此步,Hadoop 格式化hdfs namenode -format会卡在Starting namenodes on [node1]无响应。
3. Hadoop 完全分布式集群搭建:从 JDK 安装到 OBS 数据互通
3.1 OpenJDK 11 安装与环境变量固化
Hadoop 3.x 要求 JDK 8+,但华为云 CentOS 7.9 默认java-1.8.0-openjdk存在 GC Bug 导致 NameNode 频繁 Full GC。实验采用 OpenJDK 11:
# 所有节点执行 yum install -y wget tar gzip wget https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.11%2B9/OpenJDK11U-jdk_x64_linux_hotspot_11.0.11_9.tar.gz tar -zxf OpenJDK11U-jdk_x64_linux_hotspot_11.0.11_9.tar.gz -C /opt/ ln -sf /opt/jdk-11.0.11+9 /opt/java # 写入全局环境变量(避免 su - 切换用户后 JAVA_HOME 失效) echo 'export JAVA_HOME=/opt/java' >> /etc/profile echo 'export PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile source /etc/profile # 验证 java -version # 输出应为 openjdk version "11.0.11" 2021-04-20参数说明:
- 必须使用
AdoptOpenJDK官方构建版,华为云镜像源中的java-11-openjdk未通过 Hadoop 兼容性测试; ln -sf创建软链接是为了后续升级 JDK 时只需改链接目标,无需重配所有环境变量;- 写入
/etc/profile而非~/.bashrc,因 Hadoop 启动脚本由root用户调用,su - hdfs会加载/etc/profile。
3.2 Hadoop 3.3.6 下载解压与目录结构标准化
实验原文未指定 Hadoop 版本,但hadoop-mapreduce-examples-*.jar在 3.3.6 中路径稳定,且兼容华为云 OBS SDK:
# node1 节点执行(主节点分发) cd /opt wget https://archive.apache.org/dist/hadoop/core/hadoop-3.3.6/hadoop-3.3.6.tar.gz tar -zxf hadoop-3.3.6.tar.gz ln -sf /opt/hadoop-3.3.6 /opt/hadoop # 创建标准目录结构(HDFS 数据存储路径) mkdir -p /data/hadoop/{namenode,datanode,journalnode} chown -R root:root /data/hadoop chmod 755 /data/hadoop逻辑说明:
archive.apache.org是 Apache 官方归档站,确保下载的是未经篡改的原始二进制包;/data/hadoop/目录独立于系统盘,避免 HDFS 数据增长撑爆根分区;journalnode目录为后续启用 QJM(Quorum Journal Manager)高可用预留,即使单 NameNode 也需创建。
3.3 核心配置文件详解:core-site.xml、hdfs-site.xml、yarn-site.xml
Hadoop 配置本质是 XML 中的<property>嵌套,任何拼写错误(如fs.defaultFS写成fs.default.fs)都会导致启动失败。以下是经实测的最小可行配置:
<!-- /opt/hadoop/etc/hadoop/core-site.xml --> <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://node1:9000</value> <!-- 注意:此处必须是 node1,非 localhost --> </property> <property> <name>hadoop.tmp.dir</name> <value>/data/hadoop/tmp</value> </property> </configuration><!-- /opt/hadoop/etc/hadoop/hdfs-site.xml --> <configuration> <property> <name>dfs.namenode.name.dir</name> <value>/data/hadoop/namenode</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/data/hadoop/datanode</value> </property> <property> <name>dfs.replication</name> <value>2</value> <!-- 四节点集群,replication=2 避免单点故障 --> </property> <property> <name>dfs.permissions.enabled</name> <value>false</value> <!-- 华为云 ECS 默认无 HDFS 用户体系,关闭权限检查 --> </property> </configuration><!-- /opt/hadoop/etc/hadoop/yarn-site.xml --> <configuration> <property> <name>yarn.resourcemanager.hostname</name> <value>node1</value> <!-- ResourceManager 固定在 node1 --> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.env-whitelist</name> <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value> </property> </configuration>关键参数解释:
fs.defaultFS的node1:9000必须与/etc/hosts中定义的node1主机名完全一致,大小写敏感;dfs.replication=2是四节点集群的黄金值:设为1无容错,设为4导致写入放大,2平衡性能与可靠性;dfs.permissions.enabled=false是华为云场景必需项,否则hdfs dfs -ls /会报org.apache.hadoop.security.AccessControlException。
3.4 格式化 NameNode 并启动集群
配置完成后,仅在node1执行格式化,其他节点自动同步:
# node1 执行 /opt/hadoop/bin/hdfs namenode -format # 输出含 "Storage directory ... has been successfully formatted" # 启动 HDFS(先起 NameNode,再起 DataNode) /opt/hadoop/sbin/start-dfs.sh # 自动在 node1 起 NameNode,在 node2~node4 起 DataNode # 启动 YARN(ResourceManager 在 node1,NodeManager 在 node2~node4) /opt/hadoop/sbin/start-yarn.sh # 验证进程(所有节点都应看到对应进程) jps | grep -E "(NameNode|DataNode|ResourceManager|NodeManager)" # node1 应输出:NameNode ResourceManager Jps # node2~node4 应输出:DataNode NodeManager Jps现象排查:若jps无输出,立即检查:
JAVA_HOME是否生效(echo $JAVA_HOME);/etc/hosts中node1是否能ping通;netstat -tuln | grep 9000是否监听0.0.0.0:9000(非127.0.0.1:9000)。
4. OBS 对象存储接入:从 AK/SK 获取到 HDFS-OBS 桥接
4.1 OBS 桶创建与 AK/SK 安全提取
实验原文中credentials.csv的Secret Access Key直接明文暴露,存在严重安全风险。正确流程是:
- 华为云控制台 → “对象存储服务 OBS” → “创建桶”;
- 桶名:全小写、无下划线、长度 3-63 字符(如
hhu-bigdata-bucket); - 区域:必须与 ECS 相同(
华北-4),否则obs.cn-north-4.myhuaweicloud.com无法访问; - 读写权限:选择“公共读”,因 Hadoop 作业需从 OBS 读取输入数据;
- 创建后,进入“我的凭证” → “访问密钥(AK/SK)” → “新增访问密钥”,下载
credentials.csv; - 立即删除本地
credentials.csv,从文件中提取 AK/SK:# 从 credentials.csv 提取(假设文件在 /root/) awk -F',' 'NR==2 {print "AK:", $2; print "SK:", $3}' /root/credentials.csv # 输出示例:AK: S8RSFKYBTOSPA9YX92XB SK: jpU0nHcXWVjftBFo7lAdgbq6JjCOPENZylB1fOTk
注意:
Secret Access Key仅显示一次,丢失需重新创建 AK/SK,旧密钥自动失效。
4.2 配置 Hadoop 与 OBS 的认证桥接
Hadoop 本身不支持 OBS,需通过hadoop-aliyun兼容层(华为云 OBS 兼容阿里云 OSS API)。将hadoop-aliyun-3.3.6.jar及其依赖注入 Hadoop:
# node1 执行 cd /opt/hadoop/share/hadoop/tools/lib # 下载兼容 JAR(华为云 OBS 使用 OSS 协议) wget https://repo1.maven.org/maven2/org/apache/hadoop/hadoop-aliyun/3.3.6/hadoop-aliyun-3.3.6.jar wget https://repo1.maven.org/maven2/com/aliyun/oss/aliyun-sdk-oss/3.15.1/aliyun-sdk-oss-3.15.1.jar wget https://repo1.maven.org/maven2/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar wget https://repo1.maven.org/maven2/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar # 修改 core-site.xml,添加 OBS 认证配置 cat >> /opt/hadoop/etc/hadoop/core-site.xml << 'EOF' <property> <name>fs.obs.impl</name> <value>org.apache.hadoop.fs.obs.OBSFileSystem</value> </property> <property> <name>fs.AbstractFileSystem.obs.impl</name> <value>org.apache.hadoop.fs.obs.OBS</value> </property> <property> <name>fs.obs.access.key</name> <value>S8RSFKYBTOSPA9YX92XB</value> <!-- 替换为你的 AK --> </property> <property> <name>fs.obs.secret.key</name> <value>jpU0nHcXWVjftBFo7lAdgbq6JjCOPENZylB1fOTk</value> <!-- 替换为你的 SK --> </property> <property> <name>fs.obs.endpoint</name> <value>obs.cn-north-4.myhuaweicloud.com</value> </property> EOF参数说明:
fs.obs.endpoint必须用obs.cn-north-4.myhuaweicloud.com(非双栈地址),双栈地址在 Java SDK 中解析异常;fs.obs.access.key和fs.obs.secret.key是明文写入,生产环境应使用 KMS 加密或 Credential Provider,但实验阶段可接受;- 所有 JAR 包必须放在
share/hadoop/tools/lib/,Hadoop 工具链(如hadoop fs)只从此路径加载 OBS 插件。
4.3 测试 OBS 与 HDFS 互通:hadoop fs命令验证
配置完成后,用hadoop fs命令直连 OBS,验证认证与网络:
# node1 执行 # 列出 OBS 桶根目录(需桶内有文件,或先上传测试文件) /opt/hadoop/bin/hadoop fs -ls obs://hhu-bigdata-bucket/ # 上传本地文件到 OBS(测试写权限) echo "Hello OBS from Hadoop" > /tmp/test-obs.txt /opt/hadoop/bin/hadoop fs -put /tmp/test-obs.txt obs://hhu-bigdata-bucket/test/ # 从 OBS 读取文件到本地(测试读权限) /opt/hadoop/bin/hadoop fs -get obs://hhu-bigdata-bucket/test/ /tmp/from-obs.txt cat /tmp/from-obs.txt # 应输出 "Hello OBS from Hadoop"失败现象与原因:
ls报com.aliyun.oss.OSSException: The bucket you are attempting to access must be addressed using the specified endpoint.→fs.obs.endpoint填错 Region;put报com.aliyun.oss.OSSException: The OSS Access Key Id you provided does not exist in our records.→ AK/SK 复制错误或已失效;get报java.io.IOException: Stream is closed→ JAR 包缺失httpclient或版本不匹配(必须 4.5.14)。
5. Spark on YARN 集成与 WordCount 实战:端到端数据流转验证
5.1 Spark 3.3.2 下载与 YARN 模式配置
Spark 需与 Hadoop 版本严格匹配,spark-3.3.2-bin-hadoop3是唯一兼容 Hadoop 3.3.6 的发行版:
# node1 执行 cd /opt wget https://archive.apache.org/dist/spark/spark-3.3.2/spark-3.3.2-bin-hadoop3.tgz tar -zxf spark-3.3.2-bin-hadoop3.tgz ln -sf /opt/spark-3.3.2-bin-hadoop3 /opt/spark # 配置 Spark 使用 YARN 作为集群管理器 cat > /opt/spark/conf/spark-env.sh << 'EOF' export JAVA_HOME=/opt/java export HADOOP_CONF_DIR=/opt/hadoop/etc/hadoop export SPARK_DIST_CLASSPATH=$(/opt/hadoop/bin/hadoop classpath) EOF chmod +x /opt/spark/conf/spark-env.sh逻辑说明:
SPARK_DIST_CLASSPATH必须通过hadoop classpath动态获取,硬编码路径会导致ClassNotFoundException: org.apache.hadoop.fs.obs.OBSFileSystem;HADOOP_CONF_DIR指向 Hadoop 配置目录,使 Spark 能读取core-site.xml中的 OBS 认证信息;spark-env.sh必须chmod +x,否则 Spark 启动时忽略该文件。
5.2 准备 WordCount 输入数据:HDFS 与 OBS 双源
WordCount 需要输入文本文件。实验提供两种方式,验证不同存储的读取能力:
# 方式1:上传到 HDFS(本地文件 → HDFS) echo -e "hello world\nhello hadoop\nworld spark" > /tmp/input.txt /opt/hadoop/bin/hadoop fs -mkdir -p /input/wordcount /opt/hadoop/bin/hadoop fs -put /tmp/input.txt /input/wordcount/ # 方式2:上传到 OBS(本地文件 → OBS) /opt/hadoop/bin/hadoop fs -mkdir -p obs://hhu-bigdata-bucket/input/wordcount /opt/hadoop/bin/hadoop fs -put /tmp/input.txt obs://hhu-bigdata-bucket/input/wordcount/5.3 提交 Spark WordCount 任务到 YARN
使用spark-submit提交,关键参数决定任务能否成功:
# 提交到 HDFS 输入源(推荐初试) /opt/spark/bin/spark-submit \ --master yarn \ --deploy-mode cluster \ --driver-memory 2g \ --executor-memory 2g \ --executor-cores 2 \ --num-executors 2 \ --class org.apache.spark.examples.JavaWordCount \ /opt/spark/examples/jars/spark-examples_2.12-3.3.2.jar \ hdfs://node1:9000/input/wordcount/input.txt \ hdfs://node1:9000/output/wordcount-hdfs # 提交到 OBS 输入源(验证 OBS 集成) /opt/spark/bin/spark-submit \ --master yarn \ --deploy-mode cluster \ --driver-memory 2g \ --executor-memory 2g \ --executor-cores 2 \ --num-executors 2 \ --class org.apache.spark.examples.JavaWordCount \ /opt/spark/examples/jars/spark-examples_2.12-3.3.2.jar \ obs://hhu-bigdata-bucket/input/wordcount/input.txt \ obs://hhu-bigdata-bucket/output/wordcount-obs参数说明:
--master yarn强制使用 YARN 调度,非local[*];--deploy-mode cluster使 Driver 运行在 YARN 容器内,避免本地网络问题;--num-executors 2是四节点集群的合理值,Executor 数量超过 DataNode 数会导致资源争抢;- 输入/输出路径必须用完整 URI(
hdfs://或obs://),不能省略协议头。
5.4 查看结果与日志:定位任务失败根源
任务提交后,通过 YARN WebUI 或命令行查状态:
# 查看所有 YARN 应用 /opt/hadoop/bin/yarn application -list # 获取最新应用 ID(如 application_171xxxxxx_xxxx) APP_ID=$(yarn application -list | grep SPARK | head -1 | awk '{print $1}') # 查看应用状态 /opt/hadoop/bin/yarn application -status $APP_ID # 若状态为 FAILED,拉取 Driver 日志(关键!) /opt/hadoop/bin/yarn logs -applicationId $APP_ID | grep -A 10 -B 10 "Exception\|ERROR"典型成功日志特征:
Application report for application_xxx (state: FINISHED);Final app status: SUCCEEDED;Output path: hdfs://node1:9000/output/wordcount-hdfs/part-r-00000;hadoop fs -cat /output/wordcount-hdfs/part-r-00000输出hello 2hadoop 1spark 1world 2。
6. 避坑指南:四节点 Hadoop+Spark+OBS 集群的 5 个血泪经验
6.1 现象:start-dfs.sh后jps看不到 DataNode,hadoop fs -ls /报Connection refused
原因:/etc/hosts中node1解析为127.0.0.1而非内网 IP,导致 DataNode 向127.0.0.1:9000注册,但 NameNode 监听的是0.0.0.0:9000。
解决:
ping node1确认返回内网 IP(如192.168.0.10);netstat -tuln | grep 9000确认监听0.0.0.0:9000;- 若监听
127.0.0.1:9000,检查core-site.xml中fs.defaultFS是否误写为localhost:9000。
6.2 现象:Spark WordCount 提交后 YARN Application 状态为ACCEPTED长时间不变成RUNNING
原因:YARN 资源不足,yarn.scheduler.maximum-allocation-mb默认 8192MB,但--executor-memory 2g请求 2048MB,若集群内存碎片化,无法分配连续块。
解决:
- 编辑
/opt/hadoop/etc/hadoop/yarn-site.xml,添加:<property> <name>yarn.scheduler.maximum-allocation-mb</name> <value>4096</value> </property> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>4096</value> </property> - 重启 YARN:
/opt/hadoop/sbin/stop-yarn.sh && /opt/hadoop/sbin/start-yarn.sh。
6.3 现象:hadoop fs -ls obs://bucket/报java.lang.NoClassDefFoundError: com/aliyun/oss/OSSClient
原因:hadoop-aliyun-3.3.6.jar未放入share/hadoop/tools/lib/,或httpclient版本不匹配(如用了 4.5.13)。
解决:
ls /opt/hadoop/share/hadoop/tools/lib/ | grep -E "(aliyun|http)"确认四个 JAR 全在;jar -tf /opt/hadoop/share/hadoop/tools/lib/hadoop-aliyun-3.3.6.jar | head -5验证 JAR 可读;- 删除旧版
httpclient,只保留4.5.14。
6.4 现象:OBS 桶内文件可ls,但hadoop fs -get obs://bucket/file /tmp/报java.io.IOException: Stream is closed
原因:fs.obs.endpoint填了双栈地址obs.dualstack.cn-north-4.myhuaweicloud.com,而华为云 OBS Java SDK 不支持双栈解析。
解决:
- 检查
core-site.xml,将fs.obs.endpoint改为obs.cn-north-4.myhuaweicloud.com; hadoop fs -ls obs://bucket/重新验证。
6.5 现象:Spark UI 页面(http://node1:4040)打不开,但yarn application -list显示 RUNNING
原因:Spark UI 默认绑定0.0.0.0:4040,但华为云安全组未放行4040端口,或浏览器访问的是http://124.70.110.126:4040(公网 IP),而 Spark UI 仅监听内网。
解决:
- 控制台安全组中添加入方向规则:端口
4040,源地址0.0.0.0/0; - 浏览器访问
http://124.70.110.126:4040(node1 公网 IP),非http://node1:4040; - 若仍失败,在
spark-defaults.conf中添加:spark.ui.bindAddress 0.0.0.0 spark.ui.port 4040
7. 生产级加固与验证技巧:让集群真正扛住压力测试
7.1 用terasort替代wordcount进行吞吐量压测
wordcount是单机小数据验证,terasort才是检验四节点集群真实性能的标尺。它生成 TB 级随机数据并排序,暴露出网络、磁盘、JVM 的瓶颈:
# 在 node1 生成 1GB 数据(1000 个 1MB 分片) /opt/hadoop/bin/hadoop jar /opt/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar \ teragen -D mapreduce.job.reduces=4 10000000 /input/terasort-data # 执行排序(输入 /input/terasort-data,输出 /output/terasort-out) /opt/hadoop/bin/hadoop jar /opt/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar \ terasort -D mapreduce.job.reduces=4 /input/terasort-data /output/terasort-out # 验证结果正确性(必须输出 "SUCCESS") /opt/hadoop/bin/hadoop jar /opt/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar \ teravalidate /output/terasort-out /output/terasort-validate关键参数:
10000000表示生成 10M 行(约 1GB),-D mapreduce.job.reduces=4匹配四节点,避免 Reduce 任务堆积;teravalidate是必须步骤,它读取排序结果并校验全局有序性,失败则说明 HDFS 写入或 MapReduce shuffle 出错。
7.2 监控集群健康:用hadoop dfsadmin和yarn node -list
日常运维不能只靠jps,需用 Hadoop 原生命令诊断:
# 检查 HDFS 磁盘使用率(避免 DataNode 因满盘下线) /opt/hadoop/bin/hadoop dfsadmin -report | grep -E "(Live datanodes|Used|Capacity)" # 检查 YARN 节点状态(确认所有 NodeManager 在线) /opt/hadoop/bin/yarn node -list -all | grep -E "(node[1 <p> <a href="https://download.csdn.net/download/qq_43624193/78575837" style="color:#ec7500;font-size:14px;"> 本文还有配套的精品资源,点击获取 </a> <img alt="menu-r.4af5f7ec.gif" src="https://csdnimg.cn/release/wenkucmsfe/public/img/menu-r.4af5f7ec.gif" style="width:16px;margin-left:4px;vertical-align:text-bottom;cursor:text;"> </p>