如何在hadoop环境中添加外部Jar?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在hadoop环境中添加外部Jar?相关的知识,希望对你有一定的参考价值。

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

答案

实际上我不知道HADOOP如何能够检测到我的罐子放在哪里

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

添加库的最简单方法是,如果你在MapReduce程序的JAR文件中“遮蔽”(使用Maven)你需要的任何JSON库。


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

另一答案

设置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
另一答案

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

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

并且依赖的jar将可用于类路径。另一个选择是将jar添加到驱动程序类中的Distributed cache:

DistributedCache.addFileToClassPath(yourJar, conf);

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

export HADOOP_CLASSPATH=3rd_party_jar

以上是关于如何在hadoop环境中添加外部Jar?的主要内容,如果未能解决你的问题,请参考以下文章

Intellij IDEA在maven项目中添加外部Jar包运行

hadoop开发环境搭建

如何为maven项目添加依赖? (如何从外部 jar 文件中找出 GroupID / ArtifactID)[重复]

如何给Eclipse中添加库(jar包)

如何添加外部jar

Hadoop外部罐子