如何让Hadoop将jar部署到集群?

时间:2015-02-07 00:32:49

标签: java scala hadoop

我已阅读Using the libjars option with HadoopHadoop: 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
  • 确定我是否需要 -files 选项
  • 我尝试了不同的路径格式,包括file:///...,操作系统特定格式,HDFS格式

我收到的错误表明hadoop无法找到 scala-library

  

线程“main”中的异常java.lang.NoClassDefFoundError:   斯卡拉/收集/不变/ StringOps   ...

1 个答案:

答案 0 :(得分:0)

  1. 不,您不需要-files选项
  2. 除了添加到libjars之外,还需要将scala库添加到HADOOP_CLASSPATH
  3. 以下是我们如何添加MapReduce作业所需的其他jar。

    HADOOP_CLASSPATH=$HADOOP_CLASSPATH:mylib.jar
    LIB_JARS=$(echo $HADOOP_CLASSPATH | sed -e "s/:/,/g")
    hadoop jar ... -libjars $LIB_JARS ...
    

    这对我们来说非常有效。但是,我们的政策只针对环境罐(例如HCatalog,HBase等)。任何其他罐子都装在我们的肥皂罐里。由于所有这些都在我们的防火墙之后,带宽从来就不是问题,所以我们不担心我们的罐子的大小。