如何确保Ubuntu上Hadoop的高可用性
导读:确保Ubuntu上Hadoop高可用性的关键步骤 1. 前提准备 环境要求:Ubuntu 20.04及以上版本(推荐),所有节点安装JDK 8(apt install openjdk-8-jdk);配置静态IP、主机名解析(/etc/ho...
确保Ubuntu上Hadoop高可用性的关键步骤
1. 前提准备
- 环境要求:Ubuntu 20.04及以上版本(推荐),所有节点安装JDK 8(
apt install openjdk-8-jdk
);配置静态IP、主机名解析(/etc/hosts
文件添加节点映射)及节点间SSH免密登录(ssh-keygen -t rsa
+ssh-copy-id
)。 - 组件规划:至少4台节点(如node1-node4),分别承担NameNode1/Standby NameNode2、JournalNode(3节点)、ResourceManager1/Standby ResourceManager2、DataNode、NodeManager角色。
2. 安装与配置Hadoop
- 基础配置:下载Hadoop(如2.10.1版本)并解压至
/opt/hadoop
,设置HADOOP_HOME
(/opt/hadoop
)、PATH
(包含$HADOOP_HOME/bin
)环境变量(~/.bashrc
文件)。 - 核心配置文件修改:
- core-site.xml:定义HDFS逻辑集群名称(
dfs.nameservices=mycluster
)及ZooKeeper集群地址(ha.zookeeper.quorum=zk1:2181,zk2:2181,zk3:2181
)。 - hdfs-site.xml:配置NameNode高可用参数(
dfs.ha.namenodes.mycluster=nn1,nn2
、dfs.namenode.rpc-address.mycluster.nn1=node1:8020
、dfs.namenode.rpc-address.mycluster.nn2=node2:8020
)、JournalNode同步路径(dfs.namenode.shared.edits.dir=qjournal://journalnode1:8485; journalnode2:8485; journalnode3:8485/mycluster
)、自动故障转移(dfs.ha.automatic-failover.enabled=true
)及隔离机制(dfs.ha.fencing.methods=sshfence
、dfs.ha.fencing.ssh.private-key-files=/home/ubuntu/.ssh/id_rsa
)。 - yarn-site.xml:配置ResourceManager高可用(
yarn.resourcemanager.ha.enabled=true
、yarn.resourcemanager.cluster-id=yarn-cluster
、yarn.resourcemanager.ha.rm-ids=rm1,rm2
、yarn.resourcemanager.hostname.rm1=node1
、yarn.resourcemanager.hostname.rm2=node2
)。
- core-site.xml:定义HDFS逻辑集群名称(
3. 部署与启动ZooKeeper集群
- 安装ZooKeeper:在3台节点(如node1-node3)下载并解压ZooKeeper(如3.7.0版本),配置
ZOOKEEPER_HOME
(/opt/zookeeper
)及dataDir
(/opt/zookeeper/data
)。 - 配置zoo.cfg:添加集群节点信息(
server.1=node1:2888:3888
、server.2=node2:2888:3888
、server.3=node3:2888:3888
),并在dataDir
目录下创建myid
文件(内容为节点ID,如node1对应1
)。 - 启动ZooKeeper:在每台节点执行
zkServer.sh start
,通过zkServer.sh status
确认集群状态(Leader/Follower)。
4. 配置JournalNode集群
- 启动JournalNode:在3台JournalNode节点(如node1-node3)执行
hdfs namenode -formatJournalNode
(格式化JournalNode),然后启动JournalNode服务(hadoop-daemon.sh start journalnode
或start-dfs.sh
)。
5. 初始化HDFS高可用状态
- 格式化NameNode:在Active NameNode节点(如node1)执行
hdfs namenode -format
,生成元数据目录(/opt/hadoop/data/namenode
)。 - 同步元数据:将node1的元数据复制到Standby NameNode节点(如node2)的
/opt/hadoop/data/namenode
目录。 - 初始化共享编辑日志:在Active NameNode节点执行
hdfs namenode -initializeSharedEdits
,将本地编辑日志同步到JournalNode集群。
6. 启动Hadoop高可用集群
- 启动JournalNode:在所有JournalNode节点启动服务(
start-dfs.sh
)。 - 启动NameNode:在Active NameNode节点执行
hdfs namenode
,然后在Standby NameNode节点执行hdfs namenode -bootstrapStandby
(同步元数据)。 - 启动ResourceManager:在Active ResourceManager节点(如node1)执行
yarn resourcemanager
,然后在Standby ResourceManager节点(如node2)执行yarn resourcemanager
。 - 启动DataNode/NodeManager:在所有DataNode节点执行
hadoop-daemon.sh start datanode
,在所有NodeManager节点执行yarn-daemon.sh start nodemanager
。
7. 验证高可用性
- 检查进程状态:在所有节点执行
jps
,确认关键进程运行(Active NameNode、Standby NameNode、ZKFC、ResourceManager、Standby ResourceManager、JournalNode、DataNode、NodeManager)。 - 浏览器验证:访问
http://node1:9870
(HDFS Web UI)查看NameNode状态(Active/Standby),访问http://node1:8088
(YARN Web UI)查看ResourceManager状态。 - 模拟故障切换:停止Active NameNode节点的NameNode进程(
hadoop-daemon.sh stop namenode
),等待1-2分钟,通过Web UI或jps
确认Standby NameNode已提升为Active;恢复原Active节点,确认其转为Standby状态。
8. 优化与维护建议
- 数据备份:定期备份HDFS关键数据(如
/opt/hadoop/data/namenode
),使用hdfs dfsadmin -backup
命令或第三方工具(如DistCp)。 - 监控告警:部署Prometheus+Granafa监控集群状态(NameNode内存、JournalNode延迟、ResourceManager队列),设置阈值告警(如NameNode宕机、JournalNode节点丢失)。
- 性能调优:调整JournalNode数量(3或5节点,避免脑裂)、ZooKeeper会话超时(
tickTime=2000
)、HDFS块大小(dfs.blocksize=256M
,提升并行处理能力)。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何确保Ubuntu上Hadoop的高可用性
本文地址: https://pptw.com/jishu/728913.html