如何在Hadoop环境中添加外部罐子



我在运行地图时面临一些问题。
我已经使用JSON JAR来处理HDFS中的JSON文件,但我写了逻辑,但是在运行作业时会出现错误(找不到类意味着ClassNotFoundException(。
我不知道hadoop如何检测我的罐子放置在哪里。
在哪里设置jar路径和哪个文件?
谁能解决我的问题?

set 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

实际上,我不知道Hadoop如何检测我的罐子放置在哪里

它从纱线容器的类路径读取。

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


(可以说(处理JSON的(可以说(可以使用火花,钻或Hive

假设您的项目是一个Maven项目,只需创建一个带有所有依赖罐的胖罐即可。请参阅此处:

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

和依赖的罐子将可用于类路径。另一个选项是将JAR添加到驱动程序类中的分布式缓存:

DistributedCache.addFileToClassPath(yourJar, conf);

另一个选择是在Hadoop Class Path中设置JAR。

export HADOOP_CLASSPATH=3rd_party_jar

最新更新