前言
在提交MR作业时,如何将第三方依赖的jar追加运行环境
解决方法
首先构建一个项目基本架构,包括bin、lib等文件夹,,如下:
[lqz@test app]$ tree .
.
├── bin
│ └── startup.sh
└── lib
├── aopalliance-1.0.jar
├── ......
├── hbase-load-0.0.1-SNAPSHOT.jar
├── ......
└── zookeeper-3.4.10.jar
2 directories, 139 files
[lqz@test app]$
一般需要将MR提交封装成脚本(startup.sh)中,以便进行启动,例如如下脚本:
#!/bin/sh
INPUT_PATH=$1
OUTPUT_PATH=$2
HBASE_TABLE=$3
echo "============INPUT_PATH: $INPUT_PATH ============="
echo "============OUTPUT_PATH: $OUTPUT_PATH ============="
echo "============HBASE_TABLE: $HBASE_TABLE ============="
for JAR in `ls ../lib/*.jar`
do
LIBJARS=$JAR,$LIBJARS
HADOOPCLASSPATH=$JAR:$HADOOPCLASSPATH
done
export LIBJARS=$LIBJARS
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HADOOPCLASSPATH
yarn jar ../lib/hbase-load-0.0.1-SNAPSHOT.jar "${INPUT_PATH}" "${OUTPUT_PATH}" "${HBASE_TABLE}" \
-libjars $LIBJARS
注意事项
针对封装到脚本中的命令:yarn jar hbase-load-0.0.1-SNAPSHOT.jar [arguments] ,如果在进行打包的时候,已经将程序入口类写在了MANIFEST.MF里面, 那么jar包后边不要再指定程序入口类,如下截图:
如果没在MANIFEST.MF指定程序入口类,那么就需要在命令指定,即,yarn jar hbase-load-0.0.1-SNAPSHOT.jar com.lqz.hbase.load.Main [arguments] 。