温馨提示×

Hadoop作业Ubuntu上如何调度

小樊
43
2025-10-19 00:24:07
栏目: 智能运维

Hadoop作业在Ubuntu上的调度方法

一、基础环境准备

在Ubuntu上调度Hadoop作业前,需完成以下基础配置:

  1. 安装Hadoop:从Apache官网下载稳定版本,解压至指定目录(如/opt/hadoop),配置核心环境变量(HADOOP_HOMEPATH),并修改core-site.xml(设置HDFS地址,如fs.defaultFS=hdfs://localhost:9000)、hdfs-site.xml(设置副本数,如dfs.replication=1)、yarn-site.xml(配置ResourceManager主机,如yarn.resourcemanager.hostname=localhostyarn.nodemanager.aux-services=mapreduce_shuffle)、mapred-site.xml(指定框架为YARN,如mapreduce.framework.name=yarn)等文件。
  2. 启动Hadoop集群:在Ubuntu终端执行start-dfs.sh启动HDFS服务,start-yarn.sh启动YARN服务,确保NameNode、DataNode、ResourceManager、NodeManager等进程正常运行。

二、提交Hadoop作业

Hadoop作业提交的基本流程如下:

  1. 编写作业代码:使用Java编写MapReduce程序(或通过Hadoop Streaming支持Python、C++等语言),实现MapperReducer逻辑,并编译打包为JAR文件(如hadoop-mapreduce-examples-3.3.6.jar为官方示例)。
  2. 上传作业与数据到HDFS:使用hadoop fs -put命令将作业JAR文件、输入数据上传至HDFS指定路径(如hadoop fs -put /local/path/job.jar /hdfs/input/job.jarhadoop fs -put /local/path/input.txt /hdfs/input/input.txt)。
  3. 提交作业到YARN:通过hadoop jar命令提交作业,指定JAR路径、主类、输入输出路径(如hadoop jar /hdfs/input/job.jar com.example.WordCount /hdfs/input/input.txt /hdfs/output/result)。提交后,YARN会分配资源并调度任务执行。

三、使用YARN内置调度器

YARN提供了三种内置调度器,可根据需求配置:

  1. FIFO调度器(默认):先进先出策略,先按作业优先级排序,再按提交时间依次执行。适用于批处理作业为主的场景,配置简单但无法兼顾短作业。
  2. 容量调度器(Capacity Scheduler):支持多队列资源分配(如defaultproduction队列),每个队列可设置资源占比(如mapred.capacity-scheduler.queue.default.capacity=50表示default队列占50%资源)、用户作业限制(如mapred.capacity-scheduler.queue.default.maximum-am-resource-percent=0.2限制该队列同时运行的ApplicationMaster资源占比)。适用于多租户环境,保证队列资源配额。
  3. 公平调度器(Fair Scheduler):以“公平”为核心,动态调整资源分配,确保所有作业均能获得资源(如mapred.fairscheduler.allocation.file=/opt/hadoop/conf/fair-scheduler.xml指定配置文件,配置队列权重<property><name>queueA.weight</name><value>2</value></property>表示queueA权重为2,资源分配为queueA:queueB=2:1)。适用于需要兼顾不同作业需求的场景。

四、自动化调度(Cron)

对于周期性作业(如每日日志分析),可使用Ubuntu的cron工具实现自动化提交:

  1. 安装与启动Cron:执行sudo apt-get update && sudo apt-get install cron安装,sudo service cron start启动服务(默认开机自启)。
  2. 创建调度脚本:编写Shell脚本(如/home/user/hadoop_job.sh),包含Hadoop环境变量设置与作业提交命令(如export HADOOP_HOME=/opt/hadoop$HADOOP_HOME/bin/hadoop jar /hdfs/input/job.jar com.example.WordCount /hdfs/input/input.txt /hdfs/output/result_$(date +\%Y\%m\%d)date +\%Y\%m\%d用于生成带日期的输出目录)。
  3. 配置Cron任务:执行crontab -e编辑当前用户的cron表,添加调度规则(如0 2 * * * /home/user/hadoop_job.sh表示每日凌晨2点执行脚本)。

五、使用专业调度工具

对于复杂场景(如多作业依赖、工作流管理),可使用以下工具:

  1. Apache Oozie:支持Hadoop作业的工作流调度(如MapReduce、Hive、Pig作业的依赖关系),通过oozie-site.xml配置Oozie服务,使用oozie job -run命令提交工作流(如oozie job -config /home/user/job.properties -run)。
  2. Apache Airflow:基于Python的编排工具,通过DAG(有向无环图)定义作业依赖关系,支持定时触发(如dag = DAG('hadoop_job', schedule_interval='@daily', start_date=datetime(2025, 1, 1))),并提供Web界面监控作业状态。

0