/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */
#content_views .toc,
/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */
#content_views.markdown_views > p:empty:has(+ .toc),
#content_views.markdown_views > .toc + p:empty,
/* 富文本旧版目录标记 */
#content_views.htmledit_views #main-toc,
#content_views.htmledit_views #hr-toc,
#content_views.htmledit_views p[id*=\”-toc\”] {
display: none !important;
}
/* 目录去掉后,紧跟的首个标题不再多出一块上边距 */
#content_views.markdown_views > .toc + h1,
#content_views.markdown_views > .toc + h2,
#content_views.markdown_views > .toc + h3,
#content_views.markdown_views > .toc + h4,
#content_views.markdown_views > .toc + p:empty + h1,
#content_views.markdown_views > .toc + p:empty + h2,
#content_views.markdown_views > .toc + p:empty + h3,
#content_views.markdown_views > .toc + p:empty + h4 {
margin-top: 0 !important;
}
3 台机器,全部 Anolis7.9,当前这台是 master;另外两台 node1、node2 用户:xiaohuozi,后面新建hadoop专门跑大数据,所有节点全部执行【前置环境】
集群规划
表格
|
节点 |
主机名 |
IP |
角色 |
|
master |
master |
192.168.3.57 |
NameNode、ResourceManager、SecondaryNameNode |
|
node1 |
node1 |
192.168.3.58 |
DataNode、NodeManager |
|
node2 |
node2 |
192.168.3.59 |
DataNode、NodeManager |
把下面 IP 替换成你三台虚拟机真实 IP!
一、所有 3 台机器统一执行(前置环境)
1. 修改主机名
# master节点执行
sudo hostnamectl set-hostname master
# node1节点
sudo hostnamectl set-hostname node1
# node2节点
sudo hostnamectl set-hostname node2
改完重新登录终端,主机名才刷新。
2. 配置 hosts 文件(三台内容一模一样)
sudo vim /etc/hosts
写入,IP 换成你自己三台的 IP:
192.168.3.57 master
192.168.3.58 node1
192.168.3.59 node2
保存,测试ping master、ping node1能通.

3.所有节点创建 hadoop 运行用户
# 设置密码,三台设置同一个密码,方便操作
useradd hadoop
passwd hadoop
vim /etc/sudoers 给Hadoop用户增加sudo权限。

4. 关闭防火墙、SELinux(全部节点,如不关闭需要配置防火墙策略)
# 防火墙(如关闭命令不对请注意版本的区别)
sudo systemctl stop firewalld
sudo systemctl disable firewalld
# SELinux
sudo setenforce 0
sudo sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config
# 关闭swap
sudo swapoff -a
sudo sed -i '/swap/s/^/#/' /etc/fstab
5. 所有节点安装 JDK8(最好不要使用系统自带的JDK,后续运行jps会出问题,已踩坑)
sudo yum install java-1.8.0-openjdk-devel -y
readlink -f /usr/bin/java
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.an7.x86_64/jre/bin/java
#在/etc/profile下配置JAVA_HOME设置全局变量(如担心影响全局可忽略此处)
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.an7.x86_64
export PATH=$JAVA_HOME/bin:$PATH
#HADOOP
export HADOOP_HOME=/home/hadoop/hadoop-3.3.6
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

source /etc/profile
java -version
echo $JAVA_HOME
#配置单独的用户环境,如下。切换 hadoop 用户配置 JAVA_HOME
su – hadoop
vim ~/.bashrc
# 在末尾添加
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.an7.x86_64/jre/
export PATH=$JAVA_HOME/bin:$PATH

source ~/.bashrc
java -version
echo $JAVA_HOME
二、仅 master 节点操作:配置 ssh 免密登录(hadoop 用户下)
su – hadoop
ssh-keygen -t rsa
# 一路回车,不要设置密码
# 分发公钥到三台
ssh-copy-id hadoop@master
ssh-copy-id hadoop@node1
ssh-copy-id hadoop@node2
#可能出现的问题
Permission denied:hadoop 用户密码输错,第一次分发 master 本机公钥时报的
Host key verification failed:之前 SSH 连过 node1/node2,旧主机指纹和现在不匹配,ssh 安全校验拦截,ssh-copy-id直接失败
解决步骤(hadoop 用户,master 节点操作)
第一步:清理旧主机指纹(解决 Host key verification failed)
# 清除三台旧记录
ssh-keygen -R master
ssh-keygen -R node1
ssh-keygen -R node2
第二步:手动 ssh 登录一次三台机器,缓存新指纹(必须做)
输入yes确认,然后输入正确的 hadoop 用户密码
ssh hadoop@master
ssh hadoop@node1
ssh hadoop@node2
登录成功后直接exit退出回来。
第三步:重新分发公钥
ssh-copy-id hadoop@master
ssh-copy-id hadoop@node1
ssh-copy-id hadoop@node2
⚠️ 这里一定要输入三台机器 hadoop 用户的正确密码,密码三台建议保持一致!
第四步:验证免密是否成功(不用输密码才算 ok)
ssh hadoop@master
ssh hadoop@node1
ssh hadoop@node2
任意一条如果不需要输入密码直接登录,代表免密成功。
✅ 测试:ssh hadoop@node1,不用输密码直接登录才算成功

三、master 节点:下载解压 Hadoop(hadoop 用户)
#新建一个app包用来存放安装包
mkdir /home/hadoop/app
cd /home/hadoop/app
# 阿里云镜像下载(太慢)
wget https://mirrors.aliyun.com/apache/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz
#这个快apache全球CDN
wget -c https://dlcdn.apache.org/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz
tar -zxvf hadoop-3.3.6.tar.gz -C /home/hadoop/
#配置 hadoop 用户的环境变量 vim ~/.bashrc,追加完整:
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.an7.x86_64/jre/
export HADOOP_HOME=/home/hadoop/hadoop-3.3.6
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

source ~/.bashrc
hadoop version
四、master 修改 Hadoop 配置文件 $HADOOP_HOME/etc/hadoop
1. hadoop-env.sh
vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh
末尾增加:
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.an7.x86_64
export HDFS_NAMENODE_USER="hadoop"
export HDFS_DATANODE_USER="hadoop"
export HDFS_SECONDARYNAMENODE_USER="hadoop"
export YARN_RESOURCEMANAGER_USER="hadoop"
export YARN_NODEMANAGER_USER="hadoop"

2. core-site.xml
vim $HADOOP_HOME/etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadoopdata</value>
</property>
</configuration>

3. hdfs-site.xml
vim $HADOOP_HOME/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9868</value>
</property>
</configuration>

4. mapred-site.xml
vim $HADOOP_HOME/etc/hadoop/mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>

5. yarn-site.xml
vim $HADOOP_HOME/etc/hadoop/yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
</configuration>

6. workers(datanode 节点列表)
vim $HADOOP_HOME/etc/hadoop/workers
删掉里面默认localhost,写入:
node1
node2

五、master 分发整个 hadoop 目录到 node1 node2
# -rl :递归 + 保留软链接
rsync -rl /home/hadoop/hadoop-3.3.6 hadoop@node1:/home/hadoop/
rsync -rl /home/hadoop/hadoop-3.3.6 hadoop@node2:/home/hadoop/
分发完,node1、node2 的 hadoop 配置自动同步,不用重复写配置!

六、初始化并启动集群(仅 master,hadoop 用户)
# 格式化namenode,【只执行一次!重复格式化集群直接报废!!!!!】
hdfs namenode -format
# 启动HDFS
start-dfs.sh
# 启动YARN
start-yarn.sh

验证进程,每台机器执行 jps
- master:NameNode、SecondaryNameNode、ResourceManager
- node1/node2:DataNode、NodeManager
Web 访问: HDFS:http://192.168.3.57:9870 YARN:http://192.168.3.57:8088


集群停止命令
stop-yarn.sh
stop-dfs.sh
rm -rf /tmp/hadoop-hadoop-*.pid
# 查看进程
jps
七、新增node或者某台node挂掉之后重新接入
如有新增请按照之前的配置先完成基础配置,完成基础配置之后下面操作和挂掉重启的node操作相同。
下列命令在挂掉重启的机器上运行
hdfs –daemon start datanode
yarn –daemon start nodemanager
jps
完成之后将主节点的配置重新同步至挂掉的node
scp $HADOOP_HOME/etc/hadoop/{core-site.xml,hdfs-site.xml,yarn-site.xml,mapred-site.xml} hadoop@node2:$HADOOP_HOME/etc/hadoop/
输入密码



