工学1号馆

home

Hadoop作业提交深度剖析3–作业文件上传

By Wu Yudong on June 27, 2015

原创文章,转载请注明: 转载自工学1号馆

本文主要剖析Hadoop作业提交系列的作业文件上传过程,后面将陆续介绍生成Split文件和作业的提交

JobClient将作业提交到JobTracker端之前,需要进行一些初始化工作,包括:获取作业ID,创建HDFS目录,上传作业文件以及生成Split文件等,这些工作由函数JobClient.submitJobInternal(job)实现。

MapReduce作业文件的上传和下载是由DistributedCache工具完成的,整个工作流程对用户而言是透明的,用户只需在提交作业时指定文件位置

通常而言,一个典型的java MapReduce作业,可能包含以下资源:

程序jar包:用户用java编写的MapReduce应用程序jar包

作业配置文件:描述MapReduce应用程序的配置信息(根据JobConf对象生成的xml文件))

依赖第三方jar包:应用程序依赖的第三方jar包,提交作业的时候用参数“-libjars”指定

依赖的归档文件:应用程序中用到多个文件,可以直接打包成归档文件(通常是一些压缩文件),提交作业的时候用参数“-archives”指定

依赖的普通文件:应用程序中可能用到普通文件,比如文本格式的字典文件,提交作业的时候用参数“-files”指定

应用程序依赖的文件可以放在本地,也可以放在HDFS上,默认放在本地。

上述多有的文件都在JobClient端被提交到HDFS上,涉及的父目录如下表:

作业属性 属性值 说明
mapreduce.jobtracker.staging.root.dir ${hadoop.tmp.dir}/mapred/staging HDFS上作业文件的上传目录,由管理员配置
mapreduce.job.dir ${mapreduce.jobtracker.staging.root.dir}/

${user}/.staging/${jobId}

用户${user}的作业${jobId}相关文件存放目录

文件上传完毕后,会将这些目录信息保存到作业配置对象JobConf中,其对应的作业属性如下表所示:

作业属性 说明
mapred.cache.files 作业依赖的普通文件在HDFS上的存放路径
mapred.job.classpath.archives 作业依赖的jar包在HDFS上的存放路径
mapred.cache.archives 作业依赖的压缩文件在HDFS上的存放路径
mapreduce.job.cache.files.visibilities 作业依赖的普通文件的可见性。如果是public可见性,则为true,否则为false
mapreduce.job.cache.archives.visibilities 作业依赖的归档文件的可见性。如果是public级别的可见性,则为true,否则为false
mapred.cache.files.timestamps 作业依赖的普通文件的最后一次修改时间的时间戳
mapred.cache.archives.timestamps 作业依赖的压缩文件的最后一次修改时间的时间戳
mapred.cache.files.filesizes 作业依赖的普通文件的大小
mapred.cache.archives.filesizes 作业依赖的归档文件的大小
mapred.jar 用户应用程序jar路径

作业文件上传到HDFS后,可能会有大量节点同时从HDFS上下载这些文件,进而产生文件访问热点现象,造成性能瓶颈。为此,JobClient上传这些文件时会调高它们的副本数(由参数mapred.submit.replication指定,默认是10)以通过分摊负载方式避免产生访问热点。

如果文章对您有帮助,欢迎点击下方按钮打赏作者

Comments

No comments yet.
To verify that you are human, please fill in "七"(required)