Hadoop Ha (High avilable)配置
来源:互联网 发布:怎么看待淘宝体 编辑:程序博客网 时间:2024/06/06 01:28
为什么要配置HDFS HA?
首先:HDFS集群中NameNode 如果存在单点故障。对于只有一个NameNode的集群,如果NameNode机器出现意外情况,将导致整个集群无法使用.
而影响HDFS集群不可用主要包括以下两种情况:一是NameNode机器宕机,将导致集群不可用,重启NameNode之后才可使用;二是计划内的NameNode节点软件或硬件升级,导致集群在短时间内不可用。
为了解决上述问题,Hadoop给出了HDFS的高可用HA方案:HDFS通常由两个NameNode组成,一个处于active状态,另一个处于standby状态。Active NameNode对外提供服务,比如处理来自客户端的RPC请求,而Standby NameNode则不对外提供服务,仅同步Active NameNode的状态,以便能够在它失败时快速进行切换。
HDFS HA架构的核心作用:
HDFS HA配置要素:
NameNode机器:两台配置对等的物理机器,它们分别运行Active和Standby Node。
JouralNode机器:运行JouralNodes的机器。JouralNode守护进程相当的轻量级,可以和Hadoop的其他进程部署在一起,比如NameNode、DataNode、ResourceManager等,至少需要3个且为奇数,保证选举机制的绝对成功。
说明以下几点:
HDFS HA通常由两个NameNode组成,一个处于Active状态,另一个处于Standby状态。Active NameNode对外提供服务,而Standby NameNode则不对外提供服务,仅同步Active NameNode的状态,以便能够在它失败时快速进行切换。
Hadoop 2.0官方提供了两种HDFS HA的解决方案,一种是NFS,另一种是QJM。这里我们使用简单的QJM。在该方案中,主备NameNode之间通过一组JournalNode同步元数据信息,一条数据只要成功写入多数JournalNode即认为写入成功。通常配置奇数个JournalNode,这里还配置了一个Zookeeper集群,用于ZKFC故障转移,当Active NameNode挂掉了,会自动切换Standby NameNode为Active状态。
YARN的ResourceManager也存在单点故障问题,这个问题在hadoop-2.4.1得到了解决:有两个ResourceManager,一个是Active,一个是Standby,状态由zookeeper进行协调。
YARN框架下的MapReduce可以开启JobHistoryServer来记录历史任务信息,否则只能查看当前正在执行的任务信息。
Zookeeper的作用是负责HDFS中NameNode主备节点的选举,和YARN框架下ResourceManaer主备节点的选举。
Hadoop Ha 分为namenodeHA 和resourcemanagerHA
下面是个人具体的配置步骤
Namenode HA
集群规划
一)安装hadoop
二)配置环境文件
hadoop-env.sh
mapred-env.sh
yarn-env.sh
exportJAVA_HOME=/opt/modules/jdk1.7.0_67
三)配置4个site.xml文件
1.========core-site.xml========
<!--NameNode HA的逻辑访问名称-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns1</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/modules/hadoop-2.5.0/data</value>
</property>
2.=================hdfs-site.xml=============
<!-- 分布式副本数设置为3 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!--指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致 -->
<property>
<name>dfs.nameservices</name>
<value>ns1</value>
</property>
<!--ns1下面有两个NameNode,分别是nn1,nn2 -->
<property>
<name>dfs.ha.namenodes.ns1</name>
<value>nn1,nn2</value>
</property>
<!--nn1的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns1.nn1</name>
<value>vampire01:8020</value>
</property>
<!--nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn1</name>
<value>vampire01:50070</value>
</property>
<!--nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns1.nn2</name>
<value>vampire02:8020</value>
</property>
<!--nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn2</name>
<value>vampire02:50070</value>
</property>
<!--指定NameNode的元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://vampire01:8485;vampire02:8485;vampire03:8485/ns1</value>
</property>
<!--指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/modules/hadoop-2.5.0/journal</value>
</property>
<!--配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行
sshfence:当Active出问题后,standby切换成Active,此时,原Active又没有停止服务,这种情况下会被强制杀死进程。
shell(/bin/true):NN Active和它的ZKFC一起挂了,没有人通知ZK,ZK长期没有接到通知,standby要切换,此时,standby调一个shell(脚本内容),这个脚本返回true则切换成功。
-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>
<!--使用sshfence隔离机制时需要ssh免登陆 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>
<!--配置sshfence隔离机制超时时间 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
<!-- 关闭权限检查用户或用户组 -->
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
3.=============mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<!--配置实际的主机名和端口-->
<value>vampire01:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>vampire01:19888</value>
</property>
4.============yarn-site.xml
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>vampire03</value>
</property>
<!--启用日志聚合功能-->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!--日志保存时间-->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>86400</value>
</property>
5.=================slaves
vampire01
vampire02
vampire03
四)分发配置
$scp etc/hadoop/core-site.xmletc/hadoop/hdfs-site.xml vampire02:/opt/modules/hadoop-2.5.0/etc/hadoop/
$scpetc/hadoop/core-site.xml etc/hadoop/hdfs-site.xml vampire03:/opt/modules/hadoop-2.5.0/etc/hadoop/
五)启动HDFS HA
##注意:每一个步骤都严格按照以下步骤执行
1.删除data和logs目录(3台上,有必须删掉)
$ rm -rf data logs
2.启动zk(3台上都要)
$ bin/zkServer.sh start
3.启动journalnode(3台上都要)
$ sbin/hadoop-daemon.sh start journalnode
3908 JournalNode
2740 QuorumPeerMain
4.格式化namenode(PC1也就是nn1)
adoop-daemon.sh start namenode
5.同步nn1的元数据(PC2 也就是nn2)
n/hadoop-daemon.sh start namenode
6.查看web界面
//vampire02:50070 ##standby
7.手动切换namenode的状态
dfs haadmin -transitionToStandbynn1 ##切换成standby
六)开启故障自动转移
1.配置故障转移
1)=====core-site.xml====================
<property>
<name>ha.zookeeper.quorum</name>
<value>vampire01:2181,vampire02:2181,vampire03:2181</value>
</property>
2)====hdfs-site.xml
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.ns1</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
2.分发配置文件
$scp etc/hadoop/core-site.xml etc/hadoop/hdfs-site.xml vampire02:/opt/modules/hadoop-2.5.0/etc/hadoop/
3.启动故障转移服务
1)首先停止hdfs和zk
$sbin/stop-dfs.sh
$bin/zkServer.sh stop ##关闭zk(3台服务器)
重启
$bin/zkServer.sh start ##启动zk(3台服务器)
2)初始化zkfc[PC1也就是nn1]
$bin/hdfs zkfc -formatZK ##初始化ZKFC
17/03/2716:49:18 INFO ha.ActiveStandbyElector: Successfully created /hadoop-ha/ns1 inZK.
$sbin/start-dfs.sh ##启动hdfs
bin/hdfs haadmin -getServiceState nn1 #查看nn1状态
bin/hdfs haadmin -getServiceState nn2 #查看nn2状态
[PC1]
[hadoop@hadoophadoop-2.5.0]$ jps
4196 JournalNode
4356 DFSZKFailoverController
4012 DataNode
3920 NameNode
3586 QuorumPeerMain
4458 Jps
[PC2]
[hadoop@hadoop hadoop-2.5.0]$ jps
4117 Jps
3849 DataNode
3786 NameNode
3926 JournalNode
3633 QuorumPeerMain
4045 DFSZKFailoverController
[PC3]
[hadoop@hadoop hadoop-2.5.0]$ jps
3387 DataNode
3461 JournalNode
3551 Jps
3231 QuorumPeerMain
ResourceManager HA
一、集群规划(基本操作思路与与NameNode HA xiangs)
二、修改配置文件
=====yarn-site.xml
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>86400</value>
</property>
<!--启用resourcemanagerha-->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<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>vampire02</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>vampire03</value>
</property>
<!--指定zookeeper集群的地址-->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>vampire01:2181,vampire02:2181,vampire03:2181</value>
</property>
<!--启用自动恢复-->
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<!--指定resourcemanager的状态信息存储在zookeeper集群-->
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
三、分发配置文件
将yarn-site.xml分发到其他两台
scp etc/hadoop/yarn-site.xml vampire02:/opt/modules/hadoop-2.5.0/etc/hadoop/
scp etc/hadoop/yarn-site.xml vampire03:/opt/modules/hadoop-2.5.0/etc/hadoop/
四、启动ResourceManagere
在rm1(PC2)上:
sbin/start-yarn.sh
在rm2(pc3)上单独启动:
sbin/yarn-daemon.sh start resourcemanager
PC1
jps
5468 DataNode
5934 NodeManager
5653 JournalNode
5820 DFSZKFailoverController
5371 NameNode
3586 QuorumPeerMain
6058 Jps
PC2
jps
5023 NodeManager
4825 DFSZKFailoverController
4554 NameNode
4621 DataNode
4714 JournalNode
5359 Jps
4927 ResourceManager
3633 QuorumPeerMain
PC3
$ jps
3792 DataNode
3986 NodeManager
3881 JournalNode
4178 Jps
4120 ResourceManager
3231 QuorumPeerMain
- Hadoop Ha (High avilable)配置
- Hadoop Ha (High avilable)配置
- Hadoop集群HA(High Available)配置
- Hadoop HA MR1配置
- hadoop-ha配置
- Hadoop HA 配置
- hadoop配置HA原理
- Redis安装及HA(High Availability)配置
- Redis安装及HA(High Availability)配置
- Redis安装及HA(High Availability)配置
- Redis安装及HA(High Availability)配置
- Redis安装及HA(High Availability)配置
- Redis安装及HA(High Availability)配置
- Redis安装及HA(High Availability)配置
- Redis安装及HA(High Availability)配置
- Redis安装及HA(High Availability)配置
- Redis安装及HA(High Availability)配置
- Redis安装及HA(High Availability)配置
- dojo与requireJS的分析
- Linux 终端下颜色的输出
- Hadoop学习之路-----不同进程通信的代理对象
- 170729 通信-流水灯实验
- 堆栈的使用
- Hadoop Ha (High avilable)配置
- 基于S3C2451的嵌入式电子相册
- 微信小程序 调用时 方法未被定义
- Linux编程学习之进程间通信篇-有名管道
- Oracle常用的函数
- Linux 常用命令详解
- XYNUOJ 1246 repair the wall
- NYOJ 1103 区域赛系列一多边形划分
- C++控制语句