如何在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包运行