Hadoop 3.x高可用集群部署(0基础勿看)

打印 上一主题 下一主题

主题 982|帖子 982|积分 2946

修改服务器主机名

  1. vim /etc/hostname
复制代码
配置主机映射(按现实个人ip为准)

  1. sudo vim /etc/hosts
复制代码
 追加以下:
  1. 192.168.174.201 hadoop01
  2. 192.168.174.202 hadoop02
  3. 192.168.174.203 hadoop03
复制代码
 SSH无密登录配置

(1)hadoop01上生成公钥和私钥(所有呆板要重复以下操纵):
  1. ssh-keygen -t rsa
复制代码
然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)。
(2)将hadoop01公钥拷贝到要免密登录的目标呆板上
  1. ssh-copy-id hadoop01
复制代码
  1. ssh-copy-id hadoop02
复制代码
  1. ssh-copy-id hadoop03
复制代码
编写集群分发脚本xsync

阐明:在/home/hadoop/bin这个目录下存放的脚本,hadoop用户可以在体系任何地方直接执行。
在用的家目录/home/hadoop下创建bin文件夹
  1. sudo vim  /home/hadoop/bin/xsync
复制代码
  1. #!/bin/bash
  2. #1. 判断参数个数
  3. if [ $# -lt 1 ]
  4. then
  5.   echo Not Enough Arguement!
  6.   exit;
  7. fi
  8. #2. 遍历集群所有机器
  9. for host in hadoop01 hadoop02 hadoop03
  10. do
  11.   echo ====================  $host  ====================
  12.   #3. 遍历所有目录,挨个发送
  13.   for file in $@
  14.   do
  15.     #4 判断文件是否存在
  16.     if [ -e $file ]
  17.     then
  18.       #5. 获取父目录
  19.       pdir=$(cd -P $(dirname $file); pwd)
  20.       #6. 获取当前文件的名称
  21.       fname=$(basename $file)
  22.       ssh $host "mkdir -p $pdir"
  23.       rsync -av $pdir/$fname $host:$pdir
  24.     else
  25.       echo $file does not exists!
  26.     fi
  27.   done
  28. done
复制代码
 授权限
  1. sudo chmod 777 xsync
复制代码
编写集群下令批量执行脚本

  1. sudo vim  home/hadoop/bin/xcall
复制代码
  1. #! /bin/bash
  2. for i in hadoop01 hadoop02 hadoop03
  3. do
  4.     echo --------- $i ----------
  5.     ssh $i "$*"
  6. done
复制代码
 授权限
  1. 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
  1. mkdir zkData
复制代码
(2)在/export/service/zookeeper/zkData目录下创建一个myid的文件
  1. vim myid
复制代码
添加myid文件,注意一定要在linux里面创建,在notepad++里面很可能乱码
在文件中添加与server对应的编号:hadoop02、hadoop03上为2、3
  1. 1
复制代码
4)配置zoo.cfg文件
(1)重命名/export/service/zookeeper/conf目录下的zoo_sample.cfg为zoo.cfg
  1. ​​​​​​​mv zoo_sample.cfg zoo.cfg
复制代码
(2)打开zoo.cfg文件
  1. ​​​​​​​vim zoo.cfg
复制代码
修改数据存储路径配置
  1. dataDir=/export/service/zookeeper/zkData
复制代码
增加如下配置
  1. #######################cluster##########################
  2. server.1=hadoop01:2888:3888
  3. server.2=hadoop02:2888:3888
  4. server.3=hadoop03:2888:3888
复制代码
(3)同步/export/service/zookeeper目录内容到hadoop02、hadoop03
  1. ​​​​​​​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
  1. bin/zkServer.sh start
复制代码
(2)查看状态
  1. bin/zkServer.sh status
复制代码
ZK集群启动克制脚本zh.sh 
  1. vim /home/hadoop/bin/zk.sh
复制代码
  1. #!/bin/bash
  2. case $1 in
  3. "start"){
  4.         for i in hadoop01 hadoop02 hadoop03
  5.         do
  6.         echo ---------- zookeeper $i 启动 ------------
  7.                 ssh $i "/export/service/zookeeper/bin/zkServer.sh start"
  8.         done
  9. };;
  10. "stop"){
  11.         for i in hadoop01 hadoop02 hadoop03
  12.         do
  13.         echo ---------- zookeeper $i 停止 ------------   
  14.                 ssh $i "/export/service/zookeeper/bin/zkServer.sh stop"
  15.         done
  16. };;
  17. "status"){
  18.         for i in hadoop01 hadoop02 hadoop03
  19.         do
  20.         echo ---------- zookeeper $i 状态 ------------   
  21.                 ssh $i "/export/service/zookeeper/bin/zkServer.sh status"
  22.         done
  23. };;
  24. esac
复制代码
授权限

  1. sudo chmod 777 zh.sh
复制代码
配置Hadoop

安装包安装及环境变量自行配置
core-site.xml配置文件

  1. <configuration>
  2.     <!-- 默认文件系统设置,指定HDFS集群的地址 -->
  3.     <property>
  4.       <name>fs.defaultFS</name>
  5.       <value>hdfs://mycluster</value>
  6.     </property>
  7.        
  8.     <!-- Hadoop临时文件目录设置,指定临时文件存放的位置 -->
  9.     <property>
  10.       <name>hadoop.tmp.dir</name>
  11.       <value>/export/service/tmp</value>
  12.     </property>
  13.     <!-- 文件缓冲区大小设置,单位为字节,控制I/O操作时的缓存大小 -->
  14.     <property>
  15.       <name>io.file.buffer.size</name>
  16.       <value>4096</value>
  17.     </property>
  18.    
  19.     <!-- HDFS高可用性配置,指定ZooKeeper集群地址,用于监控NameNode的状态 -->
  20.     <property>
  21.       <name>ha.zookeeper.quorum</name>
  22.       <value>zookeeper01:2181,zookeeper02:2181,zookeeper03:2181</value>
  23.     </property>
  24. </configuration>
复制代码
 mapred-site.xml配置文件

  1. <configuration>
  2.     <!-- 设置MapReduce框架为YARN -->
  3.     <property>
  4.       <name>mapreduce.framework.name</name>
  5.       <value>yarn</value>
  6.     </property>
  7.     <!-- 设置MapReduce作业历史服务器的地址 -->
  8.     <property>
  9.       <name>mapreduce.jobhistory.address</name>
  10.       <value>0.0.0.0:10020</value>
  11.     </property>
  12.     <!-- 设置MapReduce作业历史的Web应用访问地址 -->
  13.     <property>
  14.       <name>mapreduce.jobhistory.webapp.address</name>
  15.       <value>0.0.0.0:19888</value>
  16.     </property>
  17. </configuration>
复制代码
hdfs-site.xml配置文件

  1. <configuration>
  2.     <!-- 配置HDFS集群名称 -->
  3.     <property>
  4.       <name>dfs.nameservices</name>
  5.       <value>mycluster</value>
  6.     </property>
  7.        
  8.     <!-- 配置HDFS集群中NameNode的高可用性节点 -->
  9.     <property>
  10.       <name>dfs.ha.namenodes.mycluster</name>
  11.       <value>nn1,nn2,nn3</value>
  12.     </property>
  13.        
  14.     <!-- 配置每个NameNode的RPC地址,用于客户端与NameNode通信 -->
  15.     <property>
  16.       <name>dfs.namenode.rpc-address.mycluster.nn1</name>
  17.       <value>hadoop01:8020</value>
  18.     </property>
  19.     <property>
  20.       <name>dfs.namenode.rpc-address.mycluster.nn2</name>
  21.       <value>hadoop02:8020</value>
  22.     </property>
  23.     <property>
  24.       <name>dfs.namenode.rpc-address.mycluster.nn3</name>
  25.       <value>hadoop03:8020</value>
  26.     </property>       
  27.        
  28.     <!-- 配置每个NameNode的HTTP地址,用于浏览器访问Web界面 -->
  29.     <property>
  30.       <name>dfs.namenode.http-address.mycluster.nn1</name>
  31.       <value>hadoop01:9870</value>
  32.     </property>
  33.     <property>
  34.       <name>dfs.namenode.http-address.mycluster.nn2</name>
  35.       <value>hadoop02:9870</value>
  36.     </property>
  37.     <property>
  38.       <name>dfs.namenode.http-address.mycluster.nn3</name>
  39.       <value>hadoop03:9870</value>
  40.     </property>       
  41.        
  42.     <!-- 配置HDFS的数据块复制因子 -->
  43.     <property>
  44.       <name>dfs.replication</name>
  45.       <value>3</value>
  46.     </property>
  47.    
  48.     <!-- 配置HDFS数据块大小,单位为字节,这里是128MB -->
  49.     <property>
  50.       <name>dfs.blocksize</name>
  51.       <value>134217728</value>
  52.     </property>
  53.        
  54.     <!-- 配置NameNode存储目录 -->
  55.     <property>
  56.       <name>dfs.namenode.name.dir</name>
  57.       <value>file://${hadoop.tmp.dir}/dfs/name</value>
  58.     </property>
  59.     <!-- 配置DataNode存储目录 -->
  60.     <property>
  61.       <name>dfs.datanode.data.dir</name>
  62.       <value>file://${hadoop.tmp.dir}/dfs/data</value>
  63.     </property>
  64.     <!-- 配置共享编辑日志存储目录,用于NameNode高可用性 -->
  65.     <property>
  66.       <name>dfs.namenode.shared.edits.dir</name>
  67.       <value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/mycluster</value>
  68.     </property>
  69.     <!-- 配置JournalNode的日志存储目录 -->
  70.     <property>
  71.       <name>dfs.journalnode.edits.dir</name>
  72.       <value>/export/service/hadoop/tmp/dfs/journal</value>
  73.     </property>
  74.    
  75.     <!-- 配置NameNode高可用性时的客户端代理提供者 -->
  76.     <property>
  77.       <name>dfs.client.failover.proxy.provider.mycluster</name>
  78.       <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
  79.     </property>
  80.        
  81.     <!-- 启用HDFS的自动故障转移功能 -->
  82.     <property>
  83.       <name>dfs.ha.automatic-failover.enabled</name>
  84.       <value>true</value>
  85.     </property>
  86.    
  87.     <!-- 配置故障转移时的屏蔽方法,这里使用sshfence -->
  88.     <property>
  89.       <name>dfs.ha.fencing.methods</name>
  90.       <value>sshfence</value>
  91.     </property>
  92.     <!-- 配置用于SSH屏蔽的私钥文件 -->
  93.     <property>
  94.       <name>dfs.ha.fencing.ssh.private-key-files</name>
  95.       <value>/root/.ssh/id_rsa</value>
  96.     </property>
  97.     <!-- 配置SSH连接的超时时间,单位为毫秒 -->
  98.     <property>
  99.       <name>dfs.ha.fencing.ssh.connect-timeout</name>
  100.       <value>30000</value>
  101.     </property>
  102. </configuration>
复制代码
yarn-site.xml配置文件

  1. <configuration>
  2.     <!-- 启用ResourceManager高可用性 -->
  3.     <property>
  4.       <name>yarn.resourcemanager.ha.enabled</name>
  5.       <value>true</value>
  6.     </property>
  7.     <!-- 设置YARN集群的ID,用于标识集群 -->
  8.     <property>
  9.       <name>yarn.resourcemanager.cluster-id</name>
  10.       <value>cluster1</value>
  11.     </property>
  12.     <!-- 启用ResourceManager的恢复功能 -->
  13.     <property>
  14.       <name>yarn.resourcemanager.recovery.enabled</name>
  15.       <value>true</value>
  16.     </property>
  17.     <!-- 配置ResourceManager状态存储方式,这里使用ZooKeeper作为存储后端 -->
  18.     <property>
  19.       <name>yarn.resourcemanager.store.class</name>
  20.       <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
  21.     </property>
  22.        
  23.     <!-- 配置高可用性模式下的ResourceManager实例ID -->
  24.     <property>
  25.       <name>yarn.resourcemanager.ha.rm-ids</name>
  26.       <value>rm1,rm2,rm3</value>
  27.     </property>
  28.     <!-- 配置第一个ResourceManager的主机名 -->
  29.     <property>
  30.       <name>yarn.resourcemanager.hostname.rm1</name>
  31.       <value>hadoop01</value>
  32.     </property>
  33.     <!-- 配置第二个ResourceManager的主机名 -->
  34.     <property>
  35.       <name>yarn.resourcemanager.hostname.rm2</name>
  36.       <value>hadoop02</value>
  37.     </property>
  38.     <!-- 配置第三个ResourceManager的主机名 -->
  39.     <property>
  40.       <name>yarn.resourcemanager.hostname.rm3</name>
  41.       <value>hadoop03</value>
  42.     </property>
  43.     <!-- 配置第一个ResourceManager的Web应用访问地址 -->
  44.     <property>
  45.       <name>yarn.resourcemanager.webapp.address.rm1</name>
  46.       <value>hadoop01:8088</value>
  47.     </property>
  48.     <!-- 配置第二个ResourceManager的Web应用访问地址 -->
  49.     <property>
  50.       <name>yarn.resourcemanager.webapp.address.rm2</name>
  51.       <value>hadoop02:8088</value>
  52.     </property>
  53.     <!-- 配置第三个ResourceManager的Web应用访问地址 -->
  54.     <property>
  55.       <name>yarn.resourcemanager.webapp.address.rm3</name>
  56.       <value>hadoop03:8088</value>
  57.     </property>
  58.     <!-- 配置ZooKeeper的地址,用于YARN的高可用性和状态存储 -->
  59.     <property>
  60.       <name>hadoop.zk.address</name>
  61.       <value>zookeeper01:2181,zookeeper02:2181,zookeeper03:2181</value>
  62.     </property>
  63.     <!-- 启用YARN NodeManager的附加服务 -->
  64.     <property>
  65.       <name>yarn.nodemanager.aux-services</name>
  66.       <value>mapreduce_shuffle</value>
  67.     </property>
  68.     <!-- 配置YARN NodeManager的附加服务类,这里是MapReduce的Shuffle服务 -->
  69.     <property>
  70.       <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
  71.       <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  72.     </property>
  73.        
  74.     <!-- 启用YARN日志聚合功能 -->
  75.     <property>
  76.       <name>yarn.log-aggregation-enable</name>
  77.       <value>true</value>
  78.     </property>
  79.     <!-- 配置日志聚合保留时间,单位为秒,这里设置为7天 -->
  80.     <property>
  81.       <name>yarn.log-aggregation.retain-seconds</name>
  82.       <value>604800</value>
  83.     </property>       
  84. </configuration>
复制代码
workers配置文件

  1. vim /export/service/etc/hadoop/workers
  2. hadoop01
  3. hadoop02
  4. hadoop03
复制代码
分发到其他服务器

  1. scp /export/service/hadoop/etc/hadoop/* hadoop02:/export/service/hadoop/etc/hadoop/
  2. scp /export/service/hadoop/etc/hadoop/* hadoop03:/export/service/hadoop/etc/hadoop/
复制代码
启动hadoop服务

1、初始化zookeeper(任意节点)

  1. hdfs zkfc -formatZK
复制代码
验证zkfc是否格式化乐成
  1. # zkCli.sh
  2. [zk: localhost:2181(CONNECTED) 0] ls /hadoop-ha
  3. [mycluster]
复制代码
2、启动journalnode

在hadoop01、hadoop02及hadoop03节点启动journalnode
  1. hdfs --daemon start journalnode
复制代码
补充:若在Hadoop启动过程找不到JAVA_HOME就到/export/service/hadoop-3.3.4/etc/hadoop/hadoop-env.sh文件手工配置JAVA_HOME
  1. export JAVA_HOME='/export/service/jdk-1.8.0'
复制代码
3、启动namenode

hadoop01格式化namenode
  1. hdfs namenode -format
复制代码
 若journalnode正常启动,namenode格式出现问题,大概率是文件夹/export/service/hadoop-3.3.4/tmp权限不足,因此必要给这个文件夹授权
  1. sudo chmod -R 777 /export/service/hadoop-3.3.4/tmp
复制代码
在hadoop01启动namenode
  1. hdfs --daemon start namenode
复制代码
将hadoop01节点上namenode的数据同步到其他nameNode节点,在hadoop02、hadoop03节点执行:
  1. hdfs namenode -bootstrapStandby
复制代码
欣赏器访问NameNode,当前所有NameNode都是standby状态:
  1. http://192.168.174.201:9870/
  2. http://192.168.174.202:9870/
  3. http://192.168.174.203:9870/
复制代码
4、启动所有其他服务,包括zkfc

  1. start-all.sh
复制代码
编写hadoop一键启动脚本

  1. sudo vim /home/hadoop/bin/hdp.sh
复制代码
  1. #!/bin/bash
  2. if [ $# -lt 1 ]
  3. then
  4.     echo "No Args Input..."
  5.     exit ;
  6. fi
  7. case $1 in
  8. "start")
  9.         echo " =================== 启动 hadoop集群 ==================="
  10.         echo " --------------- 启动 hdfs ---------------"
  11.         ssh hadoop01 "/export/service/hadoop-3.3.4/sbin/start-dfs.sh"
  12.         echo " --------------- 启动 yarn ---------------"
  13.         ssh hadoop02 "/export/service/hadoop-3.3.4/sbin/start-yarn.sh"
  14.         echo " --------------- 启动 historyserver ---------------"
  15.         ssh hadoop03 "/export/service/hadoop-3.3.4/bin/mapred --daemon start historyserver"
  16. ;;
  17. "stop")
  18.         echo " =================== 关闭 hadoop集群 ==================="
  19.         echo " --------------- 关闭 historyserver ---------------"
  20.         ssh hadoop01 "/export/service/hadoop-3.3.4/bin/mapred --daemon stop historyserver"
  21.         echo " --------------- 关闭 yarn ---------------"
  22.         ssh hadoop02 "/export/service/hadoop-3.3.4/sbin/stop-yarn.sh"
  23.         echo " --------------- 关闭 hdfs ---------------"
  24.         ssh hadoop03 "/export/service/hadoop-3.3.4/sbin/stop-dfs.sh"
  25. ;;
  26. *)
  27.     echo "Input Args Error..."
  28. ;;
  29. esac
  30. xcall jps
复制代码
授权限
  1. sudo chmod 777 hdp.sh
复制代码
!!注意 关机之前必须要关闭hadoop,否则namenode和datanode在下次启动大概率会出现故障



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

没腿的鸟

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表