• Hadoop-HA配置详细步骤


     

    1. HA服务器配置

    对hdfs做高可用

    1.1服务器详情

    服务器:centos7

    Hadoop:2.6.5

    Jdk:1.8

    共四台服务器

    192.168.1.111 node1

    192.168.1.112 node2

    192.168.1.113 node3

    192.168.1.114 node4

    在每台服务器的/etc/hosts文件中添加上边四行内容

    服务器分配

    NN

    DN

    ZK

    ZKFC

    JN

    RM

    DM

    Node1

    1

    1

    1

    1

    Node2

    1

    1

    1

    1

    1

    1

    Node3

    1

    1

    1

    1

    Node4

    1

    1

    1

    Journalnode:需要为奇数个

    Zookeeper:需要为奇数个

    ZKFS和NN在同台服务器

    DM和DN保持一致。

    1.2配置免密登录

    • 在每台服务器分别生成各自的公钥私钥

      命令如下

      ssh-keygen –t rsa –P ‘’ –f  ~/.ssh/id_rsa

      此时查看 ~/.ssh目录下,会有两个文件,id_rsa(私钥)、id_rsa.pub(公钥)

    •  将id_rsa.pub文件内容拼接到每台服务器的~/.ssh/authorized_keys文件

      命令如下

      cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

      每台服务器都需要拼接四次,包括本节点及其它三个节点的,配置完成后,即可免密登录其它节点

    1.3Hadoop配置

    此处使用的hadoop版本为2.6.5

    1.3.1  hadoop-env.sh

    编辑/etc/hadoop/hadoop-env.sh文件

    找到JAVA_HOME配置位置,修改JAVA_HOME如下

    export JAVA_HOME= /home/java/jdk1.8.0_144

    1.3.2 hdfs-site.xml(/etc/hadoop/hdfs-site.xml)

    •  配置nameservice
    <property>
      <name>dfs.nameservices</name>
      <value>mycluster</value>
    </property>
    • 再配置所有namenode的名字 
    <property>
      <name>dfs.ha.namenodes.mycluster</name>
      <value>nn1,nn2</value>
    </property>

    注意:此处的mycluster和上边指定的服务名一致,nn1 nn2位两个namenode名称

     

    •  配置RPC协议的端口,两个namenode都要配置
    <property>
      <name>dfs.namenode.rpc-address.mycluster.nn1</name>
      <value>machine1.example.com:8020</value>
    </property>
    <property>
      <name>dfs.namenode.rpc-address.mycluster.nn2</name>
      <value>machine2.example.com:8020</value>
    </property>
    •  配置HTTP协议的端口和主机
    <property>
      <name>dfs.namenode.http-address.mycluster.nn1</name>
      <value>node1:50070</value>
    </property>
    <property>
      <name>dfs.namenode.http-address.mycluster.nn2</name>
      <value>node2:50070</value>
    </property>
    • 配置journalnode
    <!-- 配置journalnode -->
    
    <property>
      <name>dfs.namenode.shared.edits.dir</name>
      <value>qjournal://node2:8485;node3:8485;node4:8485/mycluster</value>
    </property>

    注意:此处的mycluster需要和服务名一样

    • 配置ConfiguredFailoverProxyProvider类,HDFS通过这个类来找到active的namenode
    <property>
      <name>dfs.client.failover.proxy.provider.mycluster</name>
      <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
    •  配置ssh fencing
    <property>
      <name>dfs.ha.fencing.methods</name>
      <value>sshfence</value>
    </property>
    <property>
      <name>dfs.ha.fencing.ssh.private-key-files</name>
      <value>/root/.ssh/id_rsa</value>
    </property>
    • 配置journalnode的工作目录
    <!--配置journalnode的工作目录-->
    <property>
      <name>dfs.journalnode.edits.dir</name>
      <value>/opt/journalnode/data</value>
    </property>
    • 开启自动切换(可选),手动切换也可用
    <!--开启自动切换(可选)-->
    <property>
       <name>dfs.ha.automatic-failover.enabled</name>
       <value>true</value>
     </property>

    1.3.3 core-site.xml

    •  配置namenode入口
    <!--配置namenode入口-->
    <property>
      <name>fs.defaultFS</name>
      <value>hdfs://mycluster</value>
    </property>

    注意:此处的mycluster需要和hdfs-site.xml文件中的nameservice名称一致

    •  配置zookeeper的集群,zookeeper所在的节点
    <!--配置zookeeper的集群-->
    <property>
       <name>ha.zookeeper.quorum</name>
       <value>node1:2181,node2:2181,node3:2181</value>
     </property>
    •  配置工作目录hadoop.tmp.dir  默认是在系统的临时目录下/tmp
    <!--配置hadoop的工作目录,默认在系统的临时目录下/tmp-->
    <property>
       <name>hadoop.tmp.dir </name>
       <value>/opt/hadoop2</value>
     </property> 

    1.3.4 slaves配置datanode

    node2

    node3

    node4

    不需要配master了,因为没有secondarynamenode,journalnode替代了它

     

    2启动hdfs

    • 先将zookeeper启动起来 ./zkServer.sh start
    • 必须先启动journalnode

      需要在node2、3、4启动journalnode

      命令 ./hadoop-daemon.sh start  journalnode

    • 在任意一个namenode上格式化

      在node1上格式化namenode

      ./hdfs namenode –format

      注意centos关闭防火墙一定要用systemctl stop firewalld

      格式化后,在/opt/hadoop2下就会有元数据文件了

    •  将node1上的元数据文件拷贝到node2中
      • 必须先启动node1中的namenode

          ./hadoop-daemon.sh start namenode

      • 在没有格式化namenode的节点上(node2)上执行命令

          ./hdfs namenode –bootstrapStandby

                 命令成功执行后,在/opt/hadoop2/下就会有元数据文件了

    • 格式化zk,在任意一台namenode节点上
      hdfs zkfc -formatZK
    •  停止hdfs

      ./stop-dfs.sh

      会停止除了zookeeper之外的所有进程

    •  启动hdfs

      ./start-dfs.sh

    [root@localhost sbin]# ./start-dfs.sh
    
    Starting namenodes on [node1 node2]
    
    node2: starting namenode, logging to /home/hadoop/hadoop-2.6.5/logs/hadoop-root-namenode-node2.out
    
    node1: starting namenode, logging to /home/hadoop/hadoop-2.6.5/logs/hadoop-root-namenode-node1.out
    
    node4: starting datanode, logging to /home/hadoop/hadoop-2.6.5/logs/hadoop-root-datanode-node4.out
    
    node3: starting datanode, logging to /home/hadoop/hadoop-2.6.5/logs/hadoop-root-datanode-localhost.out
    
    node2: starting datanode, logging to /home/hadoop/hadoop-2.6.5/logs/hadoop-root-datanode-node2.out
    
    Starting journal nodes [node2 node3 node4]
    
    node4: starting journalnode, logging to /home/hadoop/hadoop-2.6.5/logs/hadoop-root-journalnode-node4.out
    
    node3: starting journalnode, logging to /home/hadoop/hadoop-2.6.5/logs/hadoop-root-journalnode-localhost.out
    
    node2: starting journalnode, logging to /home/hadoop/hadoop-2.6.5/logs/hadoop-root-journalnode-node2.out
    
    Starting ZK Failover Controllers on NN hosts [node1 node2]
    
    node2: starting zkfc, logging to /home/hadoop/hadoop-2.6.5/logs/hadoop-root-zkfc-node2.out
    
    node1: starting zkfc, logging to /home/hadoop/hadoop-2.6.5/logs/hadoop-root-zkfc-node1.out
    
    [root@localhost sbin]# jps
    
    5234 Jps
    
    5188 DFSZKFailoverController
    
    3302 QuorumPeerMain
    
    4920 NameNode

     

    • 启动成功

      http://192.168.1.111:50070/

      http://192.168.1.112:50070/

    会发现有一个是active  一个是standby

    •  测试

      在hdfs新建一个路径,上传文件

      ./hdfs dfs -mkdir -p /usr/file

      ./hdfs dfs -put /home/java/jdk-8u144-linux-x64.tar.gz /usr/file/

     

    3.配置mapreduce

    3.1 mapred-site.xml

    <property>
         <name>mapreduce.framework.name</name>
         <value>yarn</value>
    </property>

    3.2 yarn-site.xml

    <!--resourcemanager在哪台服务器上-->
    <property>
             <name>yarn.resourcemanager.hostname</name>
             <value>node1</value>
    </property>
    <property>
             <name>yarn.nodemanager.aux-services</name>
             <value>mapreduce_shuffle</value>
    </property>
    <property>
             <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
             <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>

    4.全面启动

    • 需要先将hdfs停掉

      在node1上./stop-dfs.sh

    • 全面启动

      Node1上 ./start-all.sh

    jps查看进程

    [root@node1 sbin]# jps

    6977 NameNode

    7603 Jps

    3302 QuorumPeerMain

    7244 DFSZKFailoverController

    7327 ResourceManager

    启动成功。

     

  • 相关阅读:
    我们需要什么,技术还是idea
    爱上一个人,忘记一个人
    我的大学
    早上8点,轻轨抛锚时... ...
    我的秋天
    通过注册表以及文件操作的方式获取当前正在实际使用的物理网卡MAC地址
    【分享】全局字符串转换为局部变量存储防止软件被静态分析暴露敏感字符串
    正确获取硬盘序列号源码
    【转】Xvid参数详解
    VerifyFile验证文件签名
  • 原文地址:https://www.cnblogs.com/EnzoDin/p/7294719.html
Copyright © 2020-2023  润新知