【问题标题】:Include Third Party Jars in Hadoop在 Hadoop 中包含第三方 Jar
【发布时间】:2013-05-02 14:03:47
【问题描述】:

我是 Hadoop 新手。我已将 Gson API 添加到我的 MapReducing 程序中。当我运行程序时得到;

Error: java.lang.ClassNotFoundException: com.google.gson.Gson

谁能建议我如何将第三方库添加到 Hadoop?

【问题讨论】:

标签: hadoop


【解决方案1】:

在提交作业时,请务必向 HADOOP_CLASSPATH 和 -libjars 添加任何依赖项,如下例所示:

使用以下命令添加当前目录和lib 目录中的所有 jar 依赖项:

export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:`echo *.jar`:`echo lib/*.jar | sed 's/ /:/g'`

请记住,通过hadoop jar 开始工作时,您还需要通过使用-libjars 将任何依赖项的jar 传递给它。我喜欢用:

hadoop jar <jar> <class> -libjars `echo ./lib/*.jar | sed 's/ /,/g'` [args...]

注意:sed 命令需要不同的分隔符; HADOOP_CLASSPATH 是 : 分隔的,-libjars 需要是 , 分隔的。

【讨论】:

  • 我尝试了你的建议,方法是 .. bin/hadoop jar /home/Projects/MyMaprunner/dist/progenMaprunner.jar -libjars /home/hadoopJar/gson-2.2.2.jar /myData /输出 arg1 arg2 在线程“main”org.apache.hadoop.mapreduce.lib.input.InvalidInputException 中出现异常:输入路径不存在:hdfs://localhost:9000/user/MyDesktop/-libjars
  • 查看此处发布的答案:stackoverflow.com/questions/6890087/…
【解决方案2】:

在 HADOOP_CLASSPATH 中添加 Jar

    vi $HADOOP_HOME/etc/hadoop/hadoop-env.sh

添加最后一行

export HADOOP_CLASSPATH=/root/hadoop/extrajars/java-json.jar:$HADOOP_CLASSPATH

"/root/hadoop/extrajars/java-json.jar" 是 linux box 本身而不是 HDFS 上的路径

重启hadoop

命令

hadoop classpath

应该在类路径中显示 jar

现在像往常一样运行 MR 作业

hadoop jar <MR-program jar> <MR Program class> <input dir> <output dir>

它将按预期使用文件。

【讨论】:

    猜你喜欢
    • 2011-03-31
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-17
    • 1970-01-01
    • 2013-10-11
    相关资源
    最近更新 更多