Hadoop在Linux中的高可用性设置指南
Hadoop在Linux环境中的高可用性(HA)设置需通过多组件协同实现,核心目标是解决NameNode(HDFS元数据管理)、ResourceManager(YARN资源调度)的单点故障问题,同时保障数据冗余与系统稳定性。以下是具体配置步骤:
java -version验证)。vm.swappiness=10减少交换分区使用、net.core.somaxconn=65535提升网络连接数),编辑/etc/sysctl.conf后执行sysctl -p生效。ssh-keygen -t rsa生成密钥,ssh-copy-id分发至所有节点),便于故障转移时自动执行命令。ntp服务,ntpdate pool.ntp.org同步)。ZooKeeper是Hadoop HA的核心协调组件,负责NameNode选主、ResourceManager状态监控及故障转移触发。
zoo.cfg(每节点相同):tickTime=2000
initLimit=10
syncLimit=5
dataDir=/path/to/zk/data # 数据目录
clientPort=2181
server.1=zoo1:2888:3888 # 节点1,2888用于Leader选举,3888用于Leader与其他节点通信
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888
zkServer.sh start,通过zkServer.sh status确认Leader节点(如Mode: leader)。HDFS HA通过主备NameNode+JournalNode实现元数据同步与故障转移。
core-site.xml(全局配置):<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>
hdfs-site.xml(HDFS专用配置):<property>
<name>dfs.nameservices</name>
<value>mycluster</value> <!-- 与fs.defaultFS一致 -->
</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> <!-- nn1的RPC地址 -->
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>namenode2:8020</value> <!-- nn2的RPC地址 -->
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>namenode1:50070</value> <!-- nn1的HTTP地址 -->
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>namenode2:50070</value> <!-- nn2的HTTP地址 -->
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://journalnode1:8485;journalnode2:8485;journalnode3: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>
hdfs --daemon start journalnode,通过jps确认进程启动。hdfs namenode -format(首次启动需格式化)。hdfs --daemon start namenode。hdfs namenode -bootstrapStandby(同步主NameNode元数据)。hdfs --daemon start namenode。hdfs --daemon start zkfc(ZKFC会监控NameNode状态,触发故障转移)。YARN HA通过主备ResourceManager实现资源调度的连续性。
yarn-site.xml(YARN专用配置):<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value> <!-- 开启HA -->
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yrc</value> <!-- 集群ID -->
</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> <!-- rm1的主机名 -->
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>resourcemanager2</value> <!-- rm2的主机名 -->
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>zoo1:2181,zoo2:2181,zoo3:2181</value> <!-- ZooKeeper集群地址(用于选主) -->
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value> <!-- Shuffle服务 -->
</property>
start-yarn.sh,通过yarn rmadmin -getServiceState rm1确认主备状态(active/standby)。DataNode负责数据存储,需配置为向所有NameNode汇报状态(自动适配主备切换)。
hdfs-site.xml(每DataNode相同):<property>
<name>dfs.datanode.data.dir</name>
<value>/path/to/datanode/dir</value> <!-- 数据存储目录 -->
</property>
hdfs --daemon start datanode,通过hdfs dfsadmin -report确认DataNode状态。hdfs --daemon stop namenode),观察备NameNode是否自动接管(通过hdfs dfsadmin -report查看主NameNode切换)。yarn --daemon stop resourcemanager),确认备ResourceManager是否变为active。http://namenode:50070、http://resourcemanager:8088)查看集群状态。hdfs dfsadmin -fetchImage)、清理JournalNode日志、升级Hadoop版本时验证兼容性。通过以上步骤,Hadoop集群可实现NameNode、ResourceManager的高可用,结合ZooKeeper协调与JournalNode元数据同步,有效保障集群在节点故障时的连续性与数据可靠性。