Linux上Hadoop作业如何调度管理
导读:Linux上Hadoop作业调度管理指南 一、前置准备:配置Hadoop集群环境 在Linux上调度Hadoop作业前,需完成集群基础配置,确保HDFS(分布式存储)和YARN(资源管理与调度)正常运行。核心步骤包括: 安装Hadoop:...
Linux上Hadoop作业调度管理指南
一、前置准备:配置Hadoop集群环境
在Linux上调度Hadoop作业前,需完成集群基础配置,确保HDFS(分布式存储)和YARN(资源管理与调度)正常运行。核心步骤包括:
- 安装Hadoop:从Apache官网下载稳定版本,解压至指定目录;
- 配置核心文件:编辑
etc/hadoop
目录下的core-site.xml
(集群通用配置,如HDFS地址)、hdfs-site.xml
(HDFS参数,如NameNode端口、数据块大小)、yarn-site.xml
(YARN参数,如ResourceManager地址、调度器类型)、mapred-site.xml
(MapReduce参数,如作业运行模式); - 设置环境变量:在
~/.bashrc
或~/.bash_profile
中添加HADOOP_HOME
(Hadoop安装路径)和PATH
(包含$HADOOP_HOME/bin
),使hadoop
、yarn
等命令全局可用; - 启动集群:执行
start-dfs.sh
启动HDFS,start-yarn.sh
启动YARN,通过jps
命令验证NameNode、DataNode、ResourceManager、NodeManager等进程是否正常运行。
二、提交Hadoop作业
使用yarn jar
命令将打包好的作业(如MapReduce的JAR文件)提交至YARN集群。基本语法如下:
yarn jar /path/to/job.jar MainClass input_path output_path [additional_args]
- 参数说明:
/path/to/job.jar
:作业JAR文件的HDFS或本地路径(建议上传至HDFS,如hdfs://namenode:8020/user/username/job.jar
);MainClass
:作业主类的全限定名(如com.example.WordCount
);input_path
:输入数据的HDFS路径(如hdfs://namenode:8020/input
);output_path
:输出数据的HDFS路径(需不存在,如hdfs://namenode:8020/output
);additional_args
:可选参数(如-D mapreduce.map.memory.mb=2048
设置Map任务内存为2GB)。
示例:提交Hadoop自带的WordCount示例作业:
yarn jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples.jar wordcount /input /output
三、选择与配置调度策略
YARN支持三种主要调度器,需根据集群规模和业务需求选择:
1. FIFO调度器(默认)
- 特点:先进先出,作业按提交顺序排队执行,先提交的作业优先占用资源。
- 适用场景:简单测试或小规模集群(作业量少、无优先级需求)。
- 配置:无需额外配置(YARN默认使用FIFO),若需调整优先级,可通过
mapreduce.job.priority
参数设置(值为VERY_HIGH
、HIGH
、NORMAL
、LOW
、VERY_LOW
)。
2. 容量调度器(Capacity Scheduler)
- 特点:支持多队列(如
default
、team1
、team2
),每个队列分配固定资源配额(如root.team1.capacity=30%
),队列内采用FIFO策略。可限制同一用户的资源使用量(如yarn.scheduler.capacity.root.team1.user-limit-factor=1
,表示用户最多使用队列的100%资源)。 - 适用场景:多团队/项目共享集群,需隔离资源、保证各团队资源配额。
- 配置步骤:
- 在
yarn-site.xml
中启用容量调度器:< property> < name> yarn.resourcemanager.scheduler.class< /name> < value> org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler< /value> < /property>
- 创建
capacity-scheduler.xml
,配置队列和资源:< configuration> < property> < name> yarn.scheduler.capacity.root.queues< /name> < value> default,team1,team2< /value> < /property> < property> < name> yarn.scheduler.capacity.root.default.capacity< /name> < value> 40< /value> < /property> < property> < name> yarn.scheduler.capacity.root.team1.capacity< /name> < value> 30< /value> < /property> < property> < name> yarn.scheduler.capacity.root.team2.capacity< /name> < value> 30< /value> < /property> < property> < name> yarn.scheduler.capacity.root.team1.user-limit-factor< /name> < value> 1< /value> < /property> < /configuration>
- 重启ResourceManager使配置生效。
- 在
3. 公平调度器(Fair Scheduler)
- 特点:以“公平”为核心,动态调整资源分配,使所有作业随时间推移获得相近的资源份额(如作业A和作业B各占50%资源)。支持资源池(Pool),可为不同用户或团队配置资源权重(如
pool.name.weight=2.0
,表示该池资源权重为2倍)。 - 适用场景:多用户共享集群,需动态平衡资源、避免作业饥饿。
- 配置步骤:
- 在
mapred-site.xml
中启用公平调度器:< property> < name> mapreduce.jobtracker.taskScheduler< /name> < value> org.apache.hadoop.mapred.FairScheduler< /value> < /property> < property> < name> mapred.fairscheduler.allocation.file< /name> < value> /path/to/fair-scheduler.xml< /value> < /property>
- 创建
fair-scheduler.xml
,配置资源池:< allocations> < pool name="high_priority"> < weight> 2.0< /weight> < minMaps> 5< /minMaps> < minReduces> 5< /minReduces> < /pool> < user name="admin"> < maxRunningJobs> 10< /maxRunningJobs> < /user> < userMaxJobsDefault> 3< /userMaxJobsDefault> < /allocations>
- 重启ResourceManager使配置生效。
- 在
四、监控与管理作业
1. 命令行工具
YARN提供一系列命令行工具,用于管理作业生命周期:
- 查看所有作业:
yarn application -list
(显示作业ID、用户、队列、状态、进度); - 查看作业详情:
yarn application -status < application_id>
(如yarn application -status application_1234567890000_0001
,显示作业日志链接、计数器等信息); - 杀死作业:
yarn application -kill < application_id>
(终止指定作业)。
2. Web界面
- ResourceManager Web UI:默认地址为
http://< resourcemanager_host> :8088
,可查看集群概览、队列资源使用情况、作业列表及详情(如Map/Reduce任务进度、资源占用); - NodeManager Web UI:默认地址为
http://< nodemanager_host> :8042
,可查看节点资源使用情况、运行的容器信息。
五、自动化调度(可选)
对于周期性或复杂的作业流程,可使用自动化调度工具:
- Cron:Linux系统自带的定时任务工具,适合简单的周期性作业(如每天凌晨执行数据备份)。示例:编辑
crontab -e
,添加0 2 * * * /bin/bash /path/to/submit_job.sh
(每天凌晨2点执行submit_job.sh
脚本); - Apache Oozie:工作流调度系统,支持定义作业依赖关系(如MapReduce→Hive→Spark),可编排复杂的工作流。需部署Oozie Server,通过
oozie
命令或Web界面提交工作流; - Apache Airflow:Python编写的编排平台,支持DAG(有向无环图)定义,提供丰富的Operator(如
HadoopMROperator
、BashOperator
),适合大规模、跨系统的作业调度。
六、优化与注意事项
- 资源分配:根据作业需求调整Map/Reduce任务的内存(
mapreduce.map.memory.mb
、mapreduce.reduce.memory.mb
)和CPU核心数(mapreduce.map.cpu.vcores
、mapreduce.reduce.cpu.vcores
),避免资源浪费或不足; - 日志分析:通过YARN Web界面的“Logs”链接查看作业日志,定位性能瓶颈(如数据倾斜、资源不足);
- 故障恢复:YARN支持作业自动重试(通过
yarn.resourcemanager.am.max-attempts
配置重试次数),确保作业幂等性(如避免重复写入数据); - 安全性:启用Kerberos认证,配置用户权限(如
yarn.scheduler.capacity.root.team1.acl_submit_applications
设置队列提交权限),防止未授权访问。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux上Hadoop作业如何调度管理
本文地址: https://pptw.com/jishu/733375.html