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 ~/.bashrcexport HADOOP_HOME=/opt/module/hadoop export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbinsource ~/.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再检查三台机器的进程
这里终于成功啦~
