Ubuntu下Hadoop任务调度的实现流程与优化方法
在Ubuntu上进行Hadoop任务调度前,需完成Hadoop集群的基础部署(单机/伪分布式模式即可满足学习需求)。核心步骤包括:
sudo apt install openjdk-11-jdk安装,并配置JAVA_HOME环境变量(添加至~/.bashrc);sudo useradd -m hadoop -s /bin/bash创建专用用户,提升安全性;/usr/local/hadoop,并配置环境变量(PATH包含$HADOOP_HOME/sbin和$HADOOP_HOME/bin);$HADOOP_HOME/etc/hadoop/core-site.xml,设置fs.defaultFS为hdfs://localhost:9000(伪分布式模式下);hdfs-site.xml,设置dfs.replication为1(伪分布式下仅需1个副本);hadoop namenode -format,初始化HDFS元数据;start-dfs.sh,通过jps命令验证NameNode、DataNode进程是否启动。Hadoop 2.0及以上版本采用YARN(Yet Another Resource Negotiator)替代传统MapReduce的JobTracker/TaskTracker架构,负责资源管理与任务调度。配置步骤如下:
mapred-site.xml(若不存在,将mapred-site.xml.template重命名为mapred-site.xml),添加mapreduce.framework.name属性,值为yarn;yarn-site.xml,设置yarn.nodemanager.aux-services为mapreduce.shuffle(启用MapReduce shuffle服务),yarn.resourcemanager.hostname为当前主机名(如localhost);start-yarn.sh,通过jps命令验证ResourceManager、NodeManager进程是否启动;mapred --daemon start historyserver,用于保存和查看任务运行日志(Web界面访问http://localhost:19888)。使用hadoop jar命令提交编译好的MapReduce程序(如Hadoop自带的grep示例):
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'
其中,input为HDFS输入目录(需提前上传数据,如hdfs dfs -put ./etc/hadoop/*.xml input),output为HDFS输出目录(需确保不存在,否则报错)。
http://localhost:8088访问YARN ResourceManager,查看集群资源使用情况、任务队列及运行状态;yarn application -list:列出所有运行/等待的任务;yarn application -status <application_id>:查看指定任务的详细信息(如进度、日志链接)。YARN支持多种调度器,可根据集群规模与业务需求选择:
default、high_priority),每个队列分配固定资源(如yarn.scheduler.capacity.root.default.capacity=50%),队列内任务按FIFO执行;yarn-site.xml,添加队列容量配置。yarn-site.xml,设置yarn.scheduler.fair.allocation.file指向分配文件(如fair-scheduler.xml),定义队列权重(如<queue name="default">weight=1</queue>)。hdfs dfs -rm -r output),或在代码中添加outputPath.getFileSystem(conf).delete(outputPath, true)自动删除;yarn.resourcemanager.hostname配置的主机名是否正确,或端口(8088)是否被占用;/user/hadoop)有读写权限(hdfs dfs -chown -R hadoop:hadoop /user/hadoop)。