Hadoop HA + HBase环境搭建(一)————zookeeper和hadoop环境搭建

  • 版本信息:

  Hadoop 2.6.3

  HBase 1.0.3

  JDK  1.8

  Zookeeper 3.4.9

  • 集群信息:

  RDFMaster  192.168.0.41  (Hadoop主节点,zk节点,HBase主节点)

  RDFSlave01  192.168.0.42  (Hadoop备份主节点,从节点,zk节点,HBase的RegionServer)

  RDFSlave02  192.168.0.43  (从节点,zk节点,HBase的RegionServer)

  RDFSlave03  192.168.0.44  (从节点,zk节点,HBase的RegionServer)

  RDFSlave04  192.168.0.45  (从节点,zk节点,HBase的RegionServer)

  注解:由于环境资源有限,正常情况下Hadoop备份主节点应该是一台单独的机器比较好

  • ssh和jdk的安装:

  参考以前的一篇文章即可,没有多大的改变

  http://www.cnblogs.com/ocean7code/p/5734289.html

  • Zookeeper环境搭建

  修改配置文件zoo.cfg

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=/home/develop/yun/workspace/zk/data
dataLogDir=/home/develop/yun/workspace/zk/datalog 
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
server.1=RDFMaster:2888:3888
server.2=RDFSlave01:2888:3888
server.3=RDFSlave02:2888:3888
server.4=RDFSlave03:2888:3888
server.4=RDFSlave04:2888:3888

  配置文件中设置了两个路径,分别是dataDirdataLogDir

  在每个节点上,都要创建对应的文件夹,并且在文件夹中创建myid文件,文件内容上写本机在节点上的编号,例如:RDFMastermyid内容就是1

  启动Zookeeper:在每个节点上都执行如下操作:

sh zkServer.sh start

  使用jps指令可以查看线程是否启动,或者使用 sh zkServer.sh status 查看当前节点的状态

  • Hadoop环境搭建

  1.修改 core-site.xml

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://ns</value>
    </property>
    <property>
        <name>io.file.buffer.size</name>
        <value>131072</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/home/develop/yun/workspace/hadoop/tmp</value>
    </property>
    <property>
      <name>ha.zookeeper.quorum</name>
      <value>RDFMaster:2181,RDFSlave01:2181,RDFSlave02:2181,RDFSlave03:2181,RDFSlave04:2181</value>
    </property>
</configuration>

  解释:ns表示的是一个主节点的集合名称,在hdfs-site.xml中的配置会详细介绍这个集群的内容

  修改 hadoop-env.sh  

#这个是你的JDK路径,别设置错了,整个文件只需要改这个地方
export JAVA_HOME=/usr/local/jdk/jdk1.8.0_101

  解释:这个只需要修改JDK路径就可以了

  2.修改 hdfs-site.xml

<configuration>
    <!--指定hdfs的nameservice为ns,需要和core-site.xml中的保持一致 -->    
    <property>    
        <name>dfs.nameservices</name>    
        <value>ns</value>    
    </property>  
    <!-- ns下面有两个NameNode,分别是nn1,nn2 -->
    <property>
       <name>dfs.ha.namenodes.ns</name>
       <value>nn1,nn2</value>
    </property>
    <!-- nn1的RPC通信地址 -->
    <property>
       <name>dfs.namenode.rpc-address.ns.nn1</name>
       <value>RDFMaster:9000</value>
    </property>
    <!-- nn1的http通信地址 -->
    <property>
        <name>dfs.namenode.http-address.ns.nn1</name>
        <value>RDFMaster:50070</value>
    </property>
    <!-- nn2的RPC通信地址 -->
    <property>
        <name>dfs.namenode.rpc-address.ns.nn2</name>
        <value>RDFSlave01:9000</value>
    </property>
    <!-- nn2的http通信地址 -->
    <property>
        <name>dfs.namenode.http-address.ns.nn2</name>
        <value>RDFSlave01:50070</value>
    </property>
    <!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
    <property>
         <name>dfs.namenode.shared.edits.dir</name>
         <value>qjournal://RDFMaster:8485;RDFSlave01:8485;RDFSlave02:8485;RDFSlave03:8485;RDFSlave04:8485/ns</value>
    </property>
    <!-- 指定JournalNode在本地磁盘存放数据的位置 -->
    <property>
          <name>dfs.journalnode.edits.dir</name>
          <value>/home/develop/yun/hadoop-2.6.4/journal</value>
    </property>
    <!-- 开启NameNode故障时自动切换 -->
    <property>
          <name>dfs.ha.automatic-failover.enabled.ns</name>
          <value>true</value>
    </property>
    <!-- 配置失败自动切换实现方式 -->
    <property>
            <name>dfs.client.failover.proxy.provider.ns</name>
            <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
    <!-- 配置隔离机制 -->
    <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>                        
    <property>    
        <name>dfs.namenode.name.dir</name>    
        <value>file:///home/develop/yun/workspace/hadoop/hdfs/name</value>    
    </property>    
    <property>    
        <name>dfs.datanode.data.dir</name>    
        <value>file:///home/develop/yun/workspace/hadoop/hdfs/data</value>    
    </property>    
    <property>    
       <name>dfs.replication</name>    
       <value>2</value>    
    </property>   
    <!-- 在NN和DN上开启WebHDFS (REST API)功能,不是必须 -->                                                                    
    <property>    
       <name>dfs.webhdfs.enabled</name>    
       <value>true</value>    
    </property>
</configuration>

  解释:这里配置了 dfs.ha.fencing.ssh.private-key-files 用于切换的时候使用ssh

  3.修改 mapred-site.xml

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
        <!--这个保持原样不要动,写提示是怕你乱动-->
    </property>
    <property>
        <name>mapreduce.reduce.memory.mb</name>
        <value>4096</value>
        <!--这个保持原样不要动,写提示是怕你乱动-->
    </property>
</configuration>

  4.修改 slaves 

RDFSlave01
RDFSlave02
RDFSlave03
RDFSlave04

   5.修改 yarn-env.sh

#这个是你的JDK路径,别设置错了,整个文件只需要改这个地方
export JAVA_HOME=export JAVA_HOME=/usr/local/jdk/jdk1.8.0_101

  6.修改 yarn-site.xml 

<configuration>

<!-- Site specific YARN configuration properties -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
        <!--别动-->
    </property>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>RDFSlave02</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
        <!--别动-->
    </property>    
</configuration>

  解释:这里配置的ResourceManagerRDFSlave02,所以启动集群的时候用的 start-yarn.sh 应该在RDFSlave02

  到这里配置文件就写完了,然后进行下一步操作

  7.首先启动zookeeper,命令上面已经说了

  8.启动journalnode(在hdfs-site.xml中配置了所有的节点都有journalnode,所以如下命令要在左右节点中执行)

sbin/hadoop-daemon.sh start journalnode

  解释:使用jps命令就可以看到JournalNode线程了

  9.格式化主节点(只需要在RDFMaster上执行)

hdfs namenode -format

  10.格式化ZKFC(只需要在RDFMaster上执行)

hdfs zkfc -formatZK

  11.进行NameNode信息的同步(这个要在RDFSlave01上执行,也就是做备份的主节点中)

hdfs namenode -bootstrapstandby

#验证
tmp下生成dfs

#如果执行失败(这个是因为备份主节点不能访问所有从节点导致的,我没有遇到过,这个是从别的博客看到的,放到这里,以备不时之需)
ssh-keygen -f "~/.ssh/known_hosts" -R RDFSLave01

#验证
tmp下生成dfs

  12.启动整个集群

#在RDFMaster上启动
start-dfs.sh


#在RDFSlave02上启动
start-yarn.sh

  13.启动ZookeeperFailoverController(在RDFMasterRDFSlave01上都运行一下)

hadoop-daemon.sh start zkfc

#验证
jps

#显示DFSZKFailoverController

  解释:在进行到12的时候,你会发现RDFMasterRDFSlave01都是standby状态的,执行13命令后,就会有一个变成active状态了,我在搭建环境的时候,百度到过这个问题,在这里特别说明一下

  14.到这里基本就结束了,展示一下最后的成果:

  

   

  • 总结:

   这个问题困扰很久了,HBase的备份主节点机制比较简单,很容易就弄懂了,这是第一次搭建Hadoop HA的机制,当把主节点NameNode关闭,备份主节点的NameNode状态变成active的时候,内心是很激动的,自己一个人搭建了一天,也算是有些收获了,下一篇文章会写到HBase的配置,也打算使用一下Phoneix,也会把这个内容附加上去,对于Hadoop的JournalNode和利用zookeeper实现的这种方式本人也不是很懂,只是知道利用共享的journalnode来同步信息,监控集群情况,后续了解了之后再发或者转载一下,作为笔记。

posted on 2017-05-28 11:00  钟爱Code  阅读(301)  评论(0编辑  收藏  举报

导航