【问题标题】:How to add External Jar in hadoop Environment?如何在 hadoop 环境中添加外部 Jar?
【发布时间】:2018-02-27 07:11:19
【问题描述】:

我在运行 map reduce 作业时遇到了一些问题。
我已经使用 JSON jar 来处理 HDFS 中的 JSON 文件并编写了逻辑,但是在运行作业时出现错误(无法找到类意味着 ClassNotFoundException)。
我不知道 HADOOP 是如何检测到我的罐子放在哪里的。
在哪里设置 jar 路径以及在哪个文件中?
谁能解决我的问题?

【问题讨论】:

    标签: java hadoop mapreduce


    【解决方案1】:

    设置 HADOOP_CLASSPATH 环境变量

    export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:<DEPENDENT_JARS_USED_BY_ CLIENT_CLASS>
    

    提交作业时使用 -libjars 选项

    hadoop jar example.jar com.example.Tool -libjars mysql-connector-java.jar,abc.jar
    

    【讨论】:

      【解决方案2】:

      其实我不知道 HADOOP 是如何检测到我的罐子放在哪里的

      它从 YARN 容器的类路径中读取。

      添加库的最简单方法是,将所需的任何 JSON 库“隐藏”(使用 Maven)到 MapReduce 程序的 JAR 文件中。


      (可以说)更简单的处理 JSON 的方法是使用 Spark、Drill 或 Hive

      【讨论】:

        【解决方案3】:

        假设您的项目是一个 maven 项目,只需创建一个包含所有依赖 jar 的胖 jar。见这里:

        https://www.mkyong.com/maven/create-a-fat-jar-file-maven-assembly-plugin/

        并且依赖的 jar 将可用于类路径。 另一种选择是将 jar 添加到驱动程序类中的分布式缓存中:

        DistributedCache.addFileToClassPath(yourJar, conf);
        

        另一个选项是在 hadoop 类路径中设置 jar。

        export HADOOP_CLASSPATH=3rd_party_jar
        

        【讨论】:

        • 已添加可能的解决方案,请查看并告诉我。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-29
        • 2019-12-19
        相关资源
        最近更新 更多