Hadoop Ha 主备自动切换

为什么使用Hadoop Ha 集群:
hadoop集群分为namenode、resourcemanager和datenode,namenode为主节点,datenode为数据节点,namenode、resourcemanager一般是单点,如果namenode、resourcemanager出现故障则hadoop集群不能正常使用,只能等namenode、resourcemanager修复后才能正常工作。本章搭建namenode、resourcemanager的高可用。

简单介绍工作原理:


Hadoop Ha

hadoop2.0的HA 机制有两个namenode,一个是active namenode,状态是active;另外一个是standby namenode,状态是standby。两者的状态是可以切换的,但不能同时两个都是active状态,最多只有1个是active状态。只有active namenode提供对外的服务,standby namenode是不对外服务的。active namenode和standby namenode之间通过NFS或者JN(journalnode,QJM方式)来同步数据。
active namenode会把最近的操作记录写到本地的一个edits文件中(edits file),并传输到NFS或者JN中。standby namenode定期的检查,从NFS或者JN把最近的edit文件读过来,然后把edits文件和fsimage文件合并成一个新的fsimage,合并完成之后会通知active namenode获取这个新fsimage。active namenode获得这个新的fsimage文件之后,替换原来旧的fsimage文件。
这样,保持了active namenode和standby namenode的数据的实时同步,standby namenode可以随时切换成active namenode(譬如active namenode挂了)。而且还有一个原来hadoop1.0的secondarynamenode,checkpointnode,buckcupnode的功能:合并edits文件和fsimage文件,使fsimage文件一直保持更新。所以启动了hadoop2.0的HA机制之后,secondarynamenode,checkpointnode,buckcupnode这些都不需要了。

详细介绍参考:http://blog.51cto.com/sstudent/1381607

话不多说,开始环境介绍:

系统版本:CentOS Linux release 7.3.1611 (Core)
内核版本:Linux master 3.10.0-514.el7.x86_64 #1 SMP Tue Nov 22 16:42:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
cpu:4核
内存8g
jdk:
java version "1.8.0_65"
Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)
zookeepeer版本:zookeeper-3.4.9

ip node 组件
172.16.100.93 master DFSZKFailoverController、NameNode、 ResourceManager jdk
172.16.100.94 node1 DataNode、JournalNode、NodeManager jdk、zookeeper
172.16.100.95 node2 DataNode、JournalNode、NodeManager jdk、zookeeper
172.16.101.50 node3 DFSZKFailoverController、JournalNode、NameNode jdk、zookeeper

将以下放到各个机器的/etc/hosts文件中

172.16.100.93   master
172.16.100.94   node1
172.16.100.95   node2
172.16.101.50   node3

node1、node2、node3 操作
本次是将zookeeper安装在root用户,做上免密登录
zookeeper 安装:

#cd /usr/local/src
#wget http://archive.apache.org/dist/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz
#tar zxvf zookeeper-3.4.9.tar.gz
#mv zookeeper-3.4.9 ../zookeeper
#cd ../zookeeper/conf
#cp zoo_sample.cfg zoo.cfg
#vim zoo.cfg  (添加以下配置文件)

dataDir=/usr/local/zookeeper/data/
clientPort=2181
server.1=172.16.100.94:2888:3888
server.2=172.16.100.95:2888:3888
server.3=172.16.101.50:2888:3888

#cd /usr/local/zookeeper/data
#echo "1" > myid (第一台为1、第二台为2、第三台为3)

配置完后启动zookeeper(三台都启动)

#cd //usr/local/zookeeper/bin
#./zkServer.sh start 
#./zkServer.sh status (若一个为leader,两个follower为正常)

hadoop安装

创建hadoop 用户,使用hadoop用户创建master到node节点登录免密,node3到各个节点免密

#useradd -d /usr/hadoop hadoop
#passwd hadoop

配置免秘钥登录:

#su hadoop
$ssh-keygen -t rsa (一直回车)
$cd /usr/hadoop/.ssh/
$vim authorized_keys
$chmod 600 authorized_keys (将其他机器该路径的id_rsa.pub 文件复制到该文件即可,测试)

安装hadoop,可以先在一台上安装然后同步到另外三台机器上面,也可以都先把包下载到各个主机上面解压到相同目录然后在第一台上面修改需要修改的文件,然后将文件同步到其他的机器上面,本次使用的第二个,四台做以下操作

$cd /usr/local/src
$wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-3.0.3/hadoop-3.0.3.tar.gz
$tar zxvf hadoop-3.0.3.tar.gz
$mv hadoop-3.0.3/ /usr/hadoop/ 

在master上操作:
第一步在hadoop-env.sh和mapred-env.sh还有yarn-env.sh中写上你的jdk路径,然后将这三个文件同步到其他主机上面去
修改hadoop的环境变量

$vim ~/.bashrc  (将以下添加到该文件,每台都需要设置)

export HADOOP_HOME=/usr/hadoop
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

修改配置文件:

$cd /usr/hadoop/etc/hadoop
$vim core-site.xml
<configuration>
    <!-- 指定hdfs的nameservice为ns1 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://ns1/</value>
    </property>
    <!-- 指定hadoop临时目录 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/hadoop/namenode</value>
        </property>
    <!-- 指定zookeeper地址 -->
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>node1:2181,node2:2181,node3:2181</value>
    </property>
</configuration>

修改hdfs-site.xml

<configuration>
<property>
        <name>dfs.replication</name>
        <value>3</value>
</property>
<property>
        <name>dfs.permissions.enabled</name>
        <value>false</value>
</property>
<property>
  <name>dfs.namenode.name.dir</name>
   <value>file:///usr/hadoop/namenode</value>
 </property>
 <property>
   <name>dfs.datanode.data.dir</name>
   <value>file:///usr/hadoop/datanode</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>master:8020</value>
</property>
<!-- nn1的http通信地址,外部访问地址 -->
<property>
        <name>dfs.namenode.http-address.ns1.nn1</name>
        <value>master:50070</value>
</property>
<!-- nn2的RPC通信地址,nn2所在地址 -->
<property>
        <name>dfs.namenode.rpc-address.ns1.nn2</name>
        <value>node3:8020</value>
</property>
<!-- nn2的http通信地址,外部访问地址 -->
<property>
        <name>dfs.namenode.http-address.ns1.nn2</name>
        <value>node3:50070</value>
</property>

 <!--namenode1 RPC端口 -->

<!-- 指定NameNode的元数据在JournalNode日志上的存放位置(一般和zookeeper部署在一起) -->
<property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://node1:8485;node2:8485;node3:8485/ns1</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/usr/hadoop/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>
</property>
<!-- 这个是使用sshfence隔离机制时才需要配置ssh免登陆 -->
<property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/usr/hadoop/.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

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

修改yarn-site.xml

<configuration>

<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>

然后在该路径创建workers文件,信息如下:

node1
node2
node3

配置文件修改完毕,将以上做的修改同步到其他3台主机上面

启动过程:

1、启动zookeeper集群
在node1,node2, node3节点执行如下命令:

./bin/zkServer.sh start

2、格式化zk集群
master上执行:

/bin/hdfs zkfc -formatZK

3、启动journalnode集群
node1, node2, node2上执行:

 ./sbin/hadoop-daemon.sh  start journalnode

4、格式化namenode
master上执行:

 ./bin/hdfs namenode -format

5、启动datanode
node1, node2, node3上执行:

 ./sbin/hadoop-daemon.sh start datanode

6、启动namenode
master:

 ./sbin/hadoop-daemon.sh start namenode

node3(namenode2):

./bin/hdfs namenode -bootstrapStandby
./sbin/hadoop-daemon.sh start namenode

此时namenode1(master)和namenode2(node3)同时处于standby状态。

$hdfs haadmin -getServiceState nn1 (查看master的name状态)
$hdfs haadmin -getServiceState nn2(查看master2(node3)的name状态)

7、启动zkfc服务
在namenode1(master)和namenode2(node2)上同时执行如下命令:

./sbin/hadoop-daemon.sh  start zkfc

8、功能验证,完毕

扩展:

也可手动切换状态

$ bin/hdfs haadmin -transitionToActive nn1 ##切换成active
$ bin/hdfs haadmin -transitionToStandby nn1 ##切换成standby

+++++++++++++++++++++++++++++++++++++++++++++++++++++++

以上为nanmenode 节点搭建高可用,下面为ResourceManager,高可用配置

规划:把master上面的ResourceManager做主,node3上面做备份节点

修改配置文件yarn-site.xml :

<?xml version="1.0"?>
<configuration>

<property>
   <name>yarn.resourcemanager.ha.enabled</name>
   <value>true</value>
 </property>
 <property>
   <name>yarn.resourcemanager.cluster-id</name>
   <value>cluster1</value>
 </property>
 <property>
   <name>yarn.resourcemanager.ha.rm-ids</name>
   <value>rm1,rm2</value>
 </property>
 <property>
   <name>yarn.resourcemanager.hostname.rm1</name>
   <value>master</value>
 </property>
 <property>
   <name>yarn.resourcemanager.hostname.rm2</name>
   <value>node3</value>
 </property>
 <property>
   <name>yarn.resourcemanager.zk-address</name>
   <value>node1:2181,node2:2181,node3:2181</value>
 </property>
</configuration>

然后同步各个节点。

$scp yarn-site.xml  node1:/usr/hadoop/etc/hadoop/
$scp yarn-site.xml  node2:/usr/hadoop/etc/hadoop/
$scp yarn-site.xml  node3:/usr/hadoop/etc/hadoop/

启动节点,在master、node3上面启动

$cd /usr/hadoop/sbin
$./yarn-daemon.sh start resourcemanager

查看状态:

$yarn rmadmin -getServiceState rm1 (查看1的yarn的状态)
$yarn rmadmin -getServiceState rm2 (查看2的yarn的状态)

测试: jps 查看master上面resourcemanager的pid,然后杀掉,
查看node3上面的resourcemanager的节点状态

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,117评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,963评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,897评论 0 240
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,805评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,208评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,535评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,797评论 2 311
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,493评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,215评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,477评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,988评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,325评论 2 252
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,971评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,807评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,544评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,455评论 2 266

推荐阅读更多精彩内容