`
SavageGarden
  • 浏览: 223177 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hadoop 0.23 CDH4 高可用集群指南

 
阅读更多

 

CDH4 高可用集群指南

 

一、 Hadoop 的高可用性

 

1. 概论

本指南提供了一个HDFS 的高可用性(HA )功能的概述,以及如何配置和管理HDFS 高可用性(HA) 集群。本文档假定读者具有对HDFS 集群的组件和节点类型具有一定理解。有关详情,请参阅ApacheHDFS 的架构指南。

http://hadoop.apache.org/common/docs/current/hdfs_design.html

 

2. 背景

CDH4 之前,在HDFS 集群中NameNode 存在单点故障(SPOF )。对于只有一个NameNode 的集群,如果NameNode 机器出现故障,那么整个集群将无法使用,直到NameNode 重新启动。

NameNode 主要在以下两个方面影响HDFS 集群:

(1). NameNode 机器发生意外,比如宕机,集群将无法使用,直到管理员重启NameNode

(2). NameNode 机器需要升级,包括软件、硬件升级,此时集群也将无法使用

HDFSHA 功能通过配置Active/Standby 两个NameNodes 实现在集群中对NameNode 的热备来解决上述问题。如果出现故障,如机器崩溃或机器需要升级维护,这时可通过此种方式将NameNode 很快的切换到另外一台机器。

 

3. 架构

在一个典型的HDFS(HA) 集群中,使用两台单独的机器配置为NameNodes 。在任何时间点,确保NameNodes 中只有一个处于Active 状态,其他的处在Standby 状态。其中ActiveNameNode 负责集群中的所有客户端操作,StandbyNameNode 仅仅充当备机,保证一旦ActiveNameNode 出现问题能够快速切换。

为了保证Standby 节点与Active 节点的状态保持同步,目前是通过两个节点同时访问一个共享的存储设备(NFS) 来实现的,在以后的版本中可能会做进一步的改进。

Active 节点的namespace 发生改变时,存储在共享目录中的日志文件也会被修改,Standby 节点监测到日志变化后,将其作用到自身的namespace 。当Active 节点发生故障需要进行切换时,Standby 节点由Standby 状态转换为Active 状态前将会把所有未读日志作用到自身的namespace 以确保自身的namespace 与主节点的namespace 保持一致。

为了实现快速切换,Standby 节点获取集群的最新文件块信息也是很有必要的。为了实现这一目标,DataNode 需要配置NameNodes 的位置,并同时给他们发送文件块信息以及心跳检测。

任意时间只有一个ActiveNameNode 对于HDFS(HA) 集群的正常运行至关重要,否则两者的namespace 将不能保持同步,面临数据丢失和其它问题的危险性。为了防止出现这种情况,管理员必须为共享存储配置至少一个安全机制。这种机制应该保证: 在切换期间,如果不能证实当前Active 节点已经改变了状态,那么此机制应切断当前Active 节点对共享存储的访问,这样可以防止在切换期间当前Active 节点继续对namespace 进行修改,确保新的Active 节点能够安全的切换。

注意:

此版本只支持手动切换,这意味着集群并不能自动检测Active 节点发生故障。

 

二、 HDFS(HA) 的硬件配置

为了部署一个HA 群集,你应该准备以下几点:

1.NameNode 机器,ActiveStandby 应该具有相同的硬件

2. 共享存储,需要有一个能够保证所有NameNode 读写的共享目录。通常,这应该是一个远程文件系统,支持NFS 和挂载在每个NameNode 机器上。在此版本中,只有一个对共享可编辑目录的支持。这个共享可编辑目录的可用性很有限,因此,为了消除单点故障,必须提高此存储设备的可用性。一个高品质的专用NAS 设备要好过通过一个简单的Linux 服务器提供NFS 服务的方式。

注意:

HDFS(HA) 集群中,Standby 节点还执行着对namespace 状态的checkpoint 功能,因此没有必要再运行SecondaryNameNodeCheckpointNodeBackupNode

 

 

三、 HDFS(HA) 的软件配置

 

1. 配置概述

对于使用一个NameNode 的集群,HA 的配置与HDFSFederation 机制是兼容的,新的配置项被设计用在集群中的所有相同类型的节点具有相同的配置,不需要为相同类型节点的不同机器部署不同的配置文件。

HDFS(HA) 集群使用NameServiceID 来标示NameNode ,作为NameNode 的编号。

 

2. 现有的配置参数

下面的配置参数发生了变化:

    core-site.xml

(1)fs.defaultFS - 如果没有配置则使用fs.default.name

 

<property> 
  	<name>fs.defaultFS</name> 
  	<value>hdfs://mycluster</value> 
</property>
 

3. 新增的配置参数

     hdfs-site.xml

(1)dfs.federation.nameservices --- federation 服务名

 

<property> 
  	<name>dfs.federation.nameservices</name> 
  	<value>mycluster</value> 
</property> 

 

(2) 如果同时还使用HDFSFederation 机制,则应该使用逗号分隔nameservices 列表

<property> 
  	<name>dfs.federation.nameservices</name> 
  	<value>mycluster,mycluster1</value> 
</property>

 

(3)dfs.ha.namenodes.[nameservice ID] --- 每个NameNode 在名称服务中的唯一标识, 此版本最大只支持两个NameNode

<property> 
  	<name>dfs.ha.namenodes.mycluster</name> 
  	<value>nn1,nn2</value> 
</property> 
 

 

(4)dfs.namenode.rpc-address.[nameservice ID] --- rpc 通信地址

<property> 
  	<name>dfs.namenode.rpc-address.mycluster.nn1</name> 
  	<value>machine1.example.com:8020</value> 
</property> 
<property> 
  	<name>dfs.namenode.rpc-address.mycluster.nn2</name> 
  	<value>machine2.example.com:8020</value> 
</property> 
 

 

(5)dfs.namenode.http-address.[nameservice ID] --- http 通信地址

<property> 
  	<name>dfs.namenode.http-address.mycluster.nn1</name> 
  	<value>machine1.example.com:50070</value> 
</property> 
<property> 
  	<name>dfs.namenode.http-address.mycluster.nn2</name> 
  	<value>machine2.example.com:50070</value> 
</property> 
 

 

(6)dfs.namenode.shared.edits.dir --- 共享存储目录位置

<property> 
  	<name>dfs.namenode.shared.edits.dir</name> 
  	<value>file:///mnt/filer1/dfs/ha-name-dir-shared</value> 
</property> 
 

 

4. 客户端故障转移配置

(1)dfs.client.failover.proxy.provider.[nameservice ID] --- HDFS 客户端与Active 节点通信的java 类,使用其确定Active 节点是否活跃

<property> 
  	<name>dfs.client.failover.proxy.provider.mycluster</name>             	
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> 
</property> 
 

 

5. 安全配置

dfs.ha.fencing.methods --- 用于在Active 节点切换期间的安全机制,确保在任何时间都只有一个NameNode 处于活跃状态。在故障切换期间,haadmin 命令确保在将其它NameNode 转换为Active 状态之前Active 节点处在Standby 状态,或其进程已被终止。

至少应该配置一个,因为没有默认配置,因此如果配置则HA 机制将会失效。

如果要实现自定义的安全机制,参照org.apache.hadoop.ha.NodeFencer

 

(1)sshfence 方式

   通过SSH 连接到ActiveNameNode 杀死监听服务端TCP 监听的进程

<property> 
  	<name>dfs.ha.fencing.methods</name> 
  	<value>sshfence</value> 
</property> 
 
<property> 
  	<name>dfs.ha.fencing.ssh.private-key-files</name> 
  	<value>/home/exampleuser/.ssh/id_rsa</value> 
</property> 
 

    或者配置非标准的用户名和端口以及超时时间

<property> 
  	<name>dfs.ha.fencing.methods</name> 
  	<value>sshfence([[username][:port]])</value> 
</property> 
<property> 
  	<name>dfs.ha.fencing.ssh.connect-timeout</name> 
  	<value> 60000</value>
</property> 
 

 

(2)shell 方式

    运行脚本实现安全机制

<property> 
  	<name>dfs.ha.fencing.methods</name> 
 	<value>shell(/path/to/my/script.sh arg1 arg2 ...)</value> 
</property> 
 

四、 HDFS (HA) 的初始化

设定所有的必要配置项后,必须首先同步两个NameNode 上的元数据。如果是新建的HDFS 集群,则应首先格式化一个NameNode ,或者想把非HA 集群转换为HA 集群,按照dfs.namenode.name.dir dfs.namenode.edits.dir 的配置把当前NameNode 节点的元数据目录复制到另一个NameNode. 还应该确保共享存储目录下(dfs.namenode.shared.edits.dir ) 包含NameNode 所有的元数据。

 

五、 HDFS(HA) 的管理

sbin/start-dfs.sh

默认以HA 方式启动集群,启动后为Standby 状态,使用如下命令设置Active 节点

# bin/hdfs haadmin –DFSHAadmin –transitionToActive nn1

 

如果让nn2 成为变为active nn1 变为standby ,则

# bin/hdfs haadmin -DfSHAadmin -failover nn1 nn2

如果失败(is not ready to become active)

# bin/hdfs haadmin -DfSHAadmin -failover --forceactive nn1 nn2

 

Usage: DFSHAAdmin [-ns <nameserviceId>]

[-transitionToActive <serviceId>]

[-transitionToStandby <serviceId>]

[-failover [--forcefence] [--forceactive] <serviceId> <serviceId>]

[-getServiceState <serviceId>]

[-checkHealth <serviceId>]

[-help <command>]

分享到:
评论
2 楼 SavageGarden 2012-07-13  
0.20系列的只有SecondaryNameNode可以作为容灾的一种机制,facebook在0.20的基础上推出了自己的HA方案--Avatar,可以搜索相关配置,不过需要打facebook提交的patch,建议如果确有需要,还是升级到CDH4为妙。
1 楼 zjwuse 2012-07-11  
帅哥,我想问你个问题。 mr1支持 HA么? 我测试服务器起来后2个nn都报错不支持Standby状态。自己把u3版本的shell弄过来start-all 起来以后 dn报错连接不上nn1,nn2 。 不知道能否分享下cdh4的配置,多谢

相关推荐

    Hadoop集群安装,高可用集群安装的方法和步骤,自己整理的

    Hadoop集群安装,高可用集群安装的方法和步骤,自己整理的 Hadoop集群安装,高可用集群安装的方法和步骤,自己整理的 Hadoop集群安装,高可用集群安装的方法和步骤,自己整理的

    Hadoop HA高可用集群搭建(Hadoop+Zookeeper+HBase)

    Hadoop HA高可用集群搭建(Hadoop+Zookeeper+HBase) 一、Hadoop HA高可用集群概述 在大数据处理中,高可用集群是非常重要的,Hadoop HA高可用集群可以提供高可靠性和高可用性,确保数据处理不中断。该集群由...

    hadoop-cdh4-0.3.zip

    【标题】"hadoop-cdh4-0.3.zip" 提供的是针对Presto优化的CDH4 Hadoop发行版,这个版本是专为Presto大数据查询引擎设计的,旨在提高其在CDH4(Cloudera Distribution Including Apache Hadoop)环境中的性能和兼容性...

    hadoop0.23

    hadoop0.23,绿色包,免安装!

    hadoop之cdh

    本文档旨在提供关于如何在Cloudera Distribution Including Hadoop (CDH)上配置高可用性的详细指南。CDH是由Cloudera公司提供的一个企业级Hadoop发行版,它集成了Hadoop生态系统的多个组件,并提供了强大的管理和...

    hadoop高可用集群搭建手册.docx

    Hadoop高可用集群搭建手册 本文档主要介绍了Hadoop 2.6高可用集群的搭建过程,包括集群规划、搭建准备、集群搭建和配置等步骤。下面是从中提取的知识点: 1. 集群规划 在规划Hadoop集群时,需要考虑到集群的拓扑...

    Hadoop高可用集群搭建

    Hadoop高可用集群搭建

    hadoop cdh版本伪分布式集群搭建图文教程

    ### hadoop cdh版本伪分布式集群搭建图文教程详解 #### 一、引言 随着大数据技术的发展,Hadoop已成为处理大规模数据集的核心工具之一。CDH(Cloudera Distribution Including Apache Hadoop)作为Hadoop的一个发行...

    hadoop-cdh-4.5.0 eclipse plugin hadoop eclipse 插件

    hadoop-cdh-4.5.0 eclipse plugin hadoop eclipse 插件 hadoop-eclipse-plugin-2.0.0-cdh4.5.0.jar

    hadoop高可用集群搭建及参数优化

    hadoop高可用集群搭建及参数优化hadoop高可用集群搭建及参数优化hadoop高可用集群搭建及参数优化

    hadoop-2.6.0-cdh5.7.0版本.zip

    4. **CDH**: CDH是Cloudera对Hadoop生态的商业发行版,它包含了经过测试和优化的Hadoop组件,包括HDFS、MapReduce、YARN等,同时也包含了其他如Hive(SQL查询工具)、Pig(数据流编程工具)、Oozie(工作流调度器)...

    Hadoop-HA(高可用 )集群搭建文档

    基于Hadoop-HA(高可用 )集群搭建目录: 一.Hadoop集群IP以及角色分配表 2 二.安装软件 2 三. 基础环境部署 2 四.安装Hadoop 6 五.安装Zookeeper集群 7 六.配置高可用集群 8 七.启动相应的服务进程 12 八.测试...

    hadoop HA高可用性完全分布式集群安装

    ### hadoop HA高可用性完全分布式集群安装 在大数据处理领域,Hadoop作为一个开源软件框架,主要用于分布式存储和处理大规模数据集。为了提高系统的稳定性和可靠性,Hadoop提供了高可用性(High Availability,简称...

    HadoopHA集群配置文件

    本文将深入探讨Hadoop HA(高可用性)集群的配置文件,包括`core-site.xml`、`hdfs-site.xml`、`mapred-site.xml`、`yarn-site.xml`以及`slaves`文件,这些都是确保Hadoop集群稳定运行的基础。 1. `core-site.xml`:...

    Hadoop集群监控与Hive高可用.pdf

    Hadoop集群监控与Hive高可用 本文档主要介绍了Hadoop集群监控和Hive高可用的解决方案,涵盖了Cacti和Ganglia两种监控工具的优缺点、Hive高可用集群的实现方案、HAProxy的应用和优化。 一、Hadoop集群监控 1. ...

    CDH集群部署手册(For CDH5)

    《CDH集群部署手册(For CDH5)》是一份详尽的指南,旨在帮助用户成功部署和管理CDH(Cloudera Distribution Including Apache Hadoop)5版本的集群。CDH是Cloudera公司提供的一个全面、经过企业级优化的Apache Hadoop...

    hadoop权威指南4和源码

    总的来说,《Hadoop权威指南4》结合源码,是一套全面的学习资料,涵盖了从理论到实践的各个方面,对于想要深入理解Hadoop并利用其处理大数据的人员来说,具有极高的参考价值。通过这本书和源码的学习,你可以提升...

    hadoop-CDH4.6-install.docx

    ### Hadoop CDH4.6 安装与配置详尽指南 #### Hadoop 简介 **Hadoop 是什么** Hadoop 是一个开源软件框架,用于分布式存储和处理大型数据集。它能够通过简单的编程模型支持数千台计算机(节点)组成的集群。这些...

    hadoop-cdh4.6配置文件

    总之,配置Hadoop、HBase、Hive、ZooKeeper和Spark的CDH4.6.0集群是一项复杂的任务,需要综合考虑多个因素,包括硬件资源、网络环境、安全性以及业务需求。每个组件的配置文件都是关键,正确理解和调整这些配置是...

    hadoop-cdh4.3安装文档

    此外,对于大型集群,还需要考虑高可用性、安全性、监控和性能调优等方面。例如,设置HDFS的NameNode HA,配置Hadoop的安全模式(如Kerberos认证),使用Ambari进行监控和管理,以及优化HDFS的副本数量、MapReduce的...

Global site tag (gtag.js) - Google Analytics