Debian下Hadoop作业调度方法
YARN是Hadoop的资源管理核心,其内置三种调度器可满足不同资源分配需求,需通过修改mapred-site.xml(指定调度器类)和yarn-site.xml(调整资源参数)配置:
mapreduce.jobtracker.taskScheduler为org.apache.hadoop.mapred.FifoScheduler即可启用。mapreduce.job.queues=default:80%),支持多租户共享集群,适合生产环境。需在mapred-site.xml中设置mapreduce.jobtracker.taskScheduler为org.apache.hadoop.mapred.CapacityTaskScheduler,并在capacity-scheduler.xml中定义队列容量。yarn.scheduler.fair.user-as-default-queue=true),适合多用户交互式任务。需在mapred-site.xml中设置mapreduce.jobtracker.taskScheduler为org.apache.hadoop.mapred.FairScheduler,并在fair-scheduler.xml中配置队列权重。对于周期性Hadoop作业(如每日ETL),可通过Debian的cron工具实现定时触发。编辑当前用户的cron表(crontab -e),添加定时任务(如每天午夜执行MapReduce作业):
0 0 * * * /usr/local/hadoop/bin/hadoop jar /path/to/job.jar com.example.YourJobClass /input/path /output/path >> /var/log/hadoop_job.log 2>&1
该配置会每天00:00执行指定作业,并将输出和错误日志重定向到/var/log/hadoop_job.log。
Oozie是Hadoop生态的开源工作流调度系统,支持定义复杂作业依赖(如MapReduce→Hive→Spark)。步骤如下:
/usr/local,编辑oozie-site.xml配置Hadoop路径(oozie.service.HadoopAccessorService.hadoop.configurations指向$HADOOP_HOME/conf),启动Oozie(oozie start)。workflow.xml)定义作业流程,例如:<workflow-app xmlns="uri:oozie:workflow:1.0" name="etl-workflow">
<start to="map-reduce-node"/>
<action name="map-reduce-node">
<map-reduce>
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<configuration>
<property><name>mapred.job.queue.name</name><value>default</value></property>
</configuration>
</map-reduce>
<ok to="end"/>
<error to="fail"/>
</action>
<kill name="fail">
<message>MapReduce job failed: ${wf:errorMessage(wf:lastErrorNode())}</message>
</kill>
<end name="end"/>
</workflow-app>
job.properties文件(指定Oozie URL、工作流路径),执行oozie job -config job.properties -run提交作业。Azkaban是LinkedIn开源的轻量级调度器,配置简单,适合中小型项目。步骤如下:
azkaban.properties配置数据库(如MySQL)和邮件通知。job1.sh,包含hadoop jar命令)打包为zip文件,上传至Azkaban Web界面。job1完成后执行job2),设置定时调度(如每小时执行)。对于需要定时触发YARN作业的场景,可将yarn jar命令与Cron结合(如上述Cron示例),实现定时提交作业。这种方式适合简单的周期性任务,无需复杂依赖管理。