温馨提示×

Hadoop于Linux中如何管理集群

小樊
40
2025-10-25 01:15:59
栏目: 智能运维

Hadoop在Linux中的集群管理指南

1. 集群部署与环境准备

在Linux环境中部署Hadoop集群前,需完成以下基础准备:

  • 系统要求:选择CentOS、Ubuntu等稳定Linux发行版;每节点需配置多核CPU(支持并行计算)、充足内存(建议≥8GB,根据数据规模调整)、高速存储(SSD优于HDD,提升I/O性能)、高带宽网络(确保节点间数据传输效率)。
  • 软件安装:在所有节点安装Java(Hadoop依赖Java环境,建议使用Oracle JDK 8或OpenJDK 11),并配置JAVA_HOME环境变量;下载Hadoop稳定版本(如3.3.x),解压至指定目录(如/usr/local/hadoop)。
  • SSH免密登录:在NameNode节点生成SSH密钥(ssh-keygen -t rsa),将公钥(id_rsa.pub)复制到所有DataNode节点(ssh-copy-id user@datanode-ip),实现集群节点间无密码通信(Hadoop组件间需频繁交互)。
  • Hadoop配置:修改核心配置文件(位于$HADOOP_HOME/etc/hadoop目录):
    • core-site.xml:设置HDFS默认文件系统(fs.defaultFS,如hdfs://namenode-ip:9000);
    • hdfs-site.xml:配置NameNode数据存储路径(dfs.namenode.name.dir)、DataNode数据存储路径(dfs.datanode.data.dir)、副本数(dfs.replication,默认3);
    • yarn-site.xml:配置ResourceManager地址(yarn.resourcemanager.hostname)、NodeManager资源分配(yarn.nodemanager.resource.memory-mbyarn.nodemanager.resource.cpu-vcores);
    • mapred-site.xml:设置MapReduce运行框架为YARN(mapreduce.framework.nameyarn)。

2. 集群启动与停止

  • 启动集群
    格式化HDFS(仅在NameNode首次启动时执行,hdfs namenode -format),启动HDFS服务(start-dfs.sh,启动NameNode和DataNode),启动YARN服务(start-yarn.sh,启动ResourceManager和NodeManager)。也可使用start-all.sh同时启动HDFS和YARN(不推荐,已逐渐被拆分命令替代)。
  • 停止集群
    使用stop-dfs.sh停止HDFS服务,stop-yarn.sh停止YARN服务;或使用stop-all.sh同时停止所有服务。

3. 集群状态监控

  • 命令行工具
    • jps:查看集群节点进程(NameNode、DataNode、ResourceManager、NodeManager等),确认服务是否正常运行;
    • hdfs dfsadmin -report:查看HDFS集群状态(节点数量、存储容量、副本数等);
    • yarn application -list:查看YARN中正在运行的作业列表;
    • yarn application -status <application_id>:查看指定作业的详细状态(进度、资源使用情况等)。
  • Web界面
    通过浏览器访问HDFS Web UI(http://namenode-ip:9870,Hadoop 3.x版本),查看HDFS文件系统结构、存储使用情况;访问YARN ResourceManager Web UI(http://resourcemanager-ip:8088),查看集群资源分配、作业调度情况。
  • 第三方工具
    使用Ambari(提供集群管理、监控、告警一体化功能)、Prometheus+Grafana(实时监控集群性能指标,如CPU、内存、磁盘I/O)等工具,提升集群管理效率。

4. 集群节点管理

  • 添加节点
    在新节点安装Java、配置SSH免密登录(与现有节点互通);将Hadoop配置文件(core-site.xmlhdfs-site.xmlyarn-site.xml)复制到新节点的$HADOOP_HOME/etc/hadoop目录;在NameNode节点执行hdfs dfsadmin -refreshNodes(刷新DataNode节点列表),在ResourceManager节点执行yarn rmadmin -refreshNodes(刷新NodeManager节点列表);启动新节点的DataNode(hadoop-daemon.sh start datanode)和NodeManager(yarn-daemon.sh start nodemanager)服务。
  • 删除节点
    在NameNode节点执行hdfs dfsadmin -decommission <datanode_host:port>(将指定DataNode标记为待下线,等待数据迁移完成);在ResourceManager节点执行yarn rmadmin -decommission <nodemanager_host:port>(将指定NodeManager标记为待下线);待数据迁移完成后,在待下线节点停止DataNode和NodeManager服务,并从集群配置中移除该节点信息。
  • 数据均衡
    当新增或删除节点后,使用hdfs balancer命令启动数据均衡(默认阈值10%,可将数据均匀分布在所有DataNode上,避免数据倾斜影响性能)。

5. 任务管理与调度

  • 任务提交
    将MapReduce程序打包为JAR文件(如wordcount.jar),使用hadoop jar命令提交作业到YARN(hadoop jar wordcount.jar com.example.WordCount /input/path /output/path),其中/input/path为HDFS输入目录,/output/path为HDFS输出目录(需提前创建,且不能已存在)。
  • 作业控制
    • yarn application -status <application_id>:查看作业执行状态(如RUNNING、SUCCEEDED、FAILED);
    • yarn application -kill <application_id>:杀死指定作业(如作业运行异常或需要取消)。
  • 任务调度策略
    YARN支持多种调度策略,可根据集群需求配置:
    • 容量调度器(Capacity Scheduler):按队列分配资源,保证每个队列有最低资源配额(适合多租户共享集群,如企业内部不同部门使用);
    • 公平调度器(Fair Scheduler):动态调整资源分配,确保所有作业公平共享集群资源(适合短作业较多的场景,如数据分析任务);
      可通过修改yarn-site.xml中的yarn.scheduler.class参数选择调度器(如org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler)。

6. 日志管理与故障排查

  • 日志查看
    Hadoop组件日志默认存储在$HADOOP_HOME/logs目录下(如NameNode日志为hadoop-username-namenode-namenode-ip.log,DataNode日志为hadoop-username-datanode-datanode-ip.log,ResourceManager日志为yarn-username-resourcemanager-namenode-ip.log)。使用yarn logs -applicationId <application_id>命令查看指定作业的详细日志(包括Map、Reduce任务的执行日志)。
  • 常见故障排查
    • NameNode无法启动:检查dfs.namenode.name.dir路径是否存在且可写,查看NameNode日志(是否有java.io.IOException等错误);
    • DataNode无法连接NameNode:检查网络连通性(ping命令)、SSH免密登录是否正常,查看DataNode日志(是否有Connection refused等错误);
    • 作业卡顿或失败:查看ResourceManager和NodeManager日志(是否有资源不足、节点宕机等错误),调整YARN资源分配(如增加yarn.nodemanager.resource.memory-mb)或优化MapReduce程序(如调整mapreduce.task.io.sort.mb参数)。

7. 性能优化

  • HDFS优化
    调整HDFS块大小(dfs.blocksize,如128MB或256MB,块越大可减少NameNode元数据压力,适合大文件处理);启用数据压缩(mapreduce.map.output.compress为true,mapreduce.map.output.compress.codecorg.apache.hadoop.io.compress.SnappyCodec,减少磁盘I/O和网络传输)。
  • YARN优化
    调整容器资源分配(yarn.scheduler.minimum-allocation-mbyarn.scheduler.maximum-allocation-mb,设置容器最小/最大内存,避免资源浪费或不足);优化调度策略(如使用Fair Scheduler提升小作业响应速度)。
  • MapReduce优化
    调整Map和Reduce任务内存(mapreduce.map.memory.mbmapreduce.reduce.memory.mb,根据集群资源设置);启用推测执行(mapreduce.map.speculative为true,mapreduce.reduce.speculative为true,对慢任务启动备份任务,提升整体作业速度)。

0