文档章节

hadoop2.5.2HA高可靠性集群搭建(zookeeper3.4.6+hbase0.98.11)

小黑放大
 小黑放大
发布于 2015/03/23 11:16
字数 1700
阅读 9633
收藏 11

    在hadoop2中新的NameNode不再是只有一个,可以有多个(目前只支持2个)。每一个都有相同的职能。

    一个是active状态的,一个是standby状态的。当集群运行时,只有active状态的NameNode是正常工作的,standby状态的NameNode是处于待命状态的,时刻同步active状态NameNode的数据。一旦active状态的NameNode不能工作,通过手工或者自动切换,standby状态的NameNode就可以转变为active状态的,就可以继续工作了。这就是高可靠。

    在这里,2个NameNode的数据其实是实时共享的。新HDFS采用了一种共享机制,JournalNode集群或者NFS进行共享。NFS是操作系统层面的,JournalNode是hadoop层面的,我们这里使用JournalNode集群进行数据共享。

    这就需要使用ZooKeeper集群进行选择了。HDFS集群中的两个NameNode都在ZooKeeper中注册,当active状态的NameNode出故障时,ZooKeeper能检测到这种情况,它就会自动把standby状态的NameNode切换为active状态。


一、配置前准备

1、SSH免登陆(略)

2、文件/etc/profile

export PATH=.:$PATH
export CLASSPATH=.:$CLASSPATH

#java
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin

#zookeeper
export ZOOKEEPER_HOME=/home/mars/zookeeper
export CLASSPATH=$CLASSPATH:$ZOOKEEPER_HOME/lib
export PATH=$PATH:$ZOOKEEPER_HOME/bin

#hadoop
export HADOOP_HOME=/home/mars/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop/
export CLASSPATH=$CLASSPATH:$HADOOP_HOME/lib
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin  

#hbase
export HBASE_HOME=/home/mars/hbase
export CLASSPATH=$CLASSPATH:$HBASE_HOME/lib
export PATH=$PATH:$HADOOP_HOME/bin

配置后需要执行

source /etc/profile

才会生效

3、文件/etc/host

127.0.0.1       localhost
192.168.16.217 os1
192.168.16.218 os2
192.168.16.212 os3
192.168.16.213 os4
192.168.16.214 os5

配置后需要执行

source /etc/hosts

才会生效


二、配置详细

1、各机器职责

    机器有限,我这里选用5台机器配置,各自职责如下


进程 os1 os2 os3 os4 os5
NN NameNode 不是 不是 不是
DN DateNode
JN JournalNode 不是 不是
Zoo QuorumPeerMain 不是 不是
yarn ResourceManager 不是 不是 不是 不是

NodeManager
hbase HMaster 不是 不是 不是 不是

HRegionServer
ZKFC DFSZKFailoverController 不是 不是 不是


     配置文件一共包括6个,分别是hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml和slaves。

2、文件hadoop-env.sh

修改一行配置

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64


3、文件core-site.xml

<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://whcx</value>
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>/home/mars/hadoop/tmp</value>
        </property>
        <property>
                <name>ha.zookeeper.quorum</name>
                <value>os1:2181,os2:2181,os3:2181</value>
        </property>
</configuration>


4、文件hdfs-site.xml

<configuration>
    <property>
        <name>dfs.name.dir</name>
        <value>/home/mars/hadoop/tmp/name</value>
    </property>
    <property>
        <name>dfs.data.dir</name>
        <value>/home/mars/hadoop/tmp/data,/sas/hadoop/data</value>
        <!-- /sas/hadoop/data 这台电脑挂载了另一个盘 -->
    </property>
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <property>
        <name>dfs.nameservices</name>
        <value>whcx</value>
    </property>
    <property>
        <name>dfs.ha.namenodes.whcx</name>
        <value>os1,os2</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.whcx.os1</name>
        <value>os1:9000</value>
    </property>
    <property>
        <name>dfs.namenode.http-address.whcx.os1</name>
        <value>os1:50070</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.whcx.os2</name>
        <value>os2:9000</value>
    </property>
    <property>
        <name>dfs.namenode.http-address.whcx.os2</name>
        <value>os2:50070</value>
    </property>
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://os1:8485;os2:8485;os3:8485/whcx</value>
    </property>
         <property>
        <name>dfs.ha.automatic-failover.enabled.whcx</name>
        <value>true</value>
    </property>
    <property>
        <name>dfs.client.failover.proxy.provider.whcx</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/home/mars/hadoop/tmp/journal</value>
    </property>
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>sshfence</value>
    </property>
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/home/mars/.ssh/id_rsa</value>
    </property>
</configuration>


5、mapred-site.xml

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


6、yarn-site.xml

<configuration>
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>os1</value>
                <!-- resourcemanager在os1上 -->
        </property>
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
</configuration>


7、slaves

os1
os2
os3
os4
os5


8、zookeeper配置

zookeeper中/conf/zoo.cnf

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/mars/zookeeper/data
clientPort=2181
server.1=os1:2888:3888
server.2=os2:2888:3888
server.3=os3:2888:3888

zookeeper中新建data目录,在data目录下新建文件myid

和zoo.cnf中的配置保持一致,os1中的myid编辑为1,os2中的myid编辑为2,os3中的myid编辑为3


9、hbase配置

文件hbase-site.xml

<configuration>
        <property>
                <name>hbase.rootdir</name>
                <value>hdfs://whcx/hbase</value><!--这里必须跟core-site.xml中的配置一样-->
        </property>
        <!-- 开启分布式模式 -->
        <property>
                <name>hbase.cluster.distributed</name>
                <value>true</value>
        </property>
        <!--    这里是对的,只配置端口,为了配置多个HMaster -->
        <property>
                <name>hbase.master</name>
                <value>os2:60000</value>
        </property>

    <property>
                <name>hbase.tmp.dir</name>
                <value>/home/mars/hbase/tmp</value>
    </property>
        <!-- Hbase的外置zk集群时,使用下面的zk端口 -->
    <property>
                <name>hbase.zookeeper.quorum</name>
                <value>os1:2181,os2:2181,os3:2181</value>
    </property>
</configuration>


三、启动过程

1、启动Zookeeper集群

分别在os1、os2、os3上执行

zkServer.sh start

然后执行

zkServer.sh status

查看是否启动,确保启动后执行后面的步骤

三个节点都启动后,执行

zkCli.sh

然后执行

ls /

查看Zookeeper集群中是否有HA节点


2、格式化Zookeeper集群,目的是在Zookeeper集群上建立HA的相应节点

在os1上执行

hdfs zkfc –formatZK

(注意,这条命令最好手动输入,直接copy执行有可能会有问题)

格式化后验证,执行

zkCli.sh

在执行

ls /

会出现下图中红色部分

则表示格式化成功

ls /hadoop-ha

会出现我们配置的HA集群名称


3、启动Journal集群

分别在os1、os2、os3上执行

hadoop-daemon.sh start journalnode


4、格式化集群上的一个NameNode

os1os2上任选一个即可,这里我是在os1

hdfs namenode -format -clusterId ss


5、启动集群中步骤4中的NameNode

启动os1上的NameNode

hadoop-daemon.sh start namenode


6、把NameNode的数据同步到另一个NameNode上

把NameNode的数据同步到os2上

hdfs namenode –bootstrapStandby

这条命令依旧需要手动敲


同步数据还有另一种方法

直接copy数据到os2上

scp -r /home/mars/hadoop/tmp mars@os2:/home/mars/hadoop/tmp

如果第一种方法同步失败可以采用第二种同步方法


7、启动另个一NameNode

在os2上执行

hadoop-daemon.sh start namenode


8、启动所有的DataNode

hadoop-daemons.sh start datanode


9、启动Yarn

start-yarn.sh


10、启动Hbase

start-hbase.sh


11、启动ZKFC

分别在os1、os2上执行

hadoop-daemon.sh start zkfc



至此配置成功


结束语

由于是测试环境,且机器有限,每个机器上职责重,如果是在实际生产中,个人认为,作为任务的分发分配,应该给ResourceManager分配一台机器,这台机器只仅仅只运行ResourceManager,journal集群也该分配三台机器来共享元数据。我这里的主节点同时也是从节点,实际生产中不会这么做。


© 著作权归作者所有

共有 人打赏支持
下一篇: Quartz定时
小黑放大
粉丝 4
博文 20
码字总数 13257
作品 0
武汉
程序员
私信 提问
加载中

评论(5)

宋屠夫
宋屠夫
我的hadoop-ha集群可以起来,可以说hbase集群起不来
宋屠夫
宋屠夫
作者,我想问,你的hbase的配置问题,你配置hbase.rootdir是whcx,我配置是masters,我在core-site.xml配置的也是masters,可以hbase起不来,老是报找不masters地址!这是怎么回事
小黑放大
小黑放大

引用来自“SorosCM”的评论

说好的Hbase呢?。。。
hbase的ha没做过,这里有篇不错的文章讲到过,有兴趣可以看看 http://mp.weixin.qq.com/s?__biz=MzAxMzE4MDI0NQ==&mid=400354264&idx=1&sn=4e7061cdae1e7692a1968730157222dc&scene=4#wechat_redirect
空云万里晴
空云万里晴
说好的Hbase呢?。。。
秀美butyshow
秀美butyshow
79
Apache HBase 2.1.0 发布,分布式数据库

Apache HBase 2.1.0 发布了,HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用 HBase 技术可在廉价 PC Server 上搭建起大规模结构化存储集群。 HB...

h4cd
07/23
0
0
Hadoop集群部署模型纵览3

在前两篇文章中,我们介绍了Hadoop集群部署的3个方式,即《存储/计算绑定和单一计算的Hadoop集群》,《存储/计算分离的Hadoop集群部署》。本文我们着重讲解最后一种方式,即构建自定义的Had...

vBigData
2013/10/22
0
0
rocketmq源码解析之上下文介绍

说在前面 从今天开始对rocket-mq源码进行解析,版本4.3.0。 rocketmq、kafka、activemq等的比较这里就不介绍了,rocketmq官方文档介绍的很详细。 本人对rocketmq感兴趣的想深入研究下源码,此...

天河2018
10/25
0
0
Apache HBase 1.2.1 发布,分布式数据库

Apache HBase 1.2.1 HBase 发布了,HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。 ...

oschina
2016/04/12
3.6K
0
Apache HBase 2.0.0-alpha-2 发布,分布式数据库

HBase的团队很高兴地宣布Apache HBase 2.0.0-alpha-2 发布了。HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起...

两味真火
2017/08/22
1K
3

没有更多内容

加载失败,请刷新页面

加载更多

让天下没有难用的搜索:阿里搜索如何成长为贴心“暖男”?

摘要: 阿里搜索技术体系演进至今天,基本形成了由offline、nearline、online三层体系,分工协作,保证电商平台上,既能适应日常平稳流量下稳定有效的个性化搜索及推荐,也能够去满足电商平台...

阿里云官方博客
25分钟前
5
0
(一)spring cloud互联网分布式微服务云平台规划分析--spring cloud平台整体规划

1. 导语 近期公司孵化了一个互联网产品,随着业务发展,产品运营后用户数据量(过亿)、业务数据量(过100亿)较大,技术团队配合产品、运营快速定制化开发, 还要考虑产品涉及的资金安全、消...

明理萝
26分钟前
1
1
linux 下对于jvm的监测

在看阿里巴巴开源项目的时候,发现了alibaba/arthas ,之前出现会员卡的时候,需要只能去看日志。但是日志又不能有效的知道当时的问题情况。一种方法就是去监测出现问题的情况下,去查看jvm...

miaojiangmin
34分钟前
1
0
大数据就业前景分析的太到位了,想学习大数据的可以看看

大数据广泛应用于电网运行、经营管理及优质服务等各大领域,并正在改变着各行各业,也引领了大数据人才的变革。大数据专业就业前景怎么样?这对于在就业迷途中的我们是一个很重要的信息。 随...

董黎明
今天
3
0
如何利用Photoshop进行快速切图

在UI设计中我们常常使用Ai来进行矢量图的绘制,然后导入Ps中进行设计、排版和导出。 在以前的版本中,切图一直是个很麻烦的事情,要么依托于脚本,要么手动一张张导出,很不方便,这种窘况在...

mo311
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部