IT评测·应用市场-qidao123.com
标题:
Hadoop 3.x高可用集群部署(0基础勿看)
[打印本页]
作者:
没腿的鸟
时间:
2025-3-13 19:25
标题:
Hadoop 3.x高可用集群部署(0基础勿看)
修改服务器主机名
vim /etc/hostname
复制代码
配置主机映射(按现实个人ip为准)
sudo vim /etc/hosts
复制代码
追加以下:
192.168.174.201 hadoop01
192.168.174.202 hadoop02
192.168.174.203 hadoop03
复制代码
SSH无密登录
配置
(1)hadoop01上生成公钥和私钥(所有呆板要重复以下操纵):
ssh-keygen -t rsa
复制代码
然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)。
(2)将hadoop01公钥拷贝到要免密登录的目标呆板上
ssh-copy-id hadoop01
复制代码
ssh-copy-id hadoop02
复制代码
ssh-copy-id hadoop03
复制代码
编写集群分发脚本xsync
阐明:在/home/hadoop/bin这个目录下存放的脚本,hadoop用户可以在体系任何地方直接执行。
在用的家目录/home/hadoop下创建bin文件夹
sudo vim /home/hadoop/bin/xsync
复制代码
#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
for host in hadoop01 hadoop02 hadoop03
do
echo ==================== $host ====================
#3. 遍历所有目录,挨个发送
for file in $@
do
#4 判断文件是否存在
if [ -e $file ]
then
#5. 获取父目录
pdir=$(cd -P $(dirname $file); pwd)
#6. 获取当前文件的名称
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done
复制代码
授权限
sudo chmod 777 xsync
复制代码
编写集群下令批量执行脚本
sudo vim home/hadoop/bin/xcall
复制代码
#! /bin/bash
for i in hadoop01 hadoop02 hadoop03
do
echo --------- $i ----------
ssh $i "$*"
done
复制代码
授权限
sudo chmod 777 xcall
复制代码
Java自行安装配置(三个服务器都必要)
Zookeeper安装
1)集群
规划
在hadoop01、hadoop02和hadoop03三个节点上部署Zookeeper。
服务器
hadoop01
服务器
hadoop02
服务器
hadoop03
Zookeeper
Zookeeper
Zookeeper
Zookeeper
2)
解压安装
(1)解压Zookeeper安装包到/export/service/目录下
[hadoop@hadoop01 software]$ tar -zxvf apache-zookeeper-3.7.1-bin.tar.gz -C /export/service/
(2)修改/export/service/apache-zookeeper-3.7.1-bin名称为zookeeper-3.7.1
[hadoop@hadoop01 module]$ mv apache-zookeeper-3.7.1-bin/ zookeeper
3)配置服务器编号
(1)在/export/service/zookeeper/目录下创建zkData
mkdir zkData
复制代码
(2)在/export/service/zookeeper/zkData目录下创建一个myid的文件
vim myid
复制代码
添加myid文件,注意一定要在linux里面创建,在notepad++里面很可能乱码
在文件中添加与server对应的编号:hadoop02、hadoop03上为2、3
1
复制代码
4)配置zoo.cfg文件
(1)重命名/export/service/zookeeper/conf目录下的zoo_sample.cfg为zoo.cfg
mv zoo_sample.cfg zoo.cfg
复制代码
(2)打开zoo.cfg文件
vim zoo.cfg
复制代码
修改数据存储路径配置
dataDir=/export/service/zookeeper/zkData
复制代码
增加如下配置
#######################cluster##########################
server.1=hadoop01:2888:3888
server.2=hadoop02:2888:3888
server.3=hadoop03:2888:3888
复制代码
(3)同步/export/service/zookeeper目录内容到hadoop02、hadoop03
xsync /export/service/zookeeper/
复制代码
(4)zoo.cfg配置参数解读
server.A=B:C
。
A是一个数字,表示这个是第几号服务器;
集群模式下配置一个文件myid,这个文件在dataDir目录下,这个文件里面有一个数据就是A的值,Zookeeper启动时读取此文件,拿到里面的数据与zoo.cfg里面的配置信息比较从而判断到底是哪个server。
B是这个服务器的地点;
C是这个服务器Follower与集群中的Leader服务器互换信息的端口;
D是万一集群中的Leader服务器挂了,必要一个端口来重新举行选举,选出一个新的Leader,而这个端口就是用来执行选举时服务器相互通讯的端口。
5)集群操纵
(1)分别hadoop01、hadoop02、hadoop03启动Zookeeper
bin/zkServer.sh start
复制代码
(2)查看状态
bin/zkServer.sh status
复制代码
ZK
集群启动克制脚本
zh.sh
vim /home/hadoop/bin/zk.sh
复制代码
#!/bin/bash
case $1 in
"start"){
for i in hadoop01 hadoop02 hadoop03
do
echo ---------- zookeeper $i 启动 ------------
ssh $i "/export/service/zookeeper/bin/zkServer.sh start"
done
};;
"stop"){
for i in hadoop01 hadoop02 hadoop03
do
echo ---------- zookeeper $i 停止 ------------
ssh $i "/export/service/zookeeper/bin/zkServer.sh stop"
done
};;
"status"){
for i in hadoop01 hadoop02 hadoop03
do
echo ---------- zookeeper $i 状态 ------------
ssh $i "/export/service/zookeeper/bin/zkServer.sh status"
done
};;
esac
复制代码
授权限
sudo chmod 777 zh.sh
复制代码
配置Hadoop
安装包安装及环境变量自行配置
core-site.xml配置文件
<configuration>
<!-- 默认文件系统设置,指定HDFS集群的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<!-- Hadoop临时文件目录设置,指定临时文件存放的位置 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/export/service/tmp</value>
</property>
<!-- 文件缓冲区大小设置,单位为字节,控制I/O操作时的缓存大小 -->
<property>
<name>io.file.buffer.size</name>
<value>4096</value>
</property>
<!-- HDFS高可用性配置,指定ZooKeeper集群地址,用于监控NameNode的状态 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>zookeeper01:2181,zookeeper02:2181,zookeeper03:2181</value>
</property>
</configuration>
复制代码
mapred-site.xml配置文件
<configuration>
<!-- 设置MapReduce框架为YARN -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 设置MapReduce作业历史服务器的地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>0.0.0.0:10020</value>
</property>
<!-- 设置MapReduce作业历史的Web应用访问地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>0.0.0.0:19888</value>
</property>
</configuration>
复制代码
hdfs-site.xml配置文件
<configuration>
<!-- 配置HDFS集群名称 -->
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<!-- 配置HDFS集群中NameNode的高可用性节点 -->
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2,nn3</value>
</property>
<!-- 配置每个NameNode的RPC地址,用于客户端与NameNode通信 -->
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>hadoop01:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>hadoop02:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn3</name>
<value>hadoop03:8020</value>
</property>
<!-- 配置每个NameNode的HTTP地址,用于浏览器访问Web界面 -->
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>hadoop01:9870</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>hadoop02:9870</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn3</name>
<value>hadoop03:9870</value>
</property>
<!-- 配置HDFS的数据块复制因子 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 配置HDFS数据块大小,单位为字节,这里是128MB -->
<property>
<name>dfs.blocksize</name>
<value>134217728</value>
</property>
<!-- 配置NameNode存储目录 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/name</value>
</property>
<!-- 配置DataNode存储目录 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/data</value>
</property>
<!-- 配置共享编辑日志存储目录,用于NameNode高可用性 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/mycluster</value>
</property>
<!-- 配置JournalNode的日志存储目录 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/export/service/hadoop/tmp/dfs/journal</value>
</property>
<!-- 配置NameNode高可用性时的客户端代理提供者 -->
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 启用HDFS的自动故障转移功能 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置故障转移时的屏蔽方法,这里使用sshfence -->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<!-- 配置用于SSH屏蔽的私钥文件 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<!-- 配置SSH连接的超时时间,单位为毫秒 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
</configuration>
复制代码
yarn-site.xml配置文件
<configuration>
<!-- 启用ResourceManager高可用性 -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!-- 设置YARN集群的ID,用于标识集群 -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>cluster1</value>
</property>
<!-- 启用ResourceManager的恢复功能 -->
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<!-- 配置ResourceManager状态存储方式,这里使用ZooKeeper作为存储后端 -->
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
<!-- 配置高可用性模式下的ResourceManager实例ID -->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2,rm3</value>
</property>
<!-- 配置第一个ResourceManager的主机名 -->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>hadoop01</value>
</property>
<!-- 配置第二个ResourceManager的主机名 -->
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hadoop02</value>
</property>
<!-- 配置第三个ResourceManager的主机名 -->
<property>
<name>yarn.resourcemanager.hostname.rm3</name>
<value>hadoop03</value>
</property>
<!-- 配置第一个ResourceManager的Web应用访问地址 -->
<property>
<name>yarn.resourcemanager.webapp.address.rm1</name>
<value>hadoop01:8088</value>
</property>
<!-- 配置第二个ResourceManager的Web应用访问地址 -->
<property>
<name>yarn.resourcemanager.webapp.address.rm2</name>
<value>hadoop02:8088</value>
</property>
<!-- 配置第三个ResourceManager的Web应用访问地址 -->
<property>
<name>yarn.resourcemanager.webapp.address.rm3</name>
<value>hadoop03:8088</value>
</property>
<!-- 配置ZooKeeper的地址,用于YARN的高可用性和状态存储 -->
<property>
<name>hadoop.zk.address</name>
<value>zookeeper01:2181,zookeeper02:2181,zookeeper03:2181</value>
</property>
<!-- 启用YARN NodeManager的附加服务 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 配置YARN NodeManager的附加服务类,这里是MapReduce的Shuffle服务 -->
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<!-- 启用YARN日志聚合功能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 配置日志聚合保留时间,单位为秒,这里设置为7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
</configuration>
复制代码
workers配置文件
vim /export/service/etc/hadoop/workers
hadoop01
hadoop02
hadoop03
复制代码
分发到其他服务器
scp /export/service/hadoop/etc/hadoop/* hadoop02:/export/service/hadoop/etc/hadoop/
scp /export/service/hadoop/etc/hadoop/* hadoop03:/export/service/hadoop/etc/hadoop/
复制代码
启动hadoop服务
1、初始化zookeeper(任意节点)
hdfs zkfc -formatZK
复制代码
验证zkfc是否格式化乐成
# zkCli.sh
[zk: localhost:2181(CONNECTED) 0] ls /hadoop-ha
[mycluster]
复制代码
2、启动journalnode
在hadoop01、hadoop02及hadoop03节点启动journalnode
hdfs --daemon start journalnode
复制代码
补充:若在Hadoop启动过程找不到JAVA_HOME就到/export/service/hadoop-3.3.4/etc/hadoop/hadoop-env.sh文件手工配置JAVA_HOME
export JAVA_HOME='/export/service/jdk-1.8.0'
复制代码
3、启动namenode
hadoop01格式化namenode
hdfs namenode -format
复制代码
若journalnode正常启动,namenode格式出现问题,大概率是文件夹/export/service/hadoop-3.3.4/tmp权限不足,因此必要给这个文件夹授权
sudo chmod -R 777 /export/service/hadoop-3.3.4/tmp
复制代码
在hadoop01启动namenode
hdfs --daemon start namenode
复制代码
将hadoop01节点上namenode的数据同步到其他nameNode节点,在hadoop02、hadoop03节点执行:
hdfs namenode -bootstrapStandby
复制代码
欣赏器访问NameNode,当前所有NameNode都是standby状态:
http://192.168.174.201:9870/
http://192.168.174.202:9870/
http://192.168.174.203:9870/
复制代码
4、启动所有其他服务,包括zkfc
start-all.sh
复制代码
编写hadoop一键启动脚本
sudo vim /home/hadoop/bin/hdp.sh
复制代码
#!/bin/bash
if [ $# -lt 1 ]
then
echo "No Args Input..."
exit ;
fi
case $1 in
"start")
echo " =================== 启动 hadoop集群 ==================="
echo " --------------- 启动 hdfs ---------------"
ssh hadoop01 "/export/service/hadoop-3.3.4/sbin/start-dfs.sh"
echo " --------------- 启动 yarn ---------------"
ssh hadoop02 "/export/service/hadoop-3.3.4/sbin/start-yarn.sh"
echo " --------------- 启动 historyserver ---------------"
ssh hadoop03 "/export/service/hadoop-3.3.4/bin/mapred --daemon start historyserver"
;;
"stop")
echo " =================== 关闭 hadoop集群 ==================="
echo " --------------- 关闭 historyserver ---------------"
ssh hadoop01 "/export/service/hadoop-3.3.4/bin/mapred --daemon stop historyserver"
echo " --------------- 关闭 yarn ---------------"
ssh hadoop02 "/export/service/hadoop-3.3.4/sbin/stop-yarn.sh"
echo " --------------- 关闭 hdfs ---------------"
ssh hadoop03 "/export/service/hadoop-3.3.4/sbin/stop-dfs.sh"
;;
*)
echo "Input Args Error..."
;;
esac
xcall jps
复制代码
授权限
sudo chmod 777 hdp.sh
复制代码
!!注意 关机之前必须要关闭hadoop,否则namenode和datanode在下次启动大概率会出现故障
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/)
Powered by Discuz! X3.4