您的位置:首页 > 运维架构

Hadoop学习之MapReduce(四)

2014-05-07 17:15 218 查看
接下来是跟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/distcache/:所有用户的作业的公有分布式缓存。该目录保存本地的公有分布式缓存,这样本地的公有分布式缓存就可以在所有用户的所有任务和作业之间共享。
${mapred.local.dir}/taskTracker/$user/distcache/ :特定用户的作业的私有分布式缓存目录。该目录保存本地化的私有分布式缓存,这样本地的私有分布式缓存在仅在特定用户的任务和作业之间共享,其他用户的作业不可以访问该目录。
${mapred.local.dir}/taskTracker/$user/jobcache/$jobid/:本地化作业的目录。

${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:每次任务尝试的任务目录。每个任务目录又有下面的结构:

${mapred.local.dir}/taskTracker/$user/jobcache/$jobid/$taskid/job.xml:一个job.xml文件,用于任务本地化作业的配置管理。任务本地化意味着属性或者参数已经被指定为该特定任务所用。每个任务的本地化属性描述如下。
${mapred.local.dir}/taskTracker/$user/jobcache/$jobid/$taskid/output:用于中间输出文件的目录。该目录包含由MapReduce框架产生的临时mapper和reducer数据,比如mapper的输出文件等。
${mapred.local.dir}/taskTracker/$user/jobcache/$jobid/$taskid/work:任务的当前工作目录。在启用任务的jvm reuse时,该目录将会是jvm启动目录。
${mapred.local.dir}/taskTracker/$user/jobcache/$jobid/$taskid/work/tmp :任务的临时目录(用户可以通过制定 mapred.child.tmp属性设置mapper和reducer任务的临时目录,默认为./tmp。如果该值不是绝对路径,将使用任务的工作目录,否则将会被直接指定。如果该目录不存在将会被创建。这样,子Java任务使用-Djava.io.tmpdir='theabsolute
path of the tmp dir'选项执行。管道和流使用环境变量设置,TMPDIR='the absolute path of the tmp dir')。如果mapred.child.tmp的值为./tmp,该目录已经创建了。

在上面提到了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框架中与任务的执行和环境相关的知识,下面将会学习作业的提交、监控已经输入输出等内容
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: