欢迎来到天天文库
浏览记录
ID:55164495
大小:84.49 KB
页数:15页
时间:2020-04-29
《hadoop提交作业分析.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、Hadoop提交作业流程分析bin/hadoopjarxxx.jarmainclassargs…… 这样的命令,各位玩Hadoop的估计已经调用过NN次了,每次写好一个Project或对Project做修改后,都必须打个Jar包,然后再用上面的命令提交到HadoopCluster上去运行,在开发阶段那是极其繁琐的。程序员是“最懒”的,既然麻烦肯定是要想些法子减少无谓的键盘敲击,顺带延长键盘寿命。比如有的人就写了些Shell脚本来自动编译、打包,然后提交到Hadoop。但还是稍显麻烦,目前比较方便的方法就是用Hadoopeclipseplugi
2、n,可以浏览管理HDFS,自动创建MR程序的模板文件,最爽的就是直接Runonhadoop了,但版本有点跟不上Hadoop的主版本了,目前的MR模板还是0.19的。还有一款叫HadoopStudio的软件,看上去貌似是蛮强大,但是没试过,这里不做评论。那么它们是怎么做到不用上面那个命令来提交作业的呢?不知道?没关系,开源的嘛,不懂得就直接看源码分析,这就是开源软件的最大利处。我们首先从bin/hadoop这个Shell脚本开始分析,看这个脚本内部到底做了什么,如何来提交Hadoop作业的。因为是Java程序,这个脚本最终都是要调用Java来运行
3、的,所以这个脚本最重要的就是添加一些前置参数,如CLASSPATH等。所以,我们直接跳到这个脚本的最后一行,看它到底添加了那些参数,然后再逐个分析(本文忽略了脚本中配置环境参数载入、Java查找、cygwin处理等的分析)。#runitexec"$JAVA"$JAVA_HEAP_MAX$HADOOP_OPTS-classpath"$CLASSPATH"$CLASS"$@" 从上面这行命令我们可以看到这个脚本最终添加了如下几个重要参数:JAVA_HEAP_MAX、HADOOP_OPTS、CLASSPATH、CLASS。下面我们来一个个的分析(本
4、文基于ClouderaHadoop0.20.1+152分析)。 首先是JAVA_HEAP_MAX,这个就比较简单了,主要涉及代码如下:JAVA_HEAP_MAX=-Xmx1000m#checkenvvarswhichmightoverridedefaultargsif["$HADOOP_HEAPSIZE"!=""];then#echo"runwithheapsize$HADOOP_HEAPSIZE"JAVA_HEAP_MAX="-Xmx""$HADOOP_HEAPSIZE""m"#echo$JAVA_HEAP_MAXfi 首先赋予默认值-X
5、mx1000m,然后检查hadoop-env.sh中是否设置并导出了HADOOP_HEAPSIZE,如果有的话,就使用该值覆盖,得到最后的JAVA_HEAP_MAX。 接着是分析CLASSPATH,这是这个脚本的重点之一。这部分主要就是添加了相应依赖库和配置文件到CLASSPATH。#首先用Hadoop的配置文件目录初始化CLASSPATHCLASSPATH="${HADOOP_CONF_DIR}"……#下面是针对于Hadoop发行版,添加Hadoop核心Jar包和webapps到CLASSPATHif[-d"$HADOOP_HOME/web
6、apps"];thenCLASSPATH=${CLASSPATH}:$HADOOP_HOMEfiforfin$HADOOP_HOME/hadoop-*-core.jar;doCLASSPATH=${CLASSPATH}:$f;done#添加libs里的Jar包forfin$HADOOP_HOME/lib/*.jar;doCLASSPATH=${CLASSPATH}:$f;Doneforfin$HADOOP_HOME/lib/jsp-2.1/*.jar;doCLASSPATH=${CLASSPATH}:$f;done#下面的TOOL_PATH只在
7、命令为“archive”时才添加到CLASSPATHforfin$HADOOP_HOME/hadoop-*-tools.jar;doTOOL_PATH=${TOOL_PATH}:$f;doneforfin$HADOOP_HOME/build/hadoop-*-tools.jar;doTOOL_PATH=${TOOL_PATH}:$f;done#最后添加用户的自定义HadoopClasspathif["$HADOOP_CLASSPATH"!=""];thenCLASSPATH=${CLASSPATH}:${HADOOP_CLASSPATH}fi
8、 上面只分析一部分,由于代码比较长,针对开发者部分的CLASSPATH添加没有列出来。 下面是这个脚本的重点、实体之处:CLASS分析。Shell脚
此文档下载收益归作者所有