设为首页 加入收藏

TOP

Zookeeper的搭建及Zookeeper实现Hadoop的HA
2019-05-07 12:38:28 】 浏览:44
Tags:Zookeeper 搭建 实现 Hadoop

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

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 zookeeper-3.4.6.tar.gz -C ../apps/
 
  注意:
    有时候解压后的文件属主和属组会发生变化,如果发生变化请注意修改为你想要的属主和属组

3、vi + /etc/profile
   export ZOOKEEPER_HOME=/opt/apps/zookeeper-3.4.6
   export PATH=$PATH:$JAVA_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 zoo.cfg
    dataDir=/opt/apps/zookeeper-3.4.6/tmp
    行末添加:
      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
  touch myid
  vi /opt/apps/zookeeper-3.4.6/data/myid
    1

  #注意:
    不同节点的zk该数字不一样,该数字与zoo.cfg中的sever.x中的x相对应
    data目录为zookeeper数据存储目录。默认为/tmp目录

7、vi + /etc/profile
  export ZOOKEEPER_HOME=/opt/apps/zookeeper-3.4.6
  export PATH=$PATH:$ZOOKEEPER_HOME/bin

 source /etc/profile

8、拷贝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需要手动启动


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

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇hadoop主要类介绍-开始篇 下一篇Hadoop之Secondary NameNode

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目