如何让Hadoop部署jar到集群?
How to let Hadoop deploy jars to the cluster?
我已阅读Using the libjars option with Hadoop and Hadoop: Implementing the Tool interface for MapReduce driver,我已关注博客以实现我的作业运行程序。
我的 map reduce 函数是在 Scala 中实现的,如果我使用 Proguard 将 scala-library 打包到我的 jar 中,效果很好。现在我想分离 scala-library 以进一步减小我的 jar 大小。
在我分离 scala-library 之后,我 运行 这个命令:
HADOOP_ROOT_LOGGER=ALL,console hadoop jar /path/to/my.jar com.scala.mapreduce.Main -files /hdfs/path/to/scala-library.jar -libjars /hdfs/path/to/scala-library.jar /path/to/input /path/to/output
- 我不确定是否需要-文件选项
- 我试过各种路径格式,包括
file:///...
、OS特定格式、HDFS格式
我得到的错误表明 hadoop 找不到 scala-library:
Exception in thread "main" java.lang.NoClassDefFoundError:
scala/collection/immutable/StringOps
...
- 不,您不需要 -files 选项
- 除了添加到 libjars 之外,您还需要将 scala 库添加到 HADOOP_CLASSPATH
这是我们添加 MapReduce 作业所需的额外 jar 的方法。
HADOOP_CLASSPATH=$HADOOP_CLASSPATH:mylib.jar
LIB_JARS=$(echo $HADOOP_CLASSPATH | sed -e "s/:/,/g")
hadoop jar ... -libjars $LIB_JARS ...
这对我们来说效果很好。但是,我们的政策是只对环境 jar(例如 HCatalog、HBase 等)执行此操作。任何其他罐子都被包装到我们的胖罐子里。由于所有这些都在我们的防火墙后面,带宽从来都不是问题,所以我们不用担心 jars 的大小。
我已阅读Using the libjars option with Hadoop and Hadoop: Implementing the Tool interface for MapReduce driver,我已关注博客以实现我的作业运行程序。
我的 map reduce 函数是在 Scala 中实现的,如果我使用 Proguard 将 scala-library 打包到我的 jar 中,效果很好。现在我想分离 scala-library 以进一步减小我的 jar 大小。
在我分离 scala-library 之后,我 运行 这个命令:
HADOOP_ROOT_LOGGER=ALL,console hadoop jar /path/to/my.jar com.scala.mapreduce.Main -files /hdfs/path/to/scala-library.jar -libjars /hdfs/path/to/scala-library.jar /path/to/input /path/to/output
- 我不确定是否需要-文件选项
- 我试过各种路径格式,包括
file:///...
、OS特定格式、HDFS格式
我得到的错误表明 hadoop 找不到 scala-library:
Exception in thread "main" java.lang.NoClassDefFoundError: scala/collection/immutable/StringOps ...
- 不,您不需要 -files 选项
- 除了添加到 libjars 之外,您还需要将 scala 库添加到 HADOOP_CLASSPATH
这是我们添加 MapReduce 作业所需的额外 jar 的方法。
HADOOP_CLASSPATH=$HADOOP_CLASSPATH:mylib.jar
LIB_JARS=$(echo $HADOOP_CLASSPATH | sed -e "s/:/,/g")
hadoop jar ... -libjars $LIB_JARS ...
这对我们来说效果很好。但是,我们的政策是只对环境 jar(例如 HCatalog、HBase 等)执行此操作。任何其他罐子都被包装到我们的胖罐子里。由于所有这些都在我们的防火墙后面,带宽从来都不是问题,所以我们不用担心 jars 的大小。