前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hadoop-HA高可用搭建

Hadoop-HA高可用搭建

作者头像
可爱见见
发布2019-09-09 16:01:35
4100
发布2019-09-09 16:01:35
举报
文章被收录于专栏:卡尼慕

这里就直接搭建了,原理请参照上一篇。

1

1、三台虚拟机(最少)。克隆三台,请见:克隆虚拟机

2、hosts文件要配置好,三台都可以相互通过主机名ping通,三台虚拟机都要配置!如下:

代码语言:javascript
复制
[songjian@songjian-02 ~]$ cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6


192.168.6.129 songjian-01.com
192.168.6.130 songjian-02.com
192.168.6.131 songjian-03.com

3、关闭防火墙!

代码语言:javascript
复制
[songjian@songjian-02 ~]$server iptables stop

[songjian@songjian-02 ~]$chkconfig iptables off

4、免密钥登录,详情请看前面SSH免密钥:配置SSH免密登入

5、同步时间,不然mapreduce会有问题。

2

1、zookeeper。配置很简单,就两步。

首先打开conf下的zoo.cfg文件,如图:

然后,在dataDir目录下创建一个文本myid,写好对应的server和机器号,这里注意要一一对应,顺序不能错!

2、接着就可以配置集群了。

首先在hadoop-env.shmapred-env.sh还有yarn-env.sh中写上你的jdk路径(有可能这条属性被注释掉了,记得解开。

查看java_home:

代码语言:javascript
复制
[songjian@songjian-02 ~]$ echo $JAVA_HOME
/opt/modules/jdk1.8.0_151

接下来是配置文件。

core-site.xml

代码语言:javascript
复制
<configuration>
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://ns1</value>
</property>
<property>
    <name>hadoop.tmp.dir</name>
    <value>/opt/modules/App/hadoop-2.5.0/data/tmp</value>
</property>
<property>
    <name>hadoop.http.staticuser.user</name>
    <value>beifeng</value>
</property>
<property>
    <name>ha.zookeeper.quorum</name>
    <value>bigdata-01:2181,bigdata-02:2181,bigdata-03:2181</value>
</property>
</configuration>

hdfs-site.xml

代码语言:javascript
复制
<configuration>
<property>
    <name>dfs.replication</name>
    <value>3</value>
</property>
property>
    <name>dfs.permissions.enabled</name>
    <value>false</value>
</property>
<property>
    <name>dfs.nameservices</name>
    <value>ns1</value>
</property>
<property>
    <name>dfs.blocksize</name>
    <value>134217728</value>
</property>
<property>
    <name>dfs.ha.namenodes.ns1</name>
    <value>nn1,nn2</value>
</property>
<!-- nn1的RPC通信地址,nn1所在地址  -->
<property>
    <name>dfs.namenode.rpc-address.ns1.nn1</name>
    <value>bigdata-01:8020</value>
</property>
<!-- nn1的http通信地址,外部访问地址 -->
<property>
    <name>dfs.namenode.http-address.ns1.nn1</name>
    <value>bigdata-01:50070</value>
</property>
<!-- nn2的RPC通信地址,nn2所在地址 -->
<property>
    <name>dfs.namenode.rpc-address.ns1.nn2</name>
    <value>bigdata-02:8020</value>
</property>
<!-- nn2的http通信地址,外部访问地址 -->
<property>
    <name>dfs.namenode.http-address.ns1.nn2</name>
    <value>bigdata-02:50070</value>
</property>
<!-- 指定NameNode的元数据在JournalNode日志上的存放位置(一般和zookeeper部署在一起) -->
<property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://bigdata-01:8485;bigdata-02:8485;bigdata-03:8485/ns1</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
    <name>dfs.journalnode.edits.dir</name>
    <value>/opt/modules/App/hadoop-2.5.0/data/journal</value>
</property>
<!--客户端通过代理访问namenode,访问文件系统,HDFS 客户端与Active 节点通信的Java 类,使用其确定Active 节点是否活跃  -->
<property>
    <name>dfs.client.failover.proxy.provider.ns1</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!--这是配置自动切换的方法,有多种使用方法,具体可以看官网,在文末会给地址,这里是远程登录杀死的方法  -->
<property>
    <name>dfs.ha.fencing.methods</name>
    <value>sshfence</value>     ----这个参数的值可以有多种,你也可以换成shell(/bin/true)试试,也是可以的,这个脚本do nothing 返回0
</property>
<!-- 这个是使用sshfence隔离机制时才需要配置ssh免登陆 -->
<property>
    <name>dfs.ha.fencing.ssh.private-key-files</name>
    <value>/home/beifeng/.ssh/id_rsa</value>
</property>
<!-- 配置sshfence隔离机制超时时间,这个属性同上,如果你是用脚本的方法切换,这个应该是可以不配置的 -->
<property>
    <name>dfs.ha.fencing.ssh.connect-timeout</name>
    <value>30000</value>
</property>
<!-- 这个是开启自动故障转移,如果你没有自动故障转移,这个可以先不配 -->
<property>
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
</property>
</configuration>

mapred-site.xml

代码语言:javascript
复制
<configuration>
<property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
</property>
<property>
    <name>mapreduce.jobhistory.address</name>
    <value>bigdata-01:10020</value>
</property>
<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>bigdata-01:19888</value>
</property>
</configuration>

yarn-site.xml

代码语言:javascript
复制
<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>bigdata-03</value>
    </property>
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
        <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>106800</value>
    </property>
</configuration>

然后在slave里面写下自己的datanode的节点名字。

代码语言:javascript
复制
[songjian@songjian-02 ~]$ hadoop-2.5.0-cdh5.3.6]$ cat etc/hadoop/slaves 
songjian-01.com
songjian-02.com
songjian-03.com

只要配置一台,配置完了,把配置分发给其他机器。提醒下,你发送前可以把hadoop中的share/doc这个目录下的东西删掉,因为是些帮助文档,太大了。代码如下。

代码语言:javascript
复制
[songjian@songjian-02 ~]$ rm -rf share/doc

[songjian@songjian-02 ~]$scp -r hadoop2.5.0/ bigdata-02:/opt/modules/

[songjian@songjian-02 ~]$scp -r hadoop2.5.0/ bigdata-03:/opt/modules/

3

1、启动zookeeper。

代码语言:javascript
复制
[songjian@songjian-02 ~]$ bin/zkServer.sh start

2、启动三台journalnode。

代码语言:javascript
复制
[songjian@songjian-02 ~]$ sbin/hadoop-deamon.sh start journalnode

3、操作namenode。注意:只要格式化一台,另一台同步,两台都格式化,你就做错了!

代码语言:javascript
复制
格式化第一台:bin/hdfs namenode -format
启动刚格式化好的namenode:sbin/hadoop-deamon.sh start namenode
在第二台机器上同步namenode的数据:bin/hdfs namenode -bootstrapStandby
启动第二台的namenode:sbin/hadoop-deamon.sh start namenode

4、查看web(这里应该两台都是stanby)

代码语言:javascript
复制
http://192.168.6.129:50070/dfshealth.html#tab-overview
http://192.168.6.130:50070/dfshealth.html#tab-overview

打开后可以看看如下图:

5、然后手动切换namenode状态

代码语言:javascript
复制
$ bin/hdfs haadmin -transitionToActive nn1 ##切换成active
$ bin/hdfs haadmin -transitionToStandby nn1 ##切换成standby

手动切换namenode状态(也可以在第一台切换第二台为active,毕竟一个集群)。

以上,手动故障转移配置完成!

4

这时候就应该配置自动故障转移了。

首先你要把你的集群完整的关闭,一定要全关了!

自动故障转移的配置其实要在zookeeper上生成一个节点 hadoop-ha,这个是自动生成的,通过下面的命令生成:

代码语言:javascript
复制
bin/hdfs zkfc -formatZK

然后你登录zookeeper的客户端,就是bin/zkCli.sh里面通过 “ls /” 可以看到多了个节点。如图:

代码语言:javascript
复制
[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper, yarn-leader-election, hadoop-ha, rmstore]
[zk: localhost:2181(CONNECTED) 1] 

你可以直接通过sbin/start-dfs.sh去启动hdfs,默认会启动zkfc的,其实就是一个自动故障转移的进程,会在你的namenode存在的两台机器上有这么一个节点。

等到完全启动了之后,就可以kill掉active的namenode,你就会发现stanby的机器变成active,然后再去启动那台被你kill掉的namenode(启动起来是stanby的状态),然后你再去kill掉active,stanby的机器又会变成active,到此你的HA自动故障转移已经完成了。

5

我们再来看下resourcemanager的HA。

配置文件。在yarn-site.xml文件中添加。并且将下图那个配置删除。

添加:

代码语言:javascript
复制
<!--启用resourcemanager ha-->
<!--是否开启RM ha,默认是开启的-->
<property>
   <name>yarn.resourcemanager.ha.enabled</name>
   <value>true</value>
</property>
<!--声明两台resourcemanager的地址-->
<property>
   <name>yarn.resourcemanager.cluster-id</name>
   <value>rmcluster</value>
</property>
<property>
   <name>yarn.resourcemanager.ha.rm-ids</name>
   <value>rm1,rm2</value>
</property>
<property>
   <name>yarn.resourcemanager.hostname.rm1</name>
   <value>bigdata-02</value>
</property>
<property>
   <name>yarn.resourcemanager.hostname.rm2</name>
   <value>bigdata-03</value>
</property>

<!--指定zookeeper集群的地址--> 
<property>
   <name>yarn.resourcemanager.zk-address</name>
<value>bigdata-01:2181,bigdata-02:2181,bigdata-03:2181</value>
</property>
<!--启用自动恢复,当任务进行一半,rm坏掉,就要启动自动恢复,默认是false--> 
<property>
   <name>yarn.resourcemanager.recovery.enabled</name>
   <value>true</value>
</property>

<!--指定resourcemanager的状态信息存储在zookeeper集群,默认是存放在FileSystem里面。--> 
<property>
   <name>yarn.resourcemanager.store.class</name>
   <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>

然后把这个修改好的配置文件发到其他主机上,这里注意路径不要写错了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-10-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 卡尼慕 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档