Hadoop 3.3.5 分布式集群部署
·
环境准备与规划
- 硬件要求:3台节点(1主2从)
- 软件依赖:JDK 8+、SSH免密登录
- 目录规范:统一安装路径(如/opt/module),用户权限管理
Hadoop安装与核心配置
一定要检查一下,ssh 能不能直接免密登录到自己和其它机子!!!以及三台机子的用户名是否相同!!!
解压与环境变量配置
在 /opt/module 目录下执行解压操作:
# 解压
sudo tar -zxvf hadoop-3.3.5.tar.gz
# 修改所属用户(确保你对该目录有读写权限,ljy是用户名)
sudo chown -R ljy:ljy hadoop-3.3.5
# 建立软链接(可选,方便以后升级)
ln -s hadoop-3.3.5 hadoop
编辑环境变量文件 ~/.bashrc:
gedit ~/.bashrc
export HADOOP_HOME=/opt/module/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source ~/.bashrc
执行 source ~/.bashrc 使配置生效。
核心配置文件修改
所有配置文件位于 $HADOOP_HOME/etc/hadoop/ 目录。依次编辑以下 5个文件
core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://ljy:8020</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop/data</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.http-address</name>
<value>ljy:9870</value>
</property>
</configuration>

yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>ljy</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>

mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>

workers文件配置
ljy
ljy1
ljy2

分发Hadoop到集群节点
从主节点 ljy 分发到其他节点:
scp -r /opt/module/hadoop-3.3.5 ljy1@ljy1:/opt/module/
scp -r /opt/module/hadoop-3.3.5 ljy2@ljy2:/opt/module/

在其他节点创建软链接并同步 ~/.bashrc 中的环境变量:
ln -s /opt/module/hadoop-3.3.5 /opt/module/hadoop
集群启动与验证
初始化HDFS(仅在 ljy执行一次):
hdfs namenode -format

启动集群服务:
start-dfs.sh
start-yarn.sh

出现问题(见下面的解决办法)
验证集群状态:
- 命令行执行
jps检查进程 - 访问Web界面:
- HDFS:
http://ljy:9870 
- YARN:
http://ljy:8088 
- HDFS:
出现的问题:
(1)SSH 免密登录的原理是:把 A 的公钥(id_rsa.pub)存放到 B 的信任名单(authorized_keys)里。 我现在的情况是 ljy 的名单里已经有了 ljy1 和 ljy2,但唯独没把自己放进去(配置了ljy免密登录ljy1和ljy2但没有免密登录到自己)
解决办法:
#直接在 ljy 上执行(自动把本地的公钥追加到自己的 ~/.ssh/authorized_keys 文件中)
ssh-copy-id ljy
#验证
ssh ljy

进入后记得执行 exit 退出,回到正常的 shell 界面
解决后的操作流
1,停止所有已启动的进程
2,清理三台机器的残留数据(重要! 否则容易报 ClusterID 不匹配的错误): 因为你之前格式化可能失败或启动异常,建议删掉数据目录
3,重新初始化并启动(仅在ljy上执行)
stop-all.sh
# 在 ljy, ljy1, ljy2 上都执行:
rm -rf /opt/module/hadoop/data
# 仅在 ljy 执行
hdfs namenode -format
start-dfs.sh
start-yarn.sh
(2)上面的问题解决了,新问题出现了:(SSH 用户名不一致)
最快的修法:在主节点给 ssh 配“主机名 → 远程用户名”的映射
在 ljy 上编辑 ssh 配置


mkdir -p ~/.ssh
chmod 700 ~/.ssh
gedit ~/.ssh/config
chmod 600 ~/.ssh/config
测试是否真的修好了
在 ljy 上执行:
ssh ljy1 "whoami && hostname"
ssh ljy2 "whoami && hostname"

重新启动 Hadoop:先停,再起,避免状态混乱。
在 ljy 上执行:
stop-yarn.sh
stop-dfs.sh
#重启
start-dfs.sh
start-yarn.sh
再检查三台机器的进程



这里终于成功啦~
更多推荐

所有评论(0)