• Hadoop学习笔记05_HA


    ################# HA 即 High Available 高可用。
    # 其作用是为了减少主从结构的单点故障,而设置备用节点,既然学习了Hadoop生态圈,那么HA配置也是必须要掌握的。
    # 因为生产环境中,一定会设置HA,减少故障率。

    # 参考了好几处的教程,自己动手实践了下,成功。

    # 会有一些配置文件需要修改,如果嫌vim麻烦,可以将文件下载到windows,改好后再传回去。
    # 本次软件版本: CentOS 6.5 x64      jdk-8u161-linux-x64.tar.gz     zookeeper-3.4.5.tar.gz       hadoop-2.7.5.tar.gz

    一、集群的规划  四台VM12
    Zookeeper集群:
    192.168.112.10 master
    192.168.112.11 slave1
    192.168.112.12 slave2

    Hadoop集群:
    192.168.112.10 master NameNode1 ResourceManager1 Journalnode
    192.168.112.11 slave1 NameNode2 ResourceManager2 Journalnode
    192.168.112.12 slave2 DataNode1
    192.168.112.13 slave3 DataNode2

    二、准备工作
    1、安装JDK
    2、配置环境变量
    3、配置免密码登录
    4、配置主机名、网络、关闭防火墙 ...

    三、配置Zookeeper(在192.168.112.10 master 安装)
    在主节点(master)上配置ZooKeeper
    (*)配置/usr/local/src/zookeeper/conf/zoo.cfg文件

    dataDir=/usr/local/src/zookeeper/zkdata
    clientPort=2181
    server.1=master:2888:3888
    server.2=slave1:2888:3888
    server.3=slave2:2888:3888

    (*)在/usr/local/src/zookeeper/zkdata目录下创建一个myid的空文件

    echo 1 > myid

    (*)将配置好的zookeeper拷贝到其他节点,同时修改各自的myid文件

    scp -r /usr/local/src/zookeeper slave1:/usr/local/src
    scp -r /usr/local/src/zookeeper slave2:/usr/local/src


    四、安装Hadoop集群(在 master 上安装)
    1、修改hadoo-env.sh

    export JAVA_HOME=/usr/local/src/jdk1.8.0_161

    2、修改core-site.xml

    <configuration>
    <!-- 指定hdfs的nameservice为 names1 -->
    <property>
    <name>fs.defaultFS</name>
    <value>hdfs://names1</value>
    </property>
    <!-- 指定hadoop临时目录 -->
    <property>
    <name>hadoop.tmp.dir</name>
    <value>/usr/local/src/hadoop-2.7.5/tmp</value>
    </property>
    <!-- 指定zookeeper地址 -->
    <property>
    <name>ha.zookeeper.quorum</name>
    <value>master:2181,slave1:2181,slave2:2181</value>
    </property>
    </configuration>

    3、修改hdfs-site.xml(配置这个nameservice中有几个namenode)

    <configuration> 
    <!-- 指定hdfs的nameservice为 names1 ,需要和core-site.xml中的保持一致 -->
    <property>
    <name>dfs.nameservices</name>
    <value>names1</value>
    </property>
    
    <!-- names1下面有两个NameNode,分别是nn1,nn2 -->
    <property>
    <name>dfs.ha.namenodes.names1</name>
    <value>nn1,nn2</value>
    </property>
    
    <!-- nn1的RPC通信地址 -->
    <property>
    <name>dfs.namenode.rpc-address.names1.nn1</name>
    <value>master:9000</value>
    </property>
    <!-- nn1的http通信地址 -->
    <property>
    <name>dfs.namenode.http-address.names1.nn1</name>
    <value>master:50070</value>
    </property>
    
    <!-- nn2的RPC通信地址 -->
    <property>
    <name>dfs.namenode.rpc-address.names1.nn2</name>
    <value>slave1:9000</value>
    </property>
    <!-- nn2的http通信地址 -->
    <property>
    <name>dfs.namenode.http-address.names1.nn2</name>
    <value>slave1:50070</value>
    </property>
    
    <!-- 指定NameNode的日志在JournalNode上的存放位置 -->
    <property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://master:8485;slave1:8485;/names1</value>
    </property>
    <!-- 指定JournalNode在本地磁盘存放数据的位置 -->
    <property>
    <name>dfs.journalnode.edits.dir</name>
    <value>/usr/local/src/hadoop-2.7.5/journal</value>
    </property>
    
    <!-- 开启NameNode失败自动切换 -->
    <property>
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
    </property>
    
    <!-- 配置失败自动切换实现方式 -->
    <property>
    <name>dfs.client.failover.proxy.provider.names1</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
    
    <!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行-->
    <property>
    <name>dfs.ha.fencing.methods</name>
    <value>
    sshfence
    shell(/bin/true)
    </value>
    </property>
    
    <!-- 使用sshfence隔离机制时需要ssh免登陆 -->
    <property>
    <name>dfs.ha.fencing.ssh.private-key-files</name>
    <value>/root/.ssh/id_rsa</value>
    </property>
    
    <!-- 配置sshfence隔离机制超时时间 -->
    <property>
    <name>dfs.ha.fencing.ssh.connect-timeout</name>
    <value>30000</value>
    </property>
    </configuration>
    cd /usr/local/src/hadoop-2.7.5/
    mkdir journal
    chmod 777 journal

    4、修改mapred-site.xml

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

    5、修改yarn-site.xml

    <configuration>
    <!-- 开启RM高可靠 -->
    <property>
    <name>yarn.resourcemanager.ha.enabled</name>
    <value>true</value>
    </property>
    
    <!-- 指定RM的cluster,不能与nameservices相同 id -->
    <property>
    <name>yarn.resourcemanager.cluster-id</name>
    <value>yrc</value>
    </property>
    
    <!-- 指定RM的名字 -->
    <property>
    <name>yarn.resourcemanager.ha.rm-ids</name>
    <value>rm1,rm2</value>
    </property>
    
    <!-- 分别指定RM的地址 -->
    <property>
    <name>yarn.resourcemanager.hostname.rm1</name>
    <value>master</value>
    </property>
    <property>
    <name>yarn.resourcemanager.hostname.rm2</name>
    <value>slave1</value>
    </property>
    
    <!-- 指定zk集群地址 -->
    <property>
    <name>yarn.resourcemanager.zk-address</name>
    <value>master:2181,slave1:2181,slave2:2181</value>
    </property>
    
    <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
    </property>
    </configuration>

    6、修改slaves

    bigdata14
    bigdata15

    7、将配置好的hadoop拷贝到其他节点

        scp -r /usr/local/src/hadoop-2.7.5/ root@slave1:/usr/local/src/
        scp -r /usr/local/src/hadoop-2.7.5/ root@slave2:/usr/local/src/
        scp -r /usr/local/src/hadoop-2.7.5/ root@slave3:/usr/local/src/


    五、启动Zookeeper集群

    每台上面 zkServer.sh start

    六、在master和slave1上启动journalnode

    hadoop-daemon.sh start journalnode

    七、格式化HDFS(在 master 上执行)
    1. hdfs namenode -format
    2. 将/usr/local/src/hadoop-2.7.5/tmp拷贝到slave1的/usr/local/src/hadoop-2.7.5/tmp下
    3. 格式化zookeeper

    hdfs zkfc -formatZK
    # 日志:18/04/11 22:34:33 INFO ha.ActiveStandbyElector: Successfully created /hadoop-ha/names1 in ZK.


    八、在master上启动Hadoop集群

    start-all.sh

    # 日志:
    Starting namenodes on [master slave1]
    slave1: starting namenode, logging to /usr/local/src/hadoop-2.7.5/logs/hadoop-root-namenode-slave1.out
    master: starting namenode, logging to /usr/local/src/hadoop-2.7.5/logs/hadoop-root-namenode-master.out
    slave3: starting datanode, logging to /usr/local/src/hadoop-2.7.5/logs/hadoop-root-datanode-slave3.out
    slave2: starting datanode, logging to /usr/local/src/hadoop-2.7.5/logs/hadoop-root-datanode-slave2.out


    slave1上的ResourceManager需要单独启动

    yarn-daemon.sh start resourcemanager

    九、验证与检查
    jps查看每台的进程:(这里没显示Jps进程)

    master:
        3745 QuorumPeerMain
        3812 JournalNode
        4484 ResourceManager
        4070 NameNode
        4377 DFSZKFailoverController
    slave1:
        3809 ResourceManager
        3602 NameNode
        3522 JournalNode
        3715 DFSZKFailoverController
        3455 QuorumPeerMain
    slave2:
        19316 NodeManager
        19207 DataNode
        19118 QuorumPeerMain
    slave3:
        3530 DataNode
        3630 NodeManager

    分别访问:http://master:50070http://slave1:50070 可以看到一个是active, 另一个是standby 而Namespace均显示为names1

    分别访问:http://master:8088 http://slave1:8088 其中slave1将自动跳转到master,注意看浏览器URL的变化。Nodes中可以看到DataNode

    模拟宕机:master 上执行 kill -9 4070 后,立刻刷新http://slave1:50070 会发现变在了active
    然后再重新启动宕掉的master进程: sbin/hadoop-daemon.sh start namenode 启动成功后,master会变为standby状态。

    十、停止服务
    好了,我要关掉VM了,所以要先停掉这些服务。
    master上 stop-all.sh
    slave1上 stop-all.sh 因为刚才有个RM是单独启动的,所以也需要单独来停止。
    在每台zk上zkServer.sh stop

  • 相关阅读:
    Daemon Tools 4.x 或"SPTD.SYS"导致Windows不能启动的问题的解决方案
    Oracle for Windows 相关下载地址
    Winsock编程入门 4.面向连接的通讯
    MD5 Hashing in Java,Written by dimport
    登记照的尺寸
    使用FileUpload组件上传文件
    两台winXP电脑不能互相访问共享文件夹故障的最终解决方法
    常用序列号
    万事皆有因
    利用注册表检测IIS是否安装
  • 原文地址:https://www.cnblogs.com/frx9527/p/hadoop05.html
Copyright © 2020-2023  润新知