我已阅读Using the libjars option with Hadoop和Hadoop: Implementing the Tool interface for MapReduce driver,我已按照博客来实施我的职位。
我的地图缩减功能在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:///...
,操作系统特定格式,HDFS格式我收到的错误表明hadoop无法找到 scala-library :
线程“main”中的异常java.lang.NoClassDefFoundError: 斯卡拉/收集/不变/ StringOps ...
答案 0 :(得分:0)
以下是我们如何添加MapReduce作业所需的其他jar。
HADOOP_CLASSPATH=$HADOOP_CLASSPATH:mylib.jar
LIB_JARS=$(echo $HADOOP_CLASSPATH | sed -e "s/:/,/g")
hadoop jar ... -libjars $LIB_JARS ...
这对我们来说非常有效。但是,我们的政策只针对环境罐(例如HCatalog,HBase等)。任何其他罐子都装在我们的肥皂罐里。由于所有这些都在我们的防火墙之后,带宽从来就不是问题,所以我们不担心我们的罐子的大小。