简介:本资源是一份面向大数据初学者与鲲鹏云平台实践者的Hadoop集群部署实验报告,聚焦华为云环境下基于ARM架构(鲲鹏)的大数据基础设施搭建全流程。报告完整覆盖ECS服务器与OBS对象存储的开通配置、AK/SK密钥获取、多节点互信配置(/etc/hosts+SSH免密)、Hadoop 2.8.3在aarch64平台的编译适配、Java环境(openjdk-1.8.0)精准定位与全局变量修正、六大核心配置文件(core-site.xml/hdfs-site.xml/yarn-site.xml/mapred-site.xml/slaves/profile)逐项参数说明,以及NameNode初始化与HDFS服务启动排错实录。资源为单个2.52MB的DOCX文档,内容结构清晰,含详细命令行截图、配置片段与错误复现分析,特别适合在国产化云环境中开展大数据实验的教学参考与自学复盘。目前已有893人学习下载,是少有的涵盖鲲鹏云+Hadoop+OBS深度集成的实操型技术文档。
1. 鲲鹏云大数据实验:为什么在 aarch64 架构上配 Hadoop 比 x86 更容易翻车,但又必须亲手配一遍?
这不是一份“点点鼠标就跑通 MapReduce”的云平台向导,而是一份真实踩过坑、重装过 7 次 JDK、改过 13 版 core-site.xml、在 node-0001 上反复执行hdfs namenode -format直到看到绿色 SUCCESS 的实验记录。它解决的核心问题是:如何在华为鲲鹏云(aarch64 架构)的 ECS 实例上,从零搭建一个能对接 OBS、可执行基础 HDFS 操作、经得起答辩提问的 Hadoop 2.8.3 伪分布/小规模集群。适合某高校大数据课程设计、某实验室鲲鹏适配验证项目、或某开发者准备国产化信创环境交付前的最小可行验证。你不需要提前懂 OBS 权限模型,也不用背诵 YARN 调度策略——但必须清楚每一步改的是哪个文件、为什么改、不改会卡在哪条命令上。这份 docx 不是说明书,它是你打开终端后,能照着敲、能查日志、能定位失败原因、最后真能把/user/root/input里的文本文件hdfs dfs -cat出来的一套闭环方案。
2. 华为云环境准备:ECS 规格选型、OBS 桶创建与 AK/SK 安全落盘
2.1 ECS 实例配置:为什么必须选 EulerOS + aarch64,且内存不能低于 4GB
在华为云控制台购买 ECS 时,操作系统必须选择 EulerOS 2.0 或 2.8(ARM64 版本),而非 CentOS 或 Ubuntu。这是鲲鹏云大数据实验的硬性前提——Hadoop 2.8.3 官方预编译包对 aarch64 的支持仅通过 EulerOS 验证;若误选 x86_64 镜像,后续java -version可能显示正常,但hadoop version会报NoClassDefFoundError: Could not initialize class org.apache.hadoop.util.NativeCodeLoader,因为 native lib 缺失且无法动态编译。
推荐配置:
- 规格:
kc1.large.2(2vCPU / 4GB 内存 / 100GB 系统盘)——这是启动 NameNode 的最低可用规格;低于此,start-dfs.sh启动后jps看不到 DataNode 进程,日志里满屏java.lang.OutOfMemoryError: Java heap space。 - 网络:务必勾选“分配弹性公网 IP”,否则 node-0001 无法 SSH 登录,更无法从本地上传安装包。
- 安全组:放行端口
22(SSH)、50070(HDFS WebUI)、8088(YARN WebUI)、9000(HDFS 默认 fs.defaultFS 端口)。
提示:不要在控制台直接“远程登录”Web Shell 操作集群。所有配置必须通过本地终端
ssh root@124.70.110.126进行,否则.ssh/config和环境变量无法持久化。
2.2 OBS 桶创建与凭证安全导出:endpoint、AK/SK 的三处关键用途
OBS 是本实验的数据底座,不是可选项。它承担三重角色:
- Hadoop 文件系统后端:通过
fs.obs.impl=org.apache.hadoop.fs.obs.OBSFileSystem将/user目录挂载到 OBS 桶; - JAR 包分发源:将
hadoop-2.8.3.tar.gz、openjdk-8u242-b08-aarch64.rpm等上传至 OBS,再用wget下载,避免本地上传带宽瓶颈; - 日志与结果存储:
yarn.log-aggregation-enable=true后,Container 日志自动归集到 OBS 桶指定路径。
创建步骤:
- 进入华为云 OBS 控制台 → “创建桶” → 区域选
华北-北京四(cn-north-4)(与 ECS 同区域,降低延迟); - 桶名设为
hadoop-cluster-data(全小写、无下划线、符合 DNS 命名规范); - 读写权限选“私有”,绝不选“公共读”——否则 AK/SK 泄露即桶内数据裸奔;
- 创建完成后,在桶详情页复制两个地址:
- IPv4 Endpoint:
obs.cn-north-4.myhuaweicloud.com(core-site.xml 中fs.obs.endpoint值); - 双栈 Endpoint:
obs.dualstack.cn-north-4.myhuaweicloud.com(部分 SDK 兼容性要求,备用)。
- IPv4 Endpoint:
凭证获取:
- 进入“访问密钥” → “新增访问密钥” → 下载
credentials.csv; - 用
cat credentials.csv | sed -n '2p' | cut -d',' -f2,3提取第二行的 AK/SK(跳过表头),结果形如:S8RSFKYBTOSPA9YX92XB,gjGNhoN8NkApdf4zjKcNDpLsQdsBW1RXl117E06q - 立即保存到本地密码管理器,切勿粘贴到任何公开文档或聊天窗口。该密钥拥有桶级读写权限,有效期默认永久,一旦泄露需立即停用。
2.3 凭证写入 core-site.xml:AK/SK 明文存储的合规替代方案
直接把 AK/SK 写进core-site.xml是高危操作,但实验阶段为简化流程,我们采用“加密后明文写入 + 权限收紧”双保险:
- 在 node-0001 上执行:
# 生成 base64 加密字符串(非真正加密,仅防 casual 查看) echo -n "S8RSFKYBTOSPA9YX92XB" | base64 # 输出:UzhSU0ZLWUJUT1NQQTlZWDkyWEI= echo -n "gjGNhoN8NkApdf4zjKcNDpLsQdsBW1RXl117E06q" | base64 # 输出:Z2pHTmhvTjhOa0FwZGY0empLY05EcExzUWRzQldBUVhsMTExN0UwNnE= - 编辑
/home/modules/hadoop-2.8.3/etc/hadoop/core-site.xml,插入以下配置:<configuration> <!-- OBS 作为默认文件系统 --> <property> <name>fs.defaultFS</name> <value>obs://hadoop-cluster-data/</value> </property> <!-- OBS 实现类 --> <property> <name>fs.obs.impl</name> <value>org.apache.hadoop.fs.obs.OBSFileSystem</value> </property> <!-- OBS endpoint --> <property> <name>fs.obs.endpoint</name> <value>obs.cn-north-4.myhuaweicloud.com</value> </property> <!-- AK/SK(base64 编码后) --> <property> <name>fs.obs.access.key</name> <value>UzhSU0ZLWUJUT1NQQTlZWDkyWEI=</value> </property> <property> <name>fs.obs.secret.key</name> <value>Z2pHTmhvTjhOa0FwZGY0empLY05EcExzUWRzQldBUVhsMTExN0UwNnE=</value> </property> <!-- 关键:禁用 SSL 验证(实验环境简化,生产必须开) --> <property> <name>fs.obs.ssl.enabled</name> <value>false</value> </property> </configuration> - 设置文件权限:
chmod 600 /home/modules/hadoop-2.8.3/etc/hadoop/core-site.xml chown root:root /home/modules/hadoop-2.8.3/etc/hadoop/core-site.xml
注意:
fs.obs.ssl.enabled=false仅限实验环境。生产环境必须设为true并配置fs.obs.trust.all.certificates=true或导入华为云根证书,否则连接 OBS 会报javax.net.ssl.SSLHandshakeException。
3. Hadoop 集群部署:节点互信、目录结构与 aarch64 专用 JDK 适配
3.1 节点规划与 hosts 绑定:为什么不用域名而坚持用 IP+静态映射
本实验采用 3 节点最小集群:
- node-0001(124.70.110.126):NameNode + ResourceManager + JobHistoryServer
- node-0002(120.46.156.37):DataNode + NodeManager
- node-0003(121.36.3.111):DataNode + NodeManager
禁止使用node-0001.internal类似域名。华为云 ECS 默认不提供内网 DNS 解析服务,ping node-0001必然失败。正确做法是统一编辑/etc/hosts:
# 所有节点均执行 echo "124.70.110.126 node-0001" >> /etc/hosts echo "120.46.156.37 node-0002" >> /etc/hosts echo "121.36.3.111 node-0003" >> /etc/hosts验证:ping -c 2 node-0002应返回64 bytes from node-0002: icmp_seq=1 ttl=64 time=0.234 ms。若超时,检查安全组是否放行 ICMP 协议(非必须,但排错快)。
3.2 SSH 无密码互信:公钥分发的三个致命细节
互信不是“能 ssh 进去”就行,而是ssh node-0002 date必须秒回时间,且hadoop-daemon.sh start datanode能跨节点拉起进程。常见失败点:
- 私钥权限错误:
/root/.ssh/id_rsa必须chmod 600,否则 OpenSSH 拒绝加载; - authorized_keys 权限错误:
/root/.ssh/authorized_keys必须chmod 600,且属主为root; - sshd 配置未重启:修改
/etc/ssh/sshd_config后必须systemctl restart sshd。
标准流程(在 node-0001 上执行):
# 1. 生成密钥对(一路回车,默认路径) ssh-keygen -t rsa -b 4096 -f /root/.ssh/id_rsa -N "" # 2. 分发公钥到所有节点(含自己) for node in node-0001 node-0002 node-0003; do ssh-copy-id -i /root/.ssh/id_rsa.pub root@$node done # 3. 验证(逐个测试) ssh node-0002 "date" && echo "✓ node-0002 OK" ssh node-0003 "date" && echo "✓ node-0003 OK"若提示Permission denied (publickey),检查目标节点/root/.ssh/authorized_keys是否包含 node-0001 的公钥,以及/root/.ssh目录权限是否为700。
3.3 aarch64 专用 JDK 安装:为什么 openjdk-8u242-b08 是唯一安全选择
Hadoop 2.8.3 编译时针对 aarch64 的 JNI 库仅验证过openjdk-8u242-b08-aarch64.rpm。其他版本(如 u302、u332)会导致:
hadoop version报UnsatisfiedLinkError: /home/modules/hadoop-2.8.3/lib/native/libhadoop.so: cannot open shared object file: No such file or directory;start-dfs.sh启动后 DataNode 进程秒退,logs/hadoop-root-datanode-node-0002.log末尾出现Failed to load native-hadoop library。
安装命令(所有节点):
# 从 OBS 下载(假设已上传) wget https://obs.cn-north-4.myhuaweicloud.com/hadoop-deps/openjdk-8u242-b08-aarch64.rpm # 安装并验证 rpm -ivh openjdk-8u242-b08-aarch64.rpm java -version # 输出必须含 "OpenJDK Runtime Environment (build 1.8.0_242-b08)"关键环境变量设置(所有节点/etc/profile末尾追加):
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-1.h5.oe1.aarch64 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar血泪经验:
JAVA_HOME路径必须与rpm -ql java-1.8.0-openjdk | grep jre输出的顶级目录完全一致。少一个h5.oe1.aarch64后缀,hadoop-env.sh里JAVA_HOME就指向空目录,后续所有命令失效。
4. Hadoop 核心配置:四文件精准修改与 slaves 列表的物理意义
4.1 core-site.xml 深度解析:OBS 作为 defaultFS 的 5 个必填参数
上一章已写入基础 OBS 配置,但要让 Hadoop 真正信任 OBS,还需补全 3 个关键属性:
<!-- core-site.xml 追加 --> <property> <name>fs.obs.buffer.size</name> <value>131072</value> <!-- 128KB 缓冲区,适配 OBS 吞吐 --> </property> <property> <name>fs.obs.connection.max</name> <value>100</value> <!-- 最大 HTTP 连接数 --> </property> <property> <name>fs.obs.readahead.range</name> <value>65536</value> <!-- 预读范围,提升顺序读性能 --> </property>这三项直接影响hdfs dfs -ls obs://hadoop-cluster-data/的响应速度。若省略,首次 list 桶可能耗时 20 秒以上,且并发hadoop jar任务时易触发Too many connections异常。
4.2 hdfs-site.xml:NameNode 与 DataNode 的本地路径分离策略
HDFS 不允许 NameNode 和 DataNode 共享同一磁盘分区。实验中我们强制分离:
- NameNode 元数据存于
/home/nm/namenode(node-0001 专属); - DataNode 数据块存于
/home/dn/datanode(node-0002/node-0003 各自独立)。
配置如下(node-0001 的hdfs-site.xml):
<configuration> <property> <name>dfs.namenode.name.dir</name> <value>file:/home/nm/namenode</value> <!-- 绝对路径,且目录需手动创建 --> </property> <property> <name>dfs.blocksize</name> <value>134217728</value> <!-- 128MB,适配 OBS 分片上传 --> </property> <property> <name>dfs.replication</name> <value>2</value> <!-- 3 节点集群,设为 2 避免单点故障 --> </property> </configuration>必须执行的初始化命令(仅 node-0001):
mkdir -p /home/nm/namenode chown -R root:root /home/nm/namenode hdfs namenode -format # 输出 "Storage directory ... has been successfully formatted."注意:
-format命令会清空/home/nm/namenode下所有内容。若重复执行,需先rm -rf /home/nm/namenode/*,否则报Inconsistent namespaceID错误。
4.3 yarn-site.xml 与 mapred-site.xml:资源调度与计算框架绑定
YARN 是本实验的资源总管,MapReduce 是默认计算引擎。两文件必须严格对应:
yarn-site.xml(所有节点):
<configuration> <property> <name>yarn.resourcemanager.hostname</name> <value>node-0001</value> <!-- RM 固定在 node-0001 --> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> <!-- 关键!绑定 MR Shuffle --> </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>mapred-site.xml(所有节点):
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> <!-- 告诉 MR 运行在 YARN 上 --> </property> <property> <name>mapreduce.application.classpath</name> <value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value> </property> </configuration>避坑:常见问题与排查
现象:
start-yarn.sh后jps看不到 ResourceManager,yarn logs -applicationId application_...报Connection refused。
原因:yarn.resourcemanager.hostname写成localhost或 IP,未用node-0001(hosts 解析名)。
解决:确认/etc/hosts中node-0001映射正确,并ping node-0001通。现象:
hadoop jar hadoop-mapreduce-examples-2.8.3.jar wordcount obs://hadoop-cluster-data/input obs://hadoop-cluster-data/output提交后卡在ACCEPTED状态,YARN WebUI 显示AM Container is not running.
原因:yarn.nodemanager.aux-services值不是mapreduce_shuffle(大小写敏感),或mapred-site.xml中mapreduce.framework.name未设为yarn。
解决:逐行比对配置,确保字符串完全一致,无空格、无换行符。现象:DataNode 启动后立即退出,
logs/hadoop-root-datanode-*.log末尾报Failed to add storage id ... to the list of used IDs。
原因:dfs.datanode.data.dir路径在 node-0002/node-0003 上未创建,或权限非root:root。
解决:mkdir -p /home/dn/datanode && chown -R root:root /home/dn/datanode。现象:
hdfs dfs -ls obs://hadoop-cluster-data/返回空列表,但 OBS 控制台可见文件。
原因:core-site.xml中fs.obs.ssl.enabled=false未生效,或fs.obs.endpoint地址多了一个/(如obs.cn-north-4.myhuaweicloud.com/)。
解决:检查 endpoint 是否含尾部斜杠,telnet obs.cn-north-4.myhuaweicloud.com 80确认连通性。现象:
start-dfs.sh后jps显示 NameNode,但hdfs dfsadmin -report报Call From node-0001/124.70.110.126 to node-0001:9000 failed on connection exception。
原因:core-site.xml中fs.defaultFS值写成hdfs://node-0001:9000(这是 HDFS 协议),但本实验用 OBS 作 defaultFS,应为obs://hadoop-cluster-data/。
解决:fs.defaultFS必须与fs.obs.impl保持协议一致,二者不可混用。
4.4 slaves 文件:不是“工作节点列表”,而是“DataNode+NodeManager 启动清单”
slaves文件位于/home/modules/hadoop-2.8.3/etc/hadoop/slaves,其作用被严重误解:
- ❌ 它不参与 HDFS 数据块分布决策(那是
dfs.hosts的事); - ✅ 它只决定
start-dfs.sh时,哪些节点执行hadoop-daemon.sh start datanode; - ✅ 它只决定
start-yarn.sh时,哪些节点执行yarn-daemon.sh start nodemanager。
因此,内容必须是:
node-0002 node-0003不能写 IP,不能写node-0001。若误加node-0001,会导致 node-0001 同时运行 NameNode 和 DataNode,磁盘 I/O 争抢,jps看似正常,但hdfs dfs -put大文件时频繁超时。
5. 集群启动与功能验证:从 format 到 wordcount 的完整链路
5.1 启动顺序与进程校验:为什么必须先启 HDFS,再启 YARN
Hadoop 服务有强依赖关系:
start-dfs.sh→ 启动 NameNode(node-0001)、DataNode(node-0002/node-0003);start-yarn.sh→ 启动 ResourceManager(node-0001)、NodeManager(node-0002/node-0003);mr-jobhistory-daemon.sh start historyserver→ 启动 JobHistoryServer(node-0001),用于查看已完成作业日志。
标准启动脚本(node-0001 执行):
# 1. 切换到 Hadoop 目录 cd /home/modules/hadoop-2.8.3 # 2. 启动 HDFS(等待 10 秒,确保 NN 完全就绪) ./sbin/start-dfs.sh sleep 10 # 3. 启动 YARN ./sbin/start-yarn.sh sleep 5 # 4. 启动历史服务器 ./sbin/mr-jobhistory-daemon.sh start historyserver # 5. 校验进程(应在 node-0001 上看到 4 个,node-0002/node-0003 各看到 2 个) jps | grep -E "(NameNode|DataNode|ResourceManager|NodeManager|JobHistoryServer)"预期输出(node-0001):
12345 NameNode 12346 ResourceManager 12347 JobHistoryServer预期输出(node-0002):
9876 DataNode 9877 NodeManager5.2 WebUI 访问与日志定位:50070 与 8088 端口背后的诊断逻辑
HDFS WebUI(50070 端口):浏览器访问
http://124.70.110.126:50070,重点看:- “Live Nodes” 数量是否为 2(node-0002/node-0003);
- “Configured Capacity” 是否显示非零值(如
19.5 GB),证明 DataNode 已注册成功; - 若显示 “0 Live Nodes”,说明
slaves文件错误或 DataNode 启动失败,立刻查logs/hadoop-root-datanode-*.log。
YARN WebUI(8088 端口):访问
http://124.70.110.126:8088,重点看:- “Nodes” 标签页下,Active Nodes 是否为 2;
- “Applications” 标签页是否为空(刚启动时应无应用);
- 若 Active Nodes 为 0,说明 NodeManager 未启动或心跳失败,查
logs/yarn-root-nodemanager-*.log中Registered with ResourceManager字样。
5.3 OBS 数据交互验证:wordcount 实战与三步故障隔离法
执行经典词频统计,验证 OBS 读写与 MR 计算闭环:
# 1. 在 OBS 创建 input 目录并上传测试文件(本地终端) echo -e "hello world\nhello hadoop\nworld hadoop" > /tmp/input.txt # 上传到 OBS(需安装 obsutil,或用控制台上传) obsutil cp /tmp/input.txt obs://hadoop-cluster-data/input/ # 2. 提交 MapReduce 作业(node-0001 执行) cd /home/modules/hadoop-2.8.3 hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.3.jar \ wordcount obs://hadoop-cluster-data/input obs://hadoop-cluster-data/output # 3. 查看输出(作业成功后执行) hdfs dfs -cat obs://hadoop-cluster-data/output/part-r-00000 # 预期输出: # hadoop 2 # hello 2 # world 2当 wordcount 卡住或失败时,按此三步隔离故障:
- 隔离网络层:
curl -I http://obs.cn-north-4.myhuaweicloud.com看是否返回HTTP/1.1 403 Forbidden(证明 OBS endpoint 可达,403 是正常鉴权响应); - 隔离认证层:
hadoop fs -ls obs://hadoop-cluster-data/,若报AccessDeniedException,说明 AK/SK 错误或 OBS 桶权限未设为“私有”; - 隔离计算层:
yarn application -list查看 application 状态,若为ACCEPTED但长期不变成RUNNING,说明 NodeManager 资源不足,检查yarn.nodemanager.resource.memory-mb是否小于 2048(默认 8192,足够)。
6. 答辩与验收:如何用 3 张图、2 个命令、1 份日志说服导师你真的跑通了
答辩不是复述操作步骤,而是展示你对系统状态的理解深度。我带过的某高校课程设计答辩中,90% 的学生卡在“说不清为什么jps看不到某个进程”,而拿高分的关键,是能用可视化证据链回答“这个集群现在到底健康吗”。以下是我在现场用过的三板斧:
6.1 三张核心截图:构成不可辩驳的状态证据链
第一张:HDFS WebUI 截图(50070 端口)
- 圈出 “Live Nodes: 2” 和 “Configured Capacity: 19.5 GB”;
- 圈出 “NameNode UI” 下的 “Cluster ID” 和 “Block Pool ID”,并说明:“这两个 ID 是 NameNode 格式化的指纹,每次
-format都会变,证明我亲手执行过初始化,不是拷贝的镜像”。
第二张:YARN WebUI 截图(8088 端口)
- 圈出 “Active Nodes: 2” 和 “Available Memory: 4096 MB”;
- 展开一个已完成的 wordcount 作业,圈出 “Finished Applications” 数量(如
1),并指出:“Application ID 以application_开头,后面数字是时间戳,证明作业确实在本集群提交并完成”。
第三张:终端命令输出截图
hdfs dfs -ls obs://hadoop-cluster-data/output/—— 显示part-r-00000文件存在;hdfs dfs -cat obs://hadoop-cluster-data/output/part-r-00000—— 显示hadoop 2等三行结果;yarn logs -applicationId application_171xxxxxx_0001 | tail -20—— 显示INFO mapreduce.Job: Job job_171xxxxxx_0001 completed successfully。
提示:
yarn logs命令必须在作业完成后 10 分钟内执行,否则日志被自动清理。若超时,用mapred job -history <job-history-file>替代。
6.2 两个必答命令:暴露你对底层机制的掌握
导师大概率会问:“如果 DataNode 挂了,你怎么快速定位?”
我的标准回答(边说边敲):
# 第一反应:看进程 jps | grep DataNode # 若无输出,证明进程死了 # 第二反应:看日志(不翻千行,直击关键) tail -n 50 /home/modules/hadoop-2.8.3/logs/hadoop-root-datanode-node-0002.log | grep -E "(ERROR|FATAL|Exception)" # 第三反应:看磁盘(DataNode 死亡最常见原因是磁盘满) df -h /home/dn/datanode # 若 Use% 达 100%,立刻清理或扩容这个回答展示了三层排查能力:进程层 → 日志层 → 系统层,远超“重启试试”的水平。
另一个高频问题:“OBS 和 HDFS 的区别是什么?为什么这里用 OBS?”
我的回答(用对比表格呈现):
| 维度 | HDFS | OBS(本实验) |
|---|---|---|
| 架构 | 分布式文件系统(计算存储紧耦合) | 对象存储(计算存储分离,通过 SDK 访问) |
| 一致性 | 强一致性(写完即可见) | 最终一致性(写入后几秒内可见) |
| 适用场景 | 高频随机读写、低延迟分析 | 海量冷数据归档、备份、ETL 中间层 |
| 本实验价值 | 学习 Hadoop 原理和配置 | 理解云原生大数据架构,对接真实云服务 |
说完补一句:“所以这不是替代 HDFS,而是学习如何让 Hadoop 适配云环境——就像学开车,既要懂离合器原理,也要会倒车入库。”
6.3 一份日志分析技巧:从namenode.log里读懂集群生命周期
NameNode 日志(logs/hadoop-root-namenode-node-0001.log)是集群的“黑匣子”。我教学生只盯三行:
- 启动成功标志:
INFO org.apache.hadoop.hdfs.server.namenode.NameNode: STARTUP_MSG:后紧跟STARTUP_MSG: Starting NameNode; - 安全模式退出:
INFO org.apache.hadoop.hdfs.server.namenode.FSNamesystem: Leaving safe mode after 5 secs; - DataNode 注册:
INFO org.apache.hadoop.hdfs.server.blockmanagement.DatanodeManager: Registered Datanode后跟 node-0002/node-0003 的 IP。
如果日志里只有前两行,没有第三行,说明slaves文件或 SSH 互信失败;如果三行都有,但 WebUI 显示 0 Live Nodes,则是dfs.datanode.data.dir路径权限问题。
从那以后我每次帮学生调集群,都强制走一遍这三行日志扫描——它比jps多告诉你 10 倍信息。希望帮到你。
本文还有配套的精品资源,点击获取