• Hadoop 高可用安装


     第一步我们需要在 evassh 服务器初始化虚拟服务器:

    1. cd /opt
    2. wrapdocker
    3. ulimit -f unlimited
    4. docker load -i ubuntu16-ssh.tar
    5. docker-compose up -d

    注意:请不要在各个虚拟服务器之间进行 ssh 登录,这种操作会导致无法保存配置数据。正确方法是:在虚拟服务器里执行 exit 后回到 evassh 服务器,再按上述方法登录各虚拟服务器。

    文件传输

    通过 scp 命令将 evassh 上面的 Java 安装包、Zookeeper安装包 与 Hadoop 安装包放入 master 服务器上的/opt 目录下。

    1. scp /opt/jdk-8u141-linux-x64.tar.gz root@172.18.0.2:/opt
    2. scp /opt/hadoop-3.1.0.tar.gz root@172.18.0.2:/opt
    3. scp /opt/zookeeper-3.4.5.tar.gz root@172.18.0.2:/opt

    第一次连接,会询问是否继续连接。键盘输入 yes 并输入密码 123123 即可进行传输。

    配置免密登录

    在集群搭建过程中,我们会频繁的在各个服务器之间跳转,此过程是通过 SSH 去连接的,为了避免启动过程输入密码,我们可以配置免密登录。

    1、分别在 master、slave1、slave2 生成密钥,命令如下:

    在 master 服务器生成秘钥:

    1. # 进入 master 服务器,键盘输入 yes 与 密码 123123
    2. ssh 172.18.0.2
    3. ssh-keygen -t rsa
    4. # 执行命令之后,连着按三个回车键即可生成秘钥。

    在 salve1 服务器生成秘钥:

    1. 进入 salve1 服务器,键盘输入 yes 与 密码 123123
    2. ssh 172.18.0.3
    3. ssh-keygen -t rsa

    在 salve2 服务器生成秘钥:

    1. 进入 salve2 服务器,键盘输入 yes 与 密码 123123
    2. ssh 172.18.0.4
    3. ssh-keygen -t rsa

    master、slave1和slave2直接已经做了映射,所以这里不需要再做映射。

    2、 在 master 复制 master、slave1、slave2 的公钥

    1. cat ~/.ssh/id_rsa.pub>> ~/.ssh/authorized_keys
    2. ssh slave1 cat ~/.ssh/id_rsa.pub>> ~/.ssh/authorized_keys
    3. ssh slave2 cat ~/.ssh/id_rsa.pub>> ~/.ssh/authorized_keys

    密码为:123123

    3、 在 slave1 复制 master 的 authorized_keys 文件。

    ssh master cat ~/.ssh/authorized_keys>> ~/.ssh/authorized_keys

    4、 在 slave2 复制 master 的 authorized_keys 文件。

    ssh master cat ~/.ssh/authorized_keys>> ~/.ssh/authorized_keys

    集群之间免密至此设置成功

    集群安装 JavaJDK

    在 master 服务器的 /opt 目录下有 evassh 服务器传过来的 Java 安装包与 Hadoop 安装包。解压 Java 安装包至/usr/local目录下。

    tar -zxvf /opt/jdk-8u141-linux-x64.tar.gz -C /usr/local/

    解压好JDK之后还需要在环境变量中配置JDK,才可以使用,接下来就来配置JDK。 输入命令:vim /etc/profile 编辑配置文件; 在文件末尾输入如下代码(不可以有空格):

    1. export JAVA_HOME=/usr/local/jdk1.8.0_141
    2. export PATH=$PATH:$JAVA_HOME/bin

    然后,保存并退出。

    最后:source /etc/profile使刚刚的配置生效。

    输入:java -version 出现如下界面代表配置成功。

    将解压好的JDK与配置文件通过 scp 命令发送至 slave1、slave2 中。

    1. 发送JDK
    2. scp -r /usr/local/jdk1.8.0_141/ root@slave1:/usr/local/
    3. scp -r /usr/local/jdk1.8.0_141/ root@slave2:/usr/local/
    4. #发送配置文件
    5. scp /etc/profile root@slave1:/etc/
    6. scp /etc/profile root@slave2:/etc/

    slave1 和 slave2 服务器上分别执行source /etc/profile使发送来的配置生效。

    Zookeeper 安装

    在 master上解压 evassh 传输过来的 Zookeeper 安装包,并将解压后的文件夹改名为zookeeper。

    zookeeper 官网:Apache ZooKeeper
    下载地址: Apache ZooKeeper

    1. tar -zxvf /opt/zookeeper-3.4.5.tar.gz -C /usr/local/
    2. cd /usr/local
    3. mv zookeeper-3.4.5/ zookeeper

    进入 Zookeeper 配置文件存放的文件夹中,将 zoo_sample.cfg 模板文件 修改名字为 zoo.cfg,并修改:

    1. cd /usr/local/zookeeper/conf/
    2. mv zoo_sample.cfg zoo.cfg
    3. vi zoo.cfg

    dataDir:设置数据文件目录和数据持久化路径

    1. 修改
    2. dataDir=/usr/local/zookeeper/zkdata
    3. #并添加(提供的虚拟机内部,已经做了ip映射)
    4. server.1=master:2888:3888
    5. server.2=slave1:2888:3888
    6. server.3=slave2:2888:3888

    添加的配置为zookeeper集群的服务器编号以及对应的主机名 选举端口号和通信端口号 (server .1 代表对应服务器编号)

    创建 zkdata 文件夹,并创建 myid 文件夹,内容为 1。

    1. cd /usr/local/zookeeper
    2. mkdir zkdata
    3. cd zkdata
    4. echo 1 > myid
    5. 查看
    6. cat myid

    通过 scp 命令将zookeeper的文件夹发送至 slave1 和 slave2 的 /usr/local 中。

    1. scp -r /usr/local/zookeeper slave1:/usr/local/
    2. scp -r /usr/local/zookeeper slave2:/usr/local/

    slave1 和 slave2 服务器分别将 /usr/local/zookeeper/zkdata 中myid 改为 2 和 3。

    1. slave1上执行
    2. cd /usr/local/zookeeper/zkdata/
    3. echo 2 > myid
    4. #slave2上执行
    5. cd /usr/local/zookeeper/zkdata/
    6. echo 3 > myid

    配置环境变量 vi /etc/profile

    1. export ZOOKEEPER_HOME=/usr/local/zookeeper
    2. export PATH=$PATH:$ZOOKEEPER_HOME/bin

    source /etc/profile并使得生效。

    另外 2 台服务器也配置环境变量,source /etc/profile并使得生效

    1. scp /etc/profile root@slave1:/etc/
    2. scp /etc/profile root@slave2:/etc/

    3 台虚拟机分别使用命令zkServer.sh start启动 Zookeeper 服务启动成功后,使用命令zkServer.sh status查看状态 其中 leader 代表集群主节点,follower 代表从节点。

    jps查看 

    注,若第一关顺利通过第二关为出错直接进行以下步骤,若第二关关闭过服务器或重置命令行则附带执行以上语句

    安装 Hadoop 高可用

    在上一关,已经将 Hadoop 安装包已经通过 scp 发送至 mater 服务器的 /opt 目录下了。解压安装包至 /usr/local 文件夹中,并将名字修改为 hadoop :

    1. master中
    2. cd /opt
    3. tar -zxvf hadoop-3.1.0.tar.gz -C /usr/local/
    4. cd /usr/local
    5. mv hadoop-3.1.0 hadoop

    输入命令:vi /etc/profile 编辑配置文件,环境变量中配置 Hadoop :

    1. export HADOOP_HOME=/usr/local/hadoop
    2. export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

    source /etc/profile使刚刚的配置生效。

    通过 scp 将配置文件发送至 slave1、slave2中,并使配置生效:

    1. scp /etc/profile root@slave1:/etc/
    2. scp /etc/profile root@slave2:/etc/
    3. source /etc/profile

    进入 Hadoop 配置文件夹 etc/hadoop

    cd /usr/local/hadoop/etc/hadoop/

    修改 hadoop-env.sh,添加以下配置:

    1. export JAVA_HOME=/usr/local/jdk1.8.0_141
    2. export HDFS_NAMENODE_USER=root
    3. export HDFS_DATANODE_USER=root
    4. export HDFS_ZKFC_USER=root
    5. export HDFS_JOURNALNODE_USER=root
    6. export HADOOP_SHELL_EXECNAME=root

    修改core-site.xml,添加以下配置:

    1. <configuration>
    2. <property>
    3. <name>fs.defaultFS</name>
    4. <value>hdfs://mycluster</value>
    5. </property>
    6. <property>
    7. <name>hadoop.tmp.dir</name>
    8. <value>/usr/local/hadoop</value>
    9. </property>
    10. </configuration>

    修改 hdfs-site.xml,添加以下配置:

    1. <configuration>
    2. <!-- 1 指定名称服务名称-->
    3. <property>
    4. <name>dfs.nameservices</name>
    5. <value>mycluster</value>
    6. </property>
    7. <!-- 2 指定名称服务列表-->
    8. <property>
    9. <name>dfs.ha.namenodes.mycluster</name>
    10. <value>nn1,nn2</value>
    11. </property>
    12. <!--3 指定nn1 rpc通信地址和端口 -->
    13. <property>
    14. <name>dfs.namenode.rpc-address.mycluster.nn1</name>
    15. <value>master:8020</value>
    16. </property>
    17. <!--4 指定nn2 rpc通信地址和端口 -->
    18. <property>
    19. <name>dfs.namenode.rpc-address.mycluster.nn2</name>
    20. <value>slave1:8020</value>
    21. </property>
    22. <!--5 指定nn1 http地址和端口 -->
    23. <property>
    24. <name>dfs.namenode.http-address.mycluster.nn1</name>
    25. <value>master:50070</value>
    26. </property>
    27. <!-- 6 指定nn2 http地址和端口-->
    28. <property>
    29. <name>dfs.namenode.http-address.mycluster.nn2</name>
    30. <value>slave1:50070</value>
    31. </property>
    32. <!-- 7 指定共享编辑日志存储的jouralnode地址-->
    33. <property>
    34. <name>dfs.namenode.shared.edits.dir</name>
    35. <value>qjournal://master:8485;slave1:8485;slave2:8485/mycluster</value>
    36. </property>
    37. <!-- 8 指定共享编辑日志的存储路径-->
    38. <property>
    39. <name>dfs.journalnode.edits.dir</name>
    40. <value>/usr/local/hadoop/tmp/journal</value>
    41. </property>
    42. <!--9 指定客户端故障转移代理供应类 -->
    43. <property>
    44. <name>dfs.client.failover.proxy.provider.mycluster</name>
    45. <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    46. </property>
    47. <!--10 指定brain split脑裂隔离方法 -->
    48. <property>
    49. <name>dfs.ha.fencing.methods</name>
    50. <value>sshfence</value>
    51. </property>
    52. <!--11 指定私钥文件路径 -->
    53. <property>
    54. <name>dfs.ha.fencing.ssh.private-key-files</name>
    55. <value>/root/.ssh/id_rsa</value>
    56. </property>
    57. <!-- 12 启用自动故障转移-->
    58. <property>
    59. <name>dfs.ha.automatic-failover.enabled</name>
    60. <value>true</value>
    61. </property>
    62. <!--13 指定zk服务器 -->
    63. <property>
    64. <name>ha.zookeeper.quorum</name>
    65. <value>master:2181,slave1:2181,slave2:2181</value>
    66. </property>
    67. </configuration>
    修改 mapred-site.xml,添加以下配置:
    
    1. <configuration>
    2. <property>
    3. <name>mapreduce.framework.name</name>
    4. <value>yarn</value>
    5. </property>
    6. </configuration>

    修改 yarn-site.xml,添加以下配置:

    1. <configuration>
    2. <property>
    3. <name>yarn.nodemanager.aux-services</name>
    4. <value>mapreduce_shuffle</value>
    5. </property>
    6. <property>
    7. <name>yarn.resourcemanager.ha.enabled</name>
    8. <value>true</value>
    9. </property>
    10. <property>
    11. <name>yarn.resourcemanager.cluster-id</name>
    12. <value>cluster1</value>
    13. </property>
    14. <property>
    15. <name>yarn.resourcemanager.ha.rm-ids</name>
    16. <value>rm1,rm2</value>
    17. </property>
    18. <property>
    19. <name>yarn.resourcemanager.hostname.rm1</name>
    20. <value>master</value>
    21. </property>
    22. <property>
    23. <name>yarn.resourcemanager.hostname.rm2</name>
    24. <value>slave2</value>
    25. </property>
    26. <property>
    27. <name>yarn.resourcemanager.webapp.address.rm1</name>
    28. <value>master:8088</value>
    29. </property>
    30. <property>
    31. <name>yarn.resourcemanager.webapp.address.rm2</name>
    32. <value>slave2:8088</value>
    33. </property>
    34. <property>
    35. <name>yarn.resourcemanager.zk-address</name>
    36. <value>master:2181,slave1:2181,slave2:2181</value>
    37. </property>
    38. </configuration>

    修改 workers 文件,将文件内容修改为:

    1. master
    2. slave1
    3. slave2

    /hadoop/sbin路径下: cd /usr/local/hadoop/sbin。 将start-dfs.shstop-dfs.sh两个文件顶部添加以下参数

    1. #!/usr/bin/env bash
    2. HDFS_DATANODE_USER=root
    3. HADOOP_SECURE_DN_USER=hdfs
    4. HDFS_NAMENODE_USER=root
    5. HDFS_SECONDARYNAMENODE_USER=root

    还有,start-yarn.shstop-yarn.sh顶部也需添加以下:

    1. #!/usr/bin/env bash
    2. YARN_RESOURCEMANAGER_USER=root
    3. HADOOP_SECURE_DN_USER=yarn
    4. YARN_NODEMANAGER_USER=root

    将hadoop 文件夹发送至另外两台机:

    1. scp -r /usr/local/hadoop/ slave1:/usr/local/
    2. scp -r /usr/local/hadoop/ slave2:/usr/local/

    执行以下语句前检查zookeeper是否启动,我因为未启动zookeeper重复了很多次

    第一次需要单个启动,后续安装成功后可以使用 start-all.sh 启动master、slave1、slave2 三台机的 journalnode

    1. #master、slave1、slave2(若集群搭建成功的话,在master启动就可以了)
    2. hadoop-daemons.sh start journalnode

    格式化namenode1并启动

    1. #master
    2. hdfs namenode -format
    3. hadoop-daemon.sh start namenode

    同步namenode2并启动

    1. #slave1
    2. hdfs namenode -bootstrapStandby
    3. hadoop-daemon.sh start namenode

    同步打印:

    初始化HA在zookeeper中的状态,并在各个 namenode 节点上启动 DFSZK Failover Controller

    1. #master
    2. hdfs zkfc -formatZK
    3. #master、slave1
    4. hadoop-daemon.sh start zkfc

    master: slave1: 启动所有的datanode

    1. #master
    2. hadoop-daemons.sh start datanode

    若各个服务器进程都有 DataNode ,代表启动成功。

    启动yarn集群

    1. #master
    2. start-yarn.sh

    master: 启动后 slave2 会生成一个 ResourceManager 进程:

    至此 Hadoop 高可用搭建成功!查看各服务器进程: master: slave1: slave2:

    测试 Hadoop 高可用

    测试 hdfs 失败故障转移 获取 serviceId 的状态

    hdfs haadmin -getServiceState <serviceId>

    本关卡使用的 serviceId 为 nn1和 nn2:

    1. hdfs haadmin -getServiceState nn1
    2. hdfs haadmin -getServiceState nn2

    强制转换切换active和standby

    hdfs haadmin -transitionToStandby --forcemanual <serviceId>

    nn1 将 active 状态切换为 standby 状态: 查看状态: nn2 将 active 状态切换为 standby 状态: 查看状态:

    测试 yarn 失败故障转移 获取 serviceId 的状态:

    yarn rmadmin -getServiceState <serviceId>

    本关卡使用的 serviceId 为 rm1和 rm2:

    1. yarn rmadmin -getServiceState rm1
    2. yarn rmadmin -getServiceState rm2

    kill杀死Active状态的resourcemanager

    kill -9 进程号
    进程号可以通过 jps 命令查看,并不是唯一,需要根据自身情况去kill掉。
    

    查看 rm2 是否正常切换 Active:

    yarn rmadmin -getServiceState rm2

  • 相关阅读:
    Vmware安装Kali
    人体呼吸存在传感器成品,毫米波雷达探测感知技术,引领智能家居新潮流
    WebRTC 系列(四、多人通话,H5、Android、iOS)
    每日练习------随机产生一个1-100之间的整数,看能几次猜中。要求:猜的次数不能超过7次,每次猜完之后都要提示“大了”或者“小了”。
    fepk文件格式说明
    OpenCascade模型导入与导出及Shap的读写
    怎么用Java的代码制作简单的王者荣耀
    redis漏洞利用总结
    学习-Java循环while之求非负数之和
    三、appender分析
  • 原文地址:https://blog.csdn.net/qq_61604164/article/details/127771102