Hadoop在Linux上的高可用性方案
Hadoop的高可用性(HA)旨在消除单点故障(SPOF),确保HDFS(分布式文件系统)和YARN(资源管理系统)在节点故障时持续提供服务。其核心是通过主备组件冗余、分布式协调服务和自动故障转移实现,主要涵盖HDFS NameNode HA和YARN ResourceManager HA两部分。
HDFS HA的核心是NameNode冗余,通过Active/Standby模式确保元数据服务的连续性。关键组件包括:
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value> <!-- 名称服务逻辑名称 -->
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>zoo1:2181,zoo2:2181,zoo3:2181</value> <!-- ZooKeeper集群地址 -->
</property>
<property>
<name>dfs.nameservices</name>
<value>mycluster</value> <!-- 与core-site.xml一致 -->
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value> <!-- NameNode唯一标识 -->
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>namenode1:8020</value> <!-- Active NameNode RPC地址 -->
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>namenode2:8020</value> <!-- Standby NameNode RPC地址 -->
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://journal1:8485;journal2:8485;journal3:8485/mycluster</value> <!-- JournalNode集群地址 -->
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value> <!-- 启用自动故障转移 -->
</property>
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> <!-- 客户端代理提供者 -->
</property>
hadoop-daemons.sh start journalnode,启动JournalNode守护进程。hdfs namenode -bootstrapStandby,将Active节点的元数据同步到Standby节点。start-dfs.sh启动所有NameNode、DataNode和JournalNode。hdfs haadmin -getServiceState nn1(检查nn1状态)和hdfs haadmin -getServiceState nn2(检查nn2状态),确认Active/Standby状态正常。YARN HA的核心是ResourceManager冗余,通过Active/Standby模式确保资源调度的连续性。关键组件包括:
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value> <!-- 启用HA -->
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yarn1</value> <!-- 集群唯一标识 -->
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value> <!-- ResourceManager唯一标识 -->
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>resourcemanager1</value> <!-- Active ResourceManager主机名 -->
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>resourcemanager2</value> <!-- Standby ResourceManager主机名 -->
</property>
yarn-daemon.sh start resourcemanager,启动ResourceManager进程。yarn rmadmin -getServiceState rm1(检查rm1状态)和yarn rmadmin -getServiceState rm2(检查rm2状态),确认Active/Standby状态正常。ssh-keygen生成密钥,ssh-copy-id分发公钥),确保故障转移时能远程执行命令。ntpdate ntp.aliyun.com),避免因时间不一致导致心跳检测失败。fsimage和edits文件)及业务数据,防止数据丢失。hadoop-daemon.sh stop namenode),观察Standby节点是否自动切换为Active(通过jps命令查看进程状态)。yarn-daemon.sh stop resourcemanager),验证Standby节点是否自动接管。hdfs dfs -put命令上传文件,或提交MapReduce作业,确认服务连续性。通过以上配置,Hadoop集群可实现HDFS和YARN的高可用性,确保在节点故障时快速切换,保障数据可靠性和服务连续性。