ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Day 25-Hadoop 3.3.6 从本地模式到完全分布式部署实战(上)

Day 25-Hadoop 3.3.6 从本地模式到完全分布式部署实战(上) 目录Hadoop 3.3.6 从本地模式到完全分布式部署踩坑全复盘一、基础环境准备与本地模式搭建1.1 创建用户与安装包解压1.2 配置 JDK 环境变量1.3 Hadoop 基础配置1.4 本地模式运行 WordCount二、伪分布式 HDFS 部署2.1 核心配置文件修改2.2 SSH 免密登录配置2.3 格式化 NameNode 与启动集群2.4 WebUI 与 HDFS 操作验证三、完全分布式集群搭建3.1 前置准备3.2 NFS 共享目录配置服务端server1配置客户端server2、server3配置3.3 完全分布式配置修改3.4 启动集群与踩坑排查3.5 YARN 资源调度配置实操踩坑总结Hadoop 3.3.6 从本地模式到完全分布式部署踩坑全复盘这次从零开始搭建 Hadoop 3.3.6 集群从单机本地模式一路踩坑到完全分布式中间栽了好几个看似低级但特别影响进度的问题——文件名输错、免密漏配、NFS 挂载异常导致节点起不来。把完整部署流程和踩坑排查思路都整理出来帮大家避开同款弯路。一、基础环境准备与本地模式搭建1.1 创建用户与安装包解压首先创建专用的 hadoop 用户把 JDK 和 Hadoop 安装包统一放到用户家目录后续所有操作都用 hadoop 用户执行避免权限混乱。# root 用户下创建 hadoop 用户 useradd hadoop # 把安装包移动到 hadoop 家目录 mv hadoop-3.3.6.tar.gz jdk-8u181-linux-x64.tar.gz /home/hadoop # 切换到 hadoop 用户 su - hadoop解压安装包的时候踩了第一个低级坑JDK 文件名输错了两次一直报No such file or directory一开始还以为安装包没传成功回头ls核对才发现是文件名拼写不对。建议大家解压前先确认文件名善用 Tab 键自动补全。# 解压 Hadoop tar -zxf hadoop-3.3.6.tar.gz # 解压 JDK注意核对文件名 tar -zxf jdk-8u181-linux-x64.tar.gz解压完成后给两个目录创建软链接后续升级版本不用改一堆配置路径。ln -s hadoop-3.3.6 hadoop ln -s jdk1.8.0_181 jdk1.2 配置 JDK 环境变量编辑 hadoop 用户的.bash_profile把 JDK 的 bin 目录加入系统 PATHvim ~/.bash_profile配置内容PATH$PATH:$HOME/.local/bin:$HOME/bin:/home/hadoop/jdk/bin export PATH配置完成后source ~/.bash_profile生效执行java -version能输出版本就说明 JDK 环境正常。1.3 Hadoop 基础配置进入 Hadoop 配置目录先看一下所有默认配置文件心里有个数。cd /home/hadoop/hadoop/etc/hadoop ls第一步先修改hadoop-env.sh显式指定JAVA_HOME路径。这步是必做的否则 Hadoop 启动时会找不到 Java 环境。vim hadoop-env.sh添加配置export JAVA_HOME/home/hadoop/jdk配置完成后回到 Hadoop 根目录执行命令验证基础环境cd /home/hadoop/hadoop ./bin/hadoop能正常输出命令帮助信息就说明 Hadoop 基础环境已经通了。1.4 本地模式运行 WordCount本地模式是 Hadoop 的最简模式不启动任何守护进程直接在本地跑 MapReduce 任务适合快速验证环境。先创建输入目录把配置文件里的 xml 文件拷进去当测试数据mkdir input cp etc/hadoop/*.xml input这里又踩了个小坑直接输hadoop命令报command not found才想起来只配了 JDK 的 PATH没把 Hadoop 的 bin 目录加进去。临时用相对路径执行后面再统一补环境变量。# 错误示范直接输 hadoop 找不到命令 hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount input output # 正确写法用相对路径执行 ./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount input output任务跑完后查看输出目录生成了结果文件和成功标记文件说明本地模式运行正常。ls output/二、伪分布式 HDFS 部署本地模式只能处理本地文件接下来搭建伪分布式单节点同时运行 NameNode、DataNode、SecondaryNameNode 三个进程模拟完整的 HDFS 环境。2.1 核心配置文件修改修改core-site.xml指定 HDFS 的默认访问地址和端口vim core-site.xmlconfiguration property namefs.defaultFS/name valuehdfs://localhost:9000/value /property /configuration修改hdfs-site.xml因为只有一个节点把副本数设为 1vim hdfs-site.xmlconfiguration property namedfs.replication/name value1/value /property /configurationworkers文件默认是localhost伪分布式不用改。2.2 SSH 免密登录配置启动 HDFS 集群需要通过 SSH 远程拉起各节点进程哪怕是本机也需要免密登录。先给 hadoop 用户设置密码方便后续传公钥。# root 用户下执行 passwd hadoop切换回 hadoop 用户生成 SSH 密钥对全程回车默认即可ssh-keygen把公钥写入本机的授权密钥文件验证免密登录ssh-copy-id localhost # 验证免密不需要输密码就是成功 ssh localhost2.3 格式化 NameNode 与启动集群重点提醒NameNode 格式化只能执行一次反复格式化会导致集群 ID 不一致DataNode 无法注册。cd /home/hadoop/hadoop bin/hdfs namenode -format格式化成功后启动 HDFS 集群sbin/start-dfs.sh启动完成后用jps查看进程能看到 NameNode、DataNode、SecondaryNameNode 三个进程就说明伪分布式启动成功。2.4 WebUI 与 HDFS 操作验证浏览器访问http://192.168.48.186:9870打开 HDFS Web 管理界面可以看到集群概览、总容量、节点数等信息。在 HDFS 上创建用户目录上传测试文件跑一遍分布式 WordCount验证读写功能正常# 创建目录 bin/hdfs dfs -mkdir /user bin/hdfs dfs -mkdir /user/hadoop bin/hdfs dfs -mkdir input # 上传文件 bin/hdfs dfs -put etc/hadoop/*.xml input # 查看文件 bin/hdfs dfs -ls input运行 MapReduce 任务查看输出结果bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount input output bin/hdfs dfs -cat output/*三、完全分布式集群搭建伪分布式只是练手生产环境都是多节点完全分布式。这次一共规划 4 台节点server1NameNode SecondaryNameNodeserver2、server3DataNode采用 NFS 共享/home/hadoop目录配置和安装包只改一份所有节点自动同步省去挨个 scp 的麻烦。3.1 前置准备先停掉伪分布式集群清理临时数据避免和新集群冲突。sbin/stop-dfs.sh rm -rf /tmp/hadoop-hadoop所有节点统一配置 hosts 主机名解析保证节点之间可以通过主机名互通。192.168.48.186 server1 192.168.48.187 server2 192.168.48.188 server3 192.168.48.189 server43.2 NFS 共享目录配置服务端server1配置server1 作为 NFS 服务端安装 NFS 工具包yum install -y nfs-utils编辑/etc/exports文件配置共享目录指定匿名用户的 UID/GID 和 hadoop 用户一致避免权限问题。/home/hadoop *(rw,sync,anonuid1000,anongid1000)启动 NFS 服务并设置开机自启systemctl enable --now nfs客户端server2、server3配置两台 DataNode 节点同样安装 NFS 工具包yum install -y nfs-utils先查看服务端的共享目录是否可访问showmount -e server1把共享目录挂载到本地/home/hadoop路径mount 192.168.48.186:/home/hadoop /home/hadoop/挂载完成后用df -h确认挂载成功。关键检查挂载后一定要验证目录权限和用户 UID确保 hadoop 用户能正常读写否则后面启动进程会出现各种玄学权限报错。ls -ld /home/hadoop id hadoop3.3 完全分布式配置修改因为用了 NFS 共享目录只需要在 server1 上修改配置所有节点自动同步。cd /home/hadoop/hadoop/etc/hadoop修改core-site.xml把默认文件系统地址改成 server1 的实际 IPconfiguration property namefs.defaultFS/name valuehdfs://192.168.48.186:9000/value /property /configuration修改hdfs-site.xml副本数调整为 2对应两台 DataNodeconfiguration property namedfs.replication/name value2/value /property /configuration修改workers文件删掉 localhost加入两台 DataNode 的主机名server2 server33.4 启动集群与踩坑排查配置完成后启动集群server1 上的 NameNode 和 SecondaryNameNode 正常启动sbin/start-dfs.sh jpsserver2 的 DataNode 进程也正常但 server3 接连出了两个问题卡了好一会儿也是新手搭集群的高频踩坑点。第一个报错Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password)排查思路很明显是 SSH 免密没配置。之前只配了 localhost 的免密没给 server3 传公钥NameNode 远程拉起进程的时候连不上。解决方法ssh-copy-id server3免密通了之后再启动又报第二个错bash: /home/hadoop/hadoop-3.3.6/bin/hdfs: No such file or directory排查思路一开始以为配置错了登到 server3 上一看NFS 共享目录压根没挂上之前配置的时候只给 server2 做了挂载漏了 server3导致目录是空的。解决方法给 server3 重新挂载 NFS 共享目录确认文件都能正常访问后再启动集群。两个坑都踩完之后两台 DataNode 全部正常上线。WebUI 里可以看到存活节点数为 2总容量翻倍块副本数正常。3.5 YARN 资源调度配置光有 HDFS 还不够跑 MapReduce 需要 YARN 资源调度框架。修改两个配置文件修改mapred-site.xml指定 MapReduce 运行在 YARN 上并配置类路径configuration property namemapreduce.framework.name/name valueyarn/value /property property namemapreduce.application.classpath/name value$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*/value /property /configuration修改yarn-site.xml配置 Shuffle 服务和环境变量白名单configuration property nameyarn.nodemanager.aux-services/name valuemapreduce_shuffle/value /property property nameyarn.nodemanager.env-whitelist/name valueJAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME,PATH,LANG,TZ,HADOOP_MAPRED_HOME/value /property /configuration如果想让 server1 也参与计算可以自己挂载 NFS 共享手动启动 DataNode 和 NodeManager 进程mount server1:/home/hadoop /home/hadoop bin/hdfs --daemon start datanode bin/yarn --daemon start nodemanager jps实操踩坑总结这次从单机到分布式一路踩过来总结几个新手最高频的坑大家搭的时候可以提前避开文件名拼写错误解压安装包时输错文件名是最低级但最容易犯的错解压前先ls确认多用 Tab 补全。环境变量漏配直接执行hadoop命令找不到要么把 Hadoop 的 bin 目录加入 PATH要么写全路径别上来就怀疑安装包坏了。NameNode 重复格式化格式化只能执行一次出问题要先清空/tmp下的 hadoop 临时目录再重新格式化否则集群 ID 不一致会导致 DataNode 无法注册。免密登录遗漏完全分布式下 NameNode 要能免密登录所有 DataNode每台节点都要传公钥不能漏。NFS 挂载与 UID 一致性共享目录必须确认挂载成功且各节点 hadoop 用户的 UID/GID 要保持一致否则会出现各种隐蔽的权限问题。配置文件路径所有配置都在etc/hadoop目录下别找错目录改了半天不生效。整体来看 Hadoop 的部署逻辑并不复杂麻烦的都是各种细节配置和权限问题。第一次搭不用追求一次成功踩坑排查的过程反而能把原理理解得更透彻。
返回列表