专栏首页奇点大数据提高hadoop的可靠性(下)

提高hadoop的可靠性(下)

在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 ####

<property>
  <name>dfs.nameservices</name>
  <value>mycluster</value>
  <description>the logical name for this new nameservice</description>
</property>
<property>

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

  <name>dfs.ha.namenodes.mycluster</name>
  <value>nn1,nn2</value>
  <description>unique identifiers for each NameNode in the nameservice</description>
</property>

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

<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算法),为维护也带来了不小的难度。

本文分享自微信公众号 - 奇点(qddata),作者:尹会生

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-01-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 用python做科学计算之pandas入门简介

    pandas是一个开源的python数据分析和处理包,使用灵活方便,性能高,速度快,简单介绍一下它里面比较常用的功能 数据读取 它支持多种数据读取的方式这里简...

    刀刀老高
  • 如何看待人工智障?

    在这之中,有很多人其实对人工智能是持有怀疑态度的,或是无神论者或是有神论者,持有这种观点的人都是大有人在。

    刀刀老高
  • 想转行人工智能?机会来了!!!

    2018年1月 教育部印发的《普通高中课程方案和语文等学科课程标准》新加入了数据结构、人工智能、开源硬件设计等 AI 相关的课程。

    刀刀老高
  • Hadoop完全分布式安装

    完全分布式安装部署,其实步骤上来说与伪分布式没有太大的区别,主要增加2台虚拟机部署称为一个3台的集群

    我脱下短袖
  • Hadoop install

    XING辋
  • jdbc连接Mysql报错“java.sql.SQLException: Incorrect string value:。。。”的解决办法

    产生这种异常的原因在于,mysql中的utf8编码最多会用3个字节存储一个字符,如果一个字符的utf8 编码占用4个字节(最常见的就是ios中的emoji表情...

    飞奔去旅行
  • 基于SSM的数据库连接池框架druid的使用

    可以先去druid的官网下载jar:http://druid.io/downloads.html

    SmileNicky
  • druid简介与运用

    Druid首先是一个数据库连接池。Druid是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、P...

    Java架构师历程
  • Hive篇--搭建Hive集群

    Hive中搭建分为三中方式 a)内嵌Derby方式 b)Local方式 c)Remote方式 三种方式归根到底就是元数据的存储位置不一样。

    LhWorld哥陪你聊算法
  • 基于druid和spring的动态数据库以及读写分离

    spring与druid可以实现动态数据源,夸库查询,读写分离等功能。现在说一下配置:

    一笠风雨任生平

扫码关注云+社区

领取腾讯云代金券