Zookeeper的搭建及Zookeeper实现Hadoop的HA

以下步骤,除非特别说明,否则在四台机器上都要单独执行一次。

1、架构角色分配

Linux001: DataNode、NodeManager、
Linux002: DataNode、NodeManager、JournalNode、QuorumPeermain
Linux003: NameNode(备)、ResourceManager(备)、ZKFC、JournalNode、QuorumPeermain
Linux004: NameNode(主)、ResourceManager(主)、ZKFC、JournalNode、QuorumPeermain

2、与Hadoop全分布搭建相同的步骤

参考:Hadoop全分布搭建

这儿的第2步即本人的上一篇博客的第2步到第5步,不用看,直接复制黏贴即可。

3、Linux004安装zookeeper(仅Linux004)

1、上传zookeeper-3.4.6.tar.gz到/opt/source目录下
 
2、解压:
   tar -zxvf zookeeper-3.4.6.tar.gz -C ../apps/ 
   
    注意:
        有时候解压后的文件属主和属组会发生变化,如果发生变化请注意修改为你想要的属主和属组
 
3、vi + /etc/profile
       export ZOOKEEPER_HOME=/opt/apps/zookeeper-3.4.6
       export PATH=$PATH:$ZOOKEEPER_HOME/bin
    source /etc/profile
 
4、cp /opt/apps/zookeeper-3.4.6/conf/zoo_sample.cfg /opt/apps/zookeeper-3.4.6/conf/zoo.cfg
    vi +12 /opt/apps/zookeeper-3.4.6/conf/zoo.cfg
        dataDir=/opt/apps/zookeeper-3.4.6/data
        行末添加:
            server.1=Linux004:2888:3888
            server.2=Linux003:2888:3888
            server.3=Linux002:2888:3888
   注意:
        dataDir属性在第12行
        server.1/server.2/server.3要与后续的myid文件中内容相对应
        2888通信端口、3888选举端口
 
5、  mkdir /opt/apps/zookeeper-3.4.6/data && cd /opt/apps/zookeeper-3.4.6/data
 
    vi /opt/apps/zookeeper-3.4.6/data/myid
        1
 
    #注意:
        不同节点的zk该数字不一样,该数字与zoo.cfg中的sever.x中的x相对应
        data目录为zookeeper数据存储目录。默认为/tmp目录
 
 
6、拷贝zookeeper安装文件到其他zookeeper节点
   scp -r /opt/apps/zookeeper-3.4.6 Linux002:/opt/apps
   scp -r /opt/apps/zookeeper-3.4.6 Linux003:/opt/apps

4、其他zk节点ZK配置(Linux002和Linux003)

1、vi + /etc/profile
    export ZOOKEEPER_HOME=/opt/apps/zookeeper-3.4.6
    export PATH=$PATH:$ZOOKEEPER_HOME/bin
 
   source /etc/profile
 
2、vi /opt/apps/zookeeper-3.4.6/data/myid
    2
 
   #Linux003修改为2,Linux002修改为3,不可颠倒,因为和zoo.cfg中的配置是相对应的

5、启动zk完成zk搭建及zk命令补充

启动:
    ./zkServer.sh start   
 
 
    #启动时所有zk节点都要执行该命令,启动完成,则zk集群搭建完毕
    #每台zk节点执行jps可以看到zk的进程QuorumPeerMain
 
 
 
 
 
补充:
 
停止zk:
    ./zkServer.sh stop #停止zk,每台都执行
查看状态:
    ./zkServer.sh status #zk有一个leader,多个follower
进入zk客户端:
    ./zkCli.sh
        查看命令帮助:
            help
        查看文件夹:
            ls path
        删除文件[夹]:
            rmr
        查看文件内容:
            get 文件名
退出客户端:
    ctrl+c
        

6、安装hadoop(仅Linux004)

1、上传hadoop-2.6.5.tar.gz安装包到Linux004机子的/opt/source目录下
 
2、解压:
    tar -zxvf hadoop-2.6.5.tar.gz ../apps/
    #注意:
        凡是解压操作一定要注意观察,解压后的文件的属主和属组是否发生变化。发生变化后一定改过来。
 
3、配置环境变量
    vi + /etc/profile    
        export HADOOP_PREFIX=/opt/apps/hadoop-2.6.5
        export PATH=$PATH:$HADOOP_PREFIX/bin
 
4、创建临时数据保存目录
    mkdir /opt/apps/hadoop-2.6.5/tmp
 
   #个人测试环境建议给777权限客避免一些问题
 
5、创建DataNode、NameNode数据保存目录
    mkdir -p /opt/apps/hadoop-2.6.5/data/dfs

7、配置hadoop-env.sh(仅Linux004)

vi +25 /opt/apps/hadoop-2.6.5/etc/hadoop/hadoop-env.sh
    export JAVA_HOME=/usr/java/jdk1.7.0_80

8、配置core-site.xml(仅Linux004)

vi /opt/apps/hadoop-2.6.5/etc/hadoop/core-site.xml
 
  <!--Yarn 需要使用 fs.defaultFS 指定NameNode URI -->
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://mycluster</value>
        </property>
    <!--hadoop数据存放目录-->
        <property>   
                <name>hadoop.tmp.dir</name>
                <value>file:///opt/apps/hadoop-2.6.5/tmp</value>
        </property>
    <!--zookeeper地址即端口-->
        <property>
                <name>ha.zookeeper.quorum</name>
                <value>Linux004:2181,Linux003:2181,Linux002:2181</value>
        </property>
       
 
注意:
    hadoop.tmp.dir:
        指定hadoop临时目录, hadoop.tmp.dir 是hadoop文件系统依赖的基础配置。很多路径都依赖它。
        如果hdfs-site.xml中不配 置namenode和datanode的存放位置,默认就放在这>个路径中。
 

9、配置hdfs-site.xml(仅Linux004)

vi /opt/apps/hadoop-2.6.5/etc/hadoop/hdfs-site.xml
 
   
 <!--NameNode数据存放目录-->
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:///opt/apps/hadoop-2.6.5/data/dfs/name</value>
    </property>
    <!--edits log 文件存放目录-->
    <property>
        <name>dfs.namenode.edits.dir</name>
        <value>${dfs.namenode.name.dir}</value>
    </property>
    <!--DataNode数据存放目录-->
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:///opt/apps/hadoop-2.6.5/data/dfs/data</value>
    </property>
    <!--文件副本数-->
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
 
<!--以下为集群配置-->
    <!--指定hdfs的nameservice为mycluster,需要和core-site.xml中的保持一致 -->
        <property>
                <name>dfs.nameservices</name>
                <value>mycluster</value>
        </property>
    <!--设置NameNode的别名 此版本最大只支持两个NameNode -->
        <property>
                <name>dfs.ha.namenodes.mycluster</name>
                <value>nn1,nn2</value>
        </property>
    <!--nn1和nn2对应的机器和端口-->
        <property>
                <name>dfs.namenode.rpc-address.mycluster.nn1</name>
                <value>Linux004:8020</value>
        </property>
        <property>
                <name>dfs.namenode.rpc-address.mycluster.nn2</name>
                <value>Linux003:8020</value>
        </property>
    <!--nn1和nn2的网页通信地址 -->
        <property>
                <name>dfs.namenode.http-address.mycluster.nn1</name>
                <value>Linux004:50070</value>
        </property>
        <property>
                <name>dfs.namenode.http-address.mycluster.nn2</name>
                <value>Linux003:50070</value>
        </property>
 
 
<!--保证数据恢复 Namenode editlog同步 -->    
        <property>
                <name>dfs.journalnode.http-address</name>
                <value>0.0.0.0:8480</value>
        </property>
        <property>
                <name>dfs.journalnode.rpc-address</name>
                <value>0.0.0.0:8485</value>
        </property>
    <!--设置JournalNode服务器地址,QuorumJournalManager 用于存储editlog -->
        <property>
                <name>dfs.namenode.shared.edits.dir</name>
                <value>qjournal://Linux004:8485;Linux003:8485;Linux002:8485/mycluster</value>
        </property>
    <!--JournalNode存放数据地址 -->
        <property>
                <name>dfs.journalnode.edits.dir</name>
                <value>/opt/apps/hadoop-2.6.5/data/dfs/jn</value>
        </property>
    <!--是否自动进行NameNode的失败迁移-->
        <property>
                <name>dfs.ha.automatic-failover.enabled</name>
                <value>true</value>
        </property>
    <!-- 配置失败自动切换实现方式 -->
        <property>
                <name>dfs.client.failover.proxy.provider.mycluster</name>
                <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
        </property>
    <!--Failover后防止停掉的Namenode启动,造成两个服务 -->
        <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_dsa</value>
        </property>
    <!--多少milliseconds 认为fencing失败 -->
        <property>
                <name>dfs.ha.fencing.ssh.connect-timeout</name>
                <value>30000</value>
        </property>
    
 
    <!--动态许可datanode连接namenode列表 -->
        <property>
                <name>dfs.hosts</name>
                <value>/opt/apps/hadoop-2.6.5/etc/hadoop/slaves</value>
        </property>
 
#NameNode/Edits Log/DataNode数据存放目录可以不配置,不配置会自动配置在core-site.xml中
    hadoop.tmp.dir属性对应的目录中

10、配置maped-site.xml(仅Linux004)

1、cp /opt/apps/hadoop-2.6.5/etc/hadoop/mapred-site.xml.template /opt/apps/hadoop-2.6.5/etc/hadoop/mapred-site.xml
 
 
 
2、vi /opt/apps/hadoop-2.6.5/etc/hadoop/mapred-site.xml
    <!--配置mapreduce运行的平台-->
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
    <!--设置mapreduce的进程所在机器及服务端口-->
        <property>
                <name>mapreduce.jobhistory.address</name>
                <value>Linux004:10020</value>
        </property>
    <!--设置mapreduce网页地址-->
        <property>
                <name>mapreduce.jobhistory.webapp.address</name>
                <value>Linux004:19888</value>
        </property>

11、配置yarn-site.xml(仅Linux004)

vi /opt/apps/hadoop-2.6.5/etc/hadoop/yarn-site.xml
    <!--配置MapReduce处理数据的方式-->
        <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
        </property>
    <!--是否启用HA-->
        <property>
            <name>yarn.resourcemanager.ha.enabled</name>
            <value>true</value>
        </property>
    <!--是否进行ResourceManager失败迁移的自动切换-->
        <property>
            <name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
            <value>true</value>
        </property>
    <!-- yarn集群名称-->
        <property>
            <name>yarn.resourcemanager.cluster-id</name>
            <value>yarn-cluster</value>
        </property>
    <!--yarn集群的主节点别名-->
        <property>
            <name>yarn.resourcemanager.ha.rm-ids</name>
            <value>rm1,rm2</value>
        </property>
    <!--ResourceManager的地址-->
        <property>
            <name>yarn.resourcemanager.hostname.rm1</name>
            <value>Linux004</value>
        </property>
        <property>
            <name>yarn.resourcemanager.hostname.rm2</name>
            <value>Linux003</value>
        </property>
    <!--zookeeper的地址-->
        <property>
            <name>yarn.resourcemanager.zk-address</name>
            <value>Linux004:2181,Linux003:2181,Linux002:2181</value>
        </property>
    <!--yarn中记录zookeeper状态的地址-->
        <property>
            <name>yarn.resourcemanager.zk.state-store.address</name>
            <value>Linux004:2181,Linux003:2181,Linux002:2181</value>
        </property>
    

12、配置slaves(仅Linux004)

vi /opt/apps/hadoop-2.6.5/etc/hadoop/slaves
 
    Linux001
    Linux002

13、将配置好的hadoop拷贝到其他节点(仅Linux004)

scp -r /opt/apps/hadoop-2.6.5 root@Linux001:/opt/apps/
 
 
scp -r /opt/apps/hadoop-2.6.5 root@Linux002:/opt/apps/
 
 
scp -r /opt/apps/hadoop-2.6.5 root@Linux003:/opt/apps/

14、加入环境变量(除Linux004外的其他节点)

环境变量:
    vi + /etc/profile
        export HADOOP_PREFIX=/opt/apps/hadoop-2.6.5
        export PATH=$PATH:$HADOOP_PREFIX/bin:$HADOOP_PREFIX/sbin
 
    source /etc/profile
 
#输入start双击tab键如果出现hadoop的相关脚本,则环境变量配置成功

15、在所有JournalNode节点启动JournalNode(除Linux001外的其他节点)

cd /opt/apps/hadoop-2.6.5/sbin && hadoop-daemon.sh start journalnode
 
 
#启动journalnode方便格式化时元数据落在journalnode上
#启动后执行jps命令会多一个JournalNode进程

16、格式化NameNode并同步元数据(仅Linux004)

说明:
    选定一台namenode节点,你选Linux003也行,进行格式化。格式化后在该机器上将NameNode元数据文件拷贝到另一台NameNode节点。
 
1、/opt/apps/hadoop-2.6.5/bin/hdfs namenode -format
 
2、scp -r /opt/apps/hadoop-2.6.5/data/dfs/name Linux003:/opt/apps/hadoop-2.6.5/data/dfs/
 
 
注意:
    格式化失败:
        先关闭集群,journalnode也关掉。
        然后删除本机上/opt/apps/hadoop-2.6.5/data/dfs和/opt/apps/hadoop-2.6.5/tmp两个文件夹
        再删除其他节点上的hadoop安装目录。
        然后重新重第13步执行起。

17、格式化Zookeeper(仅Linux004)

cd /opt/apps/hadoop-2.6.5/bin/ && hdfs zkfc -formatZK
 
#仅在集群搭建额时候需要格式化

18、启动hadoop集群

start-all.sh

19、启动备用ResourceManager节点

cd /opt/apps/hadoop-2.6.5/sbin && yarn-daemon.sh start resourcemanager
 
#备用的namenode不用手动启动,但备用的resourcemanager需要手动启动
 


##集群的监控和关闭怎么搞呢?
关闭和启动顺序相反即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二百四十九先森

你的打赏是我努力的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值