CDH4
高可用集群指南
一、
Hadoop
的高可用性
1.
概论
本指南提供了一个HDFS
的高可用性(HA
)功能的概述,以及如何配置和管理HDFS
高可用性(HA)
集群。本文档假定读者具有对HDFS
集群的组件和节点类型具有一定理解。有关详情,请参阅Apache
的HDFS
的架构指南。
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
机器需要升级,包括软件、硬件升级,此时集群也将无法使用
HDFS
的HA
功能通过配置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
机器,Active
、Standby
应该具有相同的硬件
2.
共享存储,需要有一个能够保证所有NameNode
读写的共享目录。通常,这应该是一个远程文件系统,支持NFS
和挂载在每个NameNode
机器上。在此版本中,只有一个对共享可编辑目录的支持。这个共享可编辑目录的可用性很有限,因此,为了消除单点故障,必须提高此存储设备的可用性。一个高品质的专用NAS
设备要好过通过一个简单的Linux
服务器提供NFS
服务的方式。
注意:
在HDFS(HA)
集群中,Standby
节点还执行着对namespace
状态的checkpoint
功能,因此没有必要再运行SecondaryNameNode
、CheckpointNode
、BackupNode
。
三、
HDFS(HA)
的软件配置
1.
配置概述
对于使用一个NameNode
的集群,HA
的配置与HDFS
的Federation
机制是兼容的,新的配置项被设计用在集群中的所有相同类型的节点具有相同的配置,不需要为相同类型节点的不同机器部署不同的配置文件。
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)
如果同时还使用HDFS
的Federation
机制,则应该使用逗号分隔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>]
分享到:
相关推荐
Hadoop集群安装,高可用集群安装的方法和步骤,自己整理的 Hadoop集群安装,高可用集群安装的方法和步骤,自己整理的 Hadoop集群安装,高可用集群安装的方法和步骤,自己整理的
Hadoop HA高可用集群搭建(Hadoop+Zookeeper+HBase) 一、Hadoop HA高可用集群概述 在大数据处理中,高可用集群是非常重要的,Hadoop HA高可用集群可以提供高可靠性和高可用性,确保数据处理不中断。该集群由...
【标题】"hadoop-cdh4-0.3.zip" 提供的是针对Presto优化的CDH4 Hadoop发行版,这个版本是专为Presto大数据查询引擎设计的,旨在提高其在CDH4(Cloudera Distribution Including Apache Hadoop)环境中的性能和兼容性...
hadoop0.23,绿色包,免安装!
本文档旨在提供关于如何在Cloudera Distribution Including Hadoop (CDH)上配置高可用性的详细指南。CDH是由Cloudera公司提供的一个企业级Hadoop发行版,它集成了Hadoop生态系统的多个组件,并提供了强大的管理和...
Hadoop高可用集群搭建手册 本文档主要介绍了Hadoop 2.6高可用集群的搭建过程,包括集群规划、搭建准备、集群搭建和配置等步骤。下面是从中提取的知识点: 1. 集群规划 在规划Hadoop集群时,需要考虑到集群的拓扑...
Hadoop高可用集群搭建
### hadoop cdh版本伪分布式集群搭建图文教程详解 #### 一、引言 随着大数据技术的发展,Hadoop已成为处理大规模数据集的核心工具之一。CDH(Cloudera Distribution Including Apache Hadoop)作为Hadoop的一个发行...
hadoop-cdh-4.5.0 eclipse plugin hadoop eclipse 插件 hadoop-eclipse-plugin-2.0.0-cdh4.5.0.jar
hadoop高可用集群搭建及参数优化hadoop高可用集群搭建及参数优化hadoop高可用集群搭建及参数优化
4. **CDH**: CDH是Cloudera对Hadoop生态的商业发行版,它包含了经过测试和优化的Hadoop组件,包括HDFS、MapReduce、YARN等,同时也包含了其他如Hive(SQL查询工具)、Pig(数据流编程工具)、Oozie(工作流调度器)...
基于Hadoop-HA(高可用 )集群搭建目录: 一.Hadoop集群IP以及角色分配表 2 二.安装软件 2 三. 基础环境部署 2 四.安装Hadoop 6 五.安装Zookeeper集群 7 六.配置高可用集群 8 七.启动相应的服务进程 12 八.测试...
### hadoop HA高可用性完全分布式集群安装 在大数据处理领域,Hadoop作为一个开源软件框架,主要用于分布式存储和处理大规模数据集。为了提高系统的稳定性和可靠性,Hadoop提供了高可用性(High Availability,简称...
本文将深入探讨Hadoop HA(高可用性)集群的配置文件,包括`core-site.xml`、`hdfs-site.xml`、`mapred-site.xml`、`yarn-site.xml`以及`slaves`文件,这些都是确保Hadoop集群稳定运行的基础。 1. `core-site.xml`:...
Hadoop集群监控与Hive高可用 本文档主要介绍了Hadoop集群监控和Hive高可用的解决方案,涵盖了Cacti和Ganglia两种监控工具的优缺点、Hive高可用集群的实现方案、HAProxy的应用和优化。 一、Hadoop集群监控 1. ...
《CDH集群部署手册(For CDH5)》是一份详尽的指南,旨在帮助用户成功部署和管理CDH(Cloudera Distribution Including Apache Hadoop)5版本的集群。CDH是Cloudera公司提供的一个全面、经过企业级优化的Apache Hadoop...
总的来说,《Hadoop权威指南4》结合源码,是一套全面的学习资料,涵盖了从理论到实践的各个方面,对于想要深入理解Hadoop并利用其处理大数据的人员来说,具有极高的参考价值。通过这本书和源码的学习,你可以提升...
### Hadoop CDH4.6 安装与配置详尽指南 #### Hadoop 简介 **Hadoop 是什么** Hadoop 是一个开源软件框架,用于分布式存储和处理大型数据集。它能够通过简单的编程模型支持数千台计算机(节点)组成的集群。这些...
总之,配置Hadoop、HBase、Hive、ZooKeeper和Spark的CDH4.6.0集群是一项复杂的任务,需要综合考虑多个因素,包括硬件资源、网络环境、安全性以及业务需求。每个组件的配置文件都是关键,正确理解和调整这些配置是...
此外,对于大型集群,还需要考虑高可用性、安全性、监控和性能调优等方面。例如,设置HDFS的NameNode HA,配置Hadoop的安全模式(如Kerberos认证),使用Ambari进行监控和管理,以及优化HDFS的副本数量、MapReduce的...