前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >提高hadoop的可靠性(下)

提高hadoop的可靠性(下)

作者头像
刀刀老高
发布2018-04-11 11:07:48
6140
发布2018-04-11 11:07:48
举报
文章被收录于专栏:奇点大数据

在Hadoop集群中,Namenode的可用性直接影响了Hadoop整个集群的可用性,目前有很多可选方案,基本上以NFS+zookeeper实现,但是仍然存在单点,因此官方引入了QJM解决方案。这里以Hadoop2.6.3为例,来看下如何解决数据单点问题。

首先先来了解以下QJM实现的原理,NameNode节点存储数据包括edits_* 的事务文件以及fsimage_*的内存镜像,同步只需要事务文件,因此QJM采用JournalNode来同步记录主NameNode的事务,并同步到备Namenode,为了标记主备Namnode状态和自动切换,引入zookeeper集群来记录状态,并通过 ZKFailoverController做主备选举,利用Fence功能来保护意外存活的节点,防止脑裂发生。更详细的信息或NFS方式高可用可以参考官方文档:

http://hadoop.apache.org/docs/r2.6.3/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html

这里以test1-test4四台测试机为例列举关键配置文件

hdfs-site.xml

#### 将nameservice命名为mycluster ####

代码语言:javascript
复制
<property>
  <name>dfs.nameservices</name>
  <value>mycluster</value>
  <description>the logical name for this new nameservice</description>
</property>
<property>

#### 为两个节点命名一个唯一标识,目前只能支持两节点 ####

代码语言:javascript
复制
  <name>dfs.ha.namenodes.mycluster</name>
  <value>nn1,nn2</value>
  <description>unique identifiers for each NameNode in the nameservice</description>
</property>

#### 每节点对应的主机名和端口,注意要将主机名写入每个节点的/etc/hosts ####

代码语言:javascript
复制
<property>
  <name>dfs.namenode.rpc-address.mycluster.nn1</name>
  <value>test1:8020</value>
  <description>the fully-qualified RPC address for each NameNode to listen on</description>
</property>
<property>
  <name>dfs.namenode.rpc-address.mycluster.nn2</name>
  <value>test2:8020</value>
  <description>the fully-qualified RPC address for each NameNode to listen on</description>
</property>
<property>
  <name>dfs.namenode.servicerpc-address.mycluster.nn1</name>
  <value>test1:53310</value>
</property>
<property>
  <name>dfs.namenode.servicerpc-address.mycluster.nn2</name>
  <value>test2:53310</value>
</property>
<property>
  <name>dfs.namenode.http-address.mycluster.nn1</name>
  <value>test1:50070</value>
  <description>the fully-qualified HTTP address for each NameNode to listen on</description>
</property>
<property>
  <name>dfs.namenode.http-address.mycluster.nn2</name>
  <value>test2:50070</value>
  <description>the fully-qualified HTTP address for each NameNode to listen on</description>
</property>
<property>
  <name>dfs.namenode.shared.edits.dir</name>
  <value>qjournal://test1:8485;test2:8485;test3:8485/mycluster</value>
  <description> the URI which identifies the group of JNs where the NameNodes will write/read edits</description>
</property>
<property>
  <name>dfs.client.failover.proxy.provider.mycluster</name>
  <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
#### 发起fence方式,和ssh的必要参数 ####
<property>
  <name>dfs.ha.fencing.methods</name>
  <value>sshfence</value>
</property>
<property>
  <name>dfs.ha.fencing.ssh.private-key-files</name>
  <value>/home/hadoop/.ssh/id_rsa</value>
</property>
<property>
  <name>dfs.ha.fencing.methods</name>
  <value>date</value>
</property>
#### 支持自动故障转移 ####
<property>
   <name>dfs.ha.automatic-failover.enabled</name>
   <value>true</value>
</property>
#### 发起fence时执行的命令,()里面的是shell命令
<property>
  <name>dfs.ha.fencing.methods</name>
  <value>shell(/bin/true)</value>
</property>
<property>
   <name>ha.zookeeper.quorum</name>
   <value>test1:2181,test2:2181,test3:2181</value>
 </property>
core-site.xml
<property>
  <name>fs.defaultFS</name>
  <value>hdfs://mycluster</value>
</property>
<property>
  <name>dfs.journalnode.edits.dir</name>
  <value>/data/journal</value>
</property>

配置完成基本的Hadoop后,为切换做准备,启动zookeeper

cd /home/hadoop/zk/bin ; ./zkServer.sh start

启动journalnode进行edit事务日志的同步

$ hadoop-daemon.sh start journalnode

对hdfs进行格式化并进行同步测试

$ hdfs namenode -format

初始化zookeeper,写入高可用信息

$ hdfs zkfc -formatZK

启动集群,即可

$ start-all.sh

总体来说,QJM方式的Hadoop Namenode 高可用是比较完整的解决方案,包括Fence Quorum 的引入,但是在维护上面也增加了很高的成本。引入了zookeeper集群和journal集群(著名的Paxos算法),为维护也带来了不小的难度。

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

本文分享自 奇点 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档