资讯动态

华为云ECS+Hadoop集群搭建实战:版本、网络与避坑指南

发布时间:2026/10/27 10:43:58 来源:尧图企业网站定制
简介这份华为云大数据实验报告面向高校大数据、云计算相关课程的学习者与实验备考学生围绕在华为云上部署和管理大数据平台的关键技术展开帮助读者打通从云主机到云服务、再到一站式大数据方案的实践路径。压缩包内共1个docx文档约4.36MB以图文实验记录形式呈现便于按实验章节对照操作与复盘。内容覆盖实验一云主机实现大数据中的ECS与OBS配置、Hadoop集群搭建与节点通信实验二云服务实现大数据综合实验一BigData Pro的环境准备、Hadoop与Spark集群搭建及OBS互联测试以及综合实验四基于Spark SQL等工具的大数据交互式查询。目录结构按实验分节步骤与命令记录较完整适合作为课程实验参考、云平台实操练习与排错思路查阅。目前已有2490人学习下载对需要系统完成华为云大数据实验的读者具有较高参考价值。1. 四台 ECS 装 Hadoop先把版本和网络定死再谈集群华为云大数据实验这套环境我前后装过三遍翻车全翻在“以为装好了”上。第一次是 OpenJDK 版本随手yum install java-1.8.0-openjdk结果 Hadoop 跑起来JAVA_HOME指向 JREstart-dfs.sh直接报找不到java第二次是四台 ECS 的内网 IP 抄错一位ssh node2卡在密码输入集群起不来还查了半天防火墙。这套环境说白了就是四台弹性云服务器 ECS 加一个对象存储 OBS装 Hadoop 和 Spark做 wordcount 和交互式查询。适合正在做大数据实验、被节点互信和 OBS 互联卡住的开发者。下面按我实际装机的顺序走版本、参数、报错处理都写清楚照着能跑通。2. 装前定版ECS、OBS 与 OpenJDK 的版本取舍2.1 四台 ECS 的规格与内网规划这套实验的底座是四台 ECS节点命名 node1 到 node4其中 node1 兼作主节点。规格上不用追求高配Hadoop 伪分布加 Spark 本地模式2 核 4G 足够跑通 wordcount4 核 8G 更稳磁盘 40G 系统盘加一块数据盘就够。操作系统我一般选 EulerOS 或 CentOS 7.9 这类 Hadoop 生态兼容性好的镜像Ubuntu 也能装但后面hosts和防火墙命令要换一套新手容易混。关键在内网规划。四台机器必须落在同一个 VPC、同一个子网安全组放行全部内网端口或者至少 22、9000、8020、8088、7077、4040。原文里给的内网地址是 192.168.0.10、192.168.0.53、192.168.0.169、192.168.0.77对应 ecs-ca89-0001 到 0004。这个网段是实验环境示例你实际买完 ECS 后在控制台“弹性云服务器”列表里逐台抄内网 IP别凭记忆填。我习惯先做一张对照表装的时候对着改节点主机名内网 IP示例角色node1ecs-ca89-0001192.168.0.10NameNode / ResourceManagernode2ecs-ca89-0002192.168.0.53DataNode / NodeManagernode3ecs-ca89-0003192.168.0.169DataNode / NodeManagernode4ecs-ca89-0004192.168.0.77DataNode / NodeManager这张表后面写/etc/hosts、配 SSH 互信、改 Hadoop 的workers文件都要用先定死再动手能省掉一半返工。2.2 OBS 桶与访问密钥的准备OBS 这块原文用的是obs.cn-north-4.myhuaweicloud.com这个 Endpoint桶建在华北-北京四。买 OBS 时选“对象存储服务 OBS”创建桶桶名全局唯一区域和 ECS 保持一致否则跨区访问延迟高还可能不通。如果实验要求并行文件系统就在 OBS 里创建并行文件系统拿到挂载点。访问密钥在“我的凭证”里创建下载下来的credentials.csv里就是User Name,Access Key Id,Secret Access Key三列。原文示例里 AK 是S8RSFKYBTOSPA9YX92XB这种格式SK 是一长串。这里有个血泪经验AK/SK 只在下发时能看全页面关掉就找不回 SK只能重新建一对。我一般下载后立刻存到本地密码库别只留在 ECS 上。提示AK/SK 属于敏感凭据不要写进公开的脚本或提交到代码仓库实验环境用完及时在控制台禁用。2.3 OpenJDK 版本别让 JAVA_HOME 指向 JREHadoop 3.x 官方要求 Java 8 或 Java 11这套实验用 OpenJDK 8 最稳。坑在于很多镜像预装的java-1.8.0-openjdk只是 JREJAVA_HOME指过去之后hadoop脚本找不到javac和tools.jar。正确做法是装java-1.8.0-openjdk-devel它才带完整 JDK。# 四台节点都执行装带 devel 的完整 JDK yum install -y java-1.8.0-openjdk-devel # 确认 java 和 javac 都在 which java javac java -versiondevel包提供javac和lib/tools.jarHadoop 编译和部分组件依赖它。装完java -version应显示1.8.0_xxx。如果系统里已有多个 Java用alternatives --config java切到 devel 那套再在/etc/profile里写死JAVA_HOME别依赖默认路径。3. 四节点基础配置hosts、防火墙与 SSH 互信3.1 改主机名并写 /etc/hosts四台机器默认主机名是ecs-ca89-0001这种Hadoop 配置里用 node1 到 node4 更直观。每台执行hostnamectl set-hostname node1对应节点改数字然后统一写/etc/hosts。原文里 node1 到 node4 分别执行vim /etc/hosts内容就是那四行内网 IP 加主机名。# 四台节点 /etc/hosts 内容一致IP 换成你控制台里的真实内网 IP cat /etc/hosts EOF 192.168.0.10 node1 192.168.0.53 node2 192.168.0.169 node3 192.168.0.77 node4 EOF/etc/hosts是节点间用主机名通信的本地解析表Hadoop 的core-site.xml里写hdfs://node1:8020就靠它解析。四台必须完全一致少一行就会出现某台能 ping 通 IP、却解析不了主机名的情况。改完ping node2验证一下能通再往下走。3.2 关闭防火墙与 SELinux原文明确写了“关闭防火墙”这是实验环境的常规做法因为 Hadoop 各组件端口多逐个放行容易漏。生产环境当然要按端口开但实验阶段先关掉排除干扰。# 关闭 firewalld 并禁止开机自启 systemctl stop firewalld systemctl disable firewalld # 临时关闭 SELinux避免权限拦截 setenforce 0 sed -i s/^SELINUXenforcing/SELINUXdisabled/ /etc/selinux/configsystemctl stop只关当前disable才管开机setenforce 0是临时生效改配置文件才是永久。四台都要执行。关完用systemctl status firewalld确认是inactive否则后面 DataNode 注册不上日志里全是连接超时。3.3 SSH 无密码互信authorized_keys 的拼法节点互信是这套实验最容易卡住的一步。原文的做法是每台生成密钥把各自的id_rsa.pub汇总到一个文本里再分发到四台的authorized_keys。逻辑是node1 要能免密 ssh 到 node2、node3、node4反过来也要能所以每台的authorized_keys里都得有全部四台的公钥。# 四台分别执行一路回车不设 passphrase ssh-keygen -t rsa -b 2048 -N -f /root/.ssh/id_rsa # 每台查看自己的公钥复制出来汇总 cat /root/.ssh/id_rsa.pub把四台的公钥按顺序拼进一个文件原文就是四段ssh-rsa AAAA...连在一起然后分发# 在 node1 上把汇总好的公钥文件推到四台 for h in node1 node2 node3 node4; do ssh $h mkdir -p /root/.ssh chmod 700 /root/.ssh scp /root/all_keys.pub $h:/root/.ssh/authorized_keys ssh $h chmod 600 /root/.ssh/authorized_keys donechmod 700给.ssh目录、chmod 600给authorized_keys权限不对 SSH 会直接拒绝。分发完在 node1 上ssh node2第一次问yes/no输 yes之后应该直接进。四台两两验证一遍原文里“node1 无密码跳转到 node2”那张图就是这个验证点。如果还要输密码检查authorized_keys里是不是漏了某台的公钥或者/root/.ssh权限被改宽了。4. Hadoop 与 Spark 安装从下载到集群启动4.1 下载解压与环境变量原文是在 node1 上在线下载安装包。Hadoop 选 3.3.x 这类稳定版Spark 选 3.3.x 或 3.4.x和 Hadoop 版本对齐。下载后解压到/opt四台都要有可以先在 node1 装好再scp分发。# node1 上操作版本号按你下载的实际包替换 cd /opt wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz tar -zxvf hadoop-3.3.6.tar.gz mv hadoop-3.3.6 hadoop # 配环境变量 cat /etc/profile EOF export JAVA_HOME/usr/lib/jvm/java-1.8.0-openjdk export HADOOP_HOME/opt/hadoop export PATH$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin EOF source /etc/profileJAVA_HOME的路径用readlink -f $(which java)反推去掉末尾/bin/java就是。HADOOP_HOME指向解压目录PATH里加bin和sbin后面hdfs、start-dfs.sh才能直接敲。装完hadoop version能打印版本号说明环境变量生效。4.2 core-site.xml 与 hdfs-site.xml 的关键参数Hadoop 配置在$HADOOP_HOME/etc/hadoop/下。core-site.xml定 NameNode 地址和临时目录hdfs-site.xml定副本数和数据目录。原文没展开参数这里按实验场景给一套能跑的。!-- core-site.xml -- configuration property namefs.defaultFS/name valuehdfs://node1:8020/value /property property namehadoop.tmp.dir/name value/opt/hadoop/tmp/value /property /configurationfs.defaultFS写node1:80208020 是 NameNode RPC 端口靠/etc/hosts解析。hadoop.tmp.dir是运行时临时目录默认在/tmp下机器重启可能被清指到/opt/hadoop/tmp更稳记得mkdir -p建好。!-- hdfs-site.xml -- configuration property namedfs.replication/name value3/value /property property namedfs.namenode.name.dir/name value/opt/hadoop/data/name/value /property property namedfs.datanode.data.dir/name value/opt/hadoop/data/data/value /property /configurationdfs.replication设 3四台里三台存副本符合实验预期只有两台 DataNode 时设 3 会一直报副本不足按实际节点数调。两个dir指向数据盘提前建目录。配置改完四台保持一致用scp分发整个etc/hadoop目录最省事。4.3 workers 文件与格式化启动workers文件老版本叫slaves列出 DataNode 主机名start-dfs.sh会按它逐台拉起。# $HADOOP_HOME/etc/hadoop/workers node2 node3 node4node1 作主节点不列进去。然后格式化 NameNode只执行一次hdfs namenode -format格式化会清空dfs.namenode.name.dir重复格式化会导致 clusterID 不一致DataNode 起不来。格式化完start-dfs.sh和start-yarn.shjps在 node1 应看到NameNode、ResourceManagernode2 到 node4 看到DataNode、NodeManager。少进程就去看$HADOOP_HOME/logs下对应日志八成是JAVA_HOME或 hosts 的问题。4.4 Spark 集群与 OBS 互联Spark 装法类似解压后配spark-env.sh指定JAVA_HOME和HADOOP_CONF_DIR让 Spark 复用 Hadoop 的配置。原文综合实验一里“测试与 OBS 互联”是关键一步Hadoop 要读写 OBS 需要hadoop-huaweicloud插件把 jar 放进$HADOOP_HOME/share/hadoop/common/lib/再在core-site.xml里加 OBS 的 AK/SK 和 Endpoint 配置。!-- core-site.xml 追加 OBS 访问配置AK/SK 换成你自己的 -- property namefs.obs.access.key/name value你的AK/value /property property namefs.obs.secret.key/name value你的SK/value /property property namefs.obs.endpoint/name valueobs.cn-north-4.myhuaweicloud.com/value /propertyEndpoint 和桶所在区域一致AK/SK 用credentials.csv里那对。配完用hdfs dfs -ls obs://你的桶名/测试能列出目录说明互联通了。这一步失败常见原因是插件 jar 没放对目录或者 Endpoint 写成了双栈地址但网络不通。5. 避坑排查这套环境里最容易翻车的五处5.1 ssh node2 仍要输密码现象公钥都拼了ssh node2还是提示password。原因多半是authorized_keys里漏了当前发起节点的公钥或者/root/.ssh权限被scp改成了 644。解决ls -la /root/.ssh看权限目录 700、文件 600不对就chmod改回来再grep一下authorized_keys里有没有发起节点的公钥指纹。5.2 DataNode 启动即退出现象jps里只有 NameNodeDataNode 一闪就没。原因通常是重复hdfs namenode -format导致 clusterID 不一致或者dfs.datanode.data.dir目录不存在。解决看 DataNode 日志里Incompatible clusterIDs字样把data/data下current目录清掉重新启动目录不存在就mkdir -p补上。5.3 wordcount 报找不到输入路径现象hadoop jar ... wordcount /input /output报Input path does not exist。原因是 HDFS 上还没建/input或者本地文件没先put上去。解决hdfs dfs -mkdir -p /inputhdfs dfs -put 本地文件 /input/再跑 wordcount。输出目录/output必须不存在存在就先hdfs dfs -rm -r /output。5.4 OBS 互联报 403 或连接超时现象hdfs dfs -ls obs://桶名/返回 403 或超时。原因一是 AK/SK 填错或已禁用二是 Endpoint 区域和桶不一致三是插件 jar 没加载。解决核对credentials.csv里的 AK/SK确认桶的区域和 Endpoint 匹配ls $HADOOP_HOME/share/hadoop/common/lib/ | grep huaweicloud确认插件在。5.5 Spark 提交任务找不到 Hadoop 类现象spark-submit报ClassNotFoundException或找不到 HDFS 路径。原因是spark-env.sh里没设HADOOP_CONF_DIRSpark 读不到core-site.xml。解决在spark-env.sh加export HADOOP_CONF_DIR$HADOOP_HOME/etc/hadoop重启 Spark 集群再提交。6. 装完怎么验证三条命令确认集群真的跑通装完别急着交报告先按下面三步验证任何一步不过都说明环境还有问题。第一步看进程四台分别jpsnode1 有NameNode、ResourceManager、SecondaryNameNodenode2 到 node4 有DataNode、NodeManager缺哪个就去翻对应日志。第二步看 HDFS 健康状态hdfs dfsadmin -report输出里Live datanodes应该是 3每台的Name是 node2 到 node4 的主机名DFS Used有数值。如果Live datanodes是 0回到 5.2 查 DataNode。第三步跑 wordcount 端到端验证# 造一个输入文件传上去 echo hello huawei cloud big data hello hadoop /tmp/test.txt hdfs dfs -mkdir -p /input hdfs dfs -put /tmp/test.txt /input/ hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount /input /output hdfs dfs -cat /output/part-r-00000能打印出hello 2、hadoop 1这类计数说明 HDFS 读写、MapReduce 调度、节点通信全通了。再补一条 OBS 验证hdfs dfs -ls obs://桶名/能列目录就算互联成功。Spark 那边用spark-shell起一个交互环境sc.textFile(hdfs://node1:8020/input/test.txt).count()返回行数Spark 集群也算跑通。我踩过最冤的一次是 wordcount 跑完没看输出直接截图交报告结果/output是上一次的旧结果被追问才发现新任务其实失败了。从那以后我每次验证都强制走一遍“删输出目录、重跑、cat 结果”的流程不看旧文件。这套环境装一次能管整个实验周期版本和 IP 定死、互信和 OBS 配好后面 Spark 和交互式查询都是在这个底座上加东西。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑