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示例),實現定時提交作業。這種方式適合簡單的周期性任務,無需復雜依賴管理。