Hadoop学习之MapReduce(四)


接下来是跟MapReduce目录结构有关的参数。首先看两个参数,分别为在core-default.xml中定义的hadoop.tmp.dir,其默认值为/tmp/hadoop-${user.name},另一个为定义在mapred-default.xml中的mapred.local.dir,该参数指定了保存MapReduce中间数据文件的目录,其默认值为${hadoop.tmp.dir}/mapred/local。在下面的学习中将会直接引用mapred.local.dir。TaskTracker拥有本地目录,目录${mapred.local.dir}/taskTracker/用于创建本地缓存和本地作业。可以定义多个本地目录(分布在多个硬盘上)并且每个文件名被半随机地分配到本地目录中。当作业启动时,TaskTracker创建与本地目录(该目录由配置参数指定)相关的本地作业目录。这样,TaskTracker目录结构就像下面描述的:

  • ${mapred.local.dir}/taskTracker/$user/jobcache/$jobid/work/:特定作业的共享目录,任务可以使用该空间作为临时空间并且在彼此间共享文件。该目录通过配置参数 job.local.dir对用户可见,可以通过JobConf.getJobLocalDir()访问,也可以作为系统属性访问,这样用户可以通过调用System.getProperty("job.local.dir")访问该目录。
  • ${mapred.local.dir}/taskTracker/$user/jobcache/$jobid/jars/:Jar文件目录,作业jar文件和扩展的jar文件保存在该目录下。Job.jar作为应用程序的jar文件自动得分布在每台机器上,在作业的任务启动之前该jar文件扩展到jar目录中。Job.jar的位置可以通过Job.getJar()访问。
  • ${mapred.local.dir}/taskTracker/$user/jobcache/$jobid/job.xml:Job.xml文件,通用的作业配置管理文件,作业的本地化文件。
  • ${mapred.local.dir}/taskTracker/$user/jobcache/$jobid/$taskid:每次任务尝试的任务目录。每个任务目录又有下面的结构:

在上面提到了JVM重用,现在就来了解一下。通过执行作业的配置参数mapred.job.reuse.jvm.num.tasks启用任务的JVMs重用功能。如果该值为1(默认值),JVMs是不可以重用的(每个JVM运行一个任务),如果值为-1,一个JVM可以运行的任务数量是没有限制的(相同作业)。

下表中的参数在每个任务执行时在作业的配置管理中本地化:

参数名

类型

描述

mapred.job.id

String

作业ID

mapred.jar

String

作业目录中job.jar的位置

job.local.dir

String

作业指定的共享临时空间

mapred.tip.id

String

任务ID

mapred.task.id

String

任务的尝试ID

mapred.task.is.map

boolean

是否是map任务

mapred.task.partition

int

在作业内为任务分配的ID

map.input.file

String

Mapper读取数据的文件名

map.input.start

long

InputSplit起始位置的偏移

map.input.length

long

InputSplit的字节数。

mapred.work.output.dir

String

任务的临时输出目录

需要注意的是,在执行一个流(Streaming)作业时,“mapred”参数需要进行转换,点(.)变为了下划线(_)。比如,mapred.job.id变为了mapred_job_id,mapred.jar变为了mapred_jar。使用带下划线的参数名取得流作业中mapper/reducer任务的值。

任务的标准输出(stdout)和错误输出(stderr)被TaskTracker读取并被记录到${HADOOP_LOG_DIR}/userlogs,${HADOOP_LOG_DIR}的值可以在${HADOOP_HOME}\conf\hadoop-env.sh中指定,默认为$HADOOP_HOME/logs。

DistributedCache可以用来分布mapper和reducer任务使用的jar文件和本地库文件。子jvm总是将它的当前工作目录增加到java.library.path和LD_LIBRARY_PATH(Linux环境变量名,该环境变量主要用于指定查找共享库(动态链接库)时除了默认路径之外的其他路径。该路径>在默认路径之前查找)中,因此缓存的库文件可以通过System.loadLibrary 或者System.load加载。

至此,已经学完了MapReduce框架中与任务的执行和环境相关的知识,下面将会学习作业的提交、监控已经输入输出等内容。

相关内容