Linux上Hadoop作业调度管理指南
在Linux上调度Hadoop作业前,需完成集群基础配置,确保HDFS(分布式存储)和YARN(资源管理与调度)正常运行。核心步骤包括:
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等进程是否正常运行。使用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)。yarn jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples.jar wordcount /input /output
YARN支持三种主要调度器,需根据集群规模和业务需求选择:
mapreduce.job.priority参数设置(值为VERY_HIGH、HIGH、NORMAL、LOW、VERY_LOW)。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>
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>
YARN提供一系列命令行工具,用于管理作业生命周期:
yarn application -list(显示作业ID、用户、队列、状态、进度);yarn application -status <application_id>(如yarn application -status application_1234567890000_0001,显示作业日志链接、计数器等信息);yarn application -kill <application_id>(终止指定作业)。http://<resourcemanager_host>:8088,可查看集群概览、队列资源使用情况、作业列表及详情(如Map/Reduce任务进度、资源占用);http://<nodemanager_host>:8042,可查看节点资源使用情况、运行的容器信息。对于周期性或复杂的作业流程,可使用自动化调度工具:
crontab -e,添加0 2 * * * /bin/bash /path/to/submit_job.sh(每天凌晨2点执行submit_job.sh脚本);oozie命令或Web界面提交工作流;HadoopMROperator、BashOperator),适合大规模、跨系统的作业调度。mapreduce.map.memory.mb、mapreduce.reduce.memory.mb)和CPU核心数(mapreduce.map.cpu.vcores、mapreduce.reduce.cpu.vcores),避免资源浪费或不足;yarn.resourcemanager.am.max-attempts配置重试次数),确保作业幂等性(如避免重复写入数据);yarn.scheduler.capacity.root.team1.acl_submit_applications设置队列提交权限),防止未授权访问。