• 安装 JDK 和 Zookeeper完全分布式


    Hadoop HA简介

    HDFS HA架构图如下:

    HA: High Availabilty 高可用的意思; ZK: ZooKeeper 分布式应用程序服务的组件; NN: NameNode 管理文件系统的元数据信息; DN: DataNode 存储数据的; JN: JournalNode 主要用于NN的数据共享; ZKFC: ZooKeeperFailoverControl 监控和管理NN的状态。

    HA 使用 active NN 和 standby NN两个节点解决单点问题,两个 NN 节点通过 JN 集群共享状态,通过 ZKFC 选举 active,监控 NN 的状态,实现自动备源,DN 会同时向两个 NN 节点发送心跳

    Yarn HA架构图

    ResourceManager(RM) a: 启动的时候 RM 会向 zookeeper 的目录 /hadoop-ha 写一个 lock 文件,如果成功则为 active,否则为 standby,standby RM 会一直监控lock文件是否存在,如果不存在,则尝试创建 lock 文件,争取成为active RM。 b: 会接受客户端的任务请求,接受和监控nm的资源报告,负责资源的分配和调用,并启动和监控ApplicationMaster(AM)。

    NodeManager(NM)

    a. 负责节点上资源的管理,启动 container 容器,task 任务计算,上报资源给 RM。 b. container 情况汇报给 RM。 c. task任务处理的情况汇报给 ApplicationMaster(AM)。

    ApplictionMaster(AM) a. 负责每个 appliction(job) 的 task 管理和调度,并向rm发送资源申请,资源申请到之后,向 nm 发动 launch container 指令,接口 task 的处理状态信息。

    RMstatestore a. RM 的作业信息存储在 /rmstore下,active RM 会向这个目录写一些 app 信息。 b. 当 active RM 挂掉之后,standby RM 转换为 active RM 之后,会从 /rmstore 目录下读取相应的作业信息,重新构建内存的作业信息,然后启动内部服务,开始接受 NM 的心跳,构建集群资源信息,并接受客户端的提交作业等。

    ZKFC 自动故障转移 ,作为 RM 进程的一个线程,并非独立的守护进程。

    示例集群信息

    以下表格为本教程所用示例集群节点信息:

    我们准备了三台虚拟服务器,连接方式如下:

    服务器SSH密码ip
    masterssh 172.18.0.2123123172.18.0.2
    slave1ssh 172.18.0.3123123172.18.0.3
    slave2ssh 172.18.0.4123123172.18.0.4

    第一步我们需要在 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查看 

  • 相关阅读:
    Rust之自动化测试(三): 测试组合
    20231009比赛总结
    归并排序与计数排序
    原型网络Prototypical Network的python代码逐行解释,新手小白也可学会!!-----系列8
    Vue插值表达式及常用指令
    java程序设计案例教程王希军,渣本二面阿里受挫
    python-字典(创建方式、常用的操作方式)
    24.98万起,新一代AITO问界M7值得买吗?
    【小月电子】安路国产FPGA开发板系统学习教程-LESSON6按键消抖
    数组名是什么
  • 原文地址:https://blog.csdn.net/qq_61604164/article/details/127764541