Hadoop map reduce作业中的第三方JAR
我的map reduce工作依赖于第三方库,如hive-hcatalog-xxx.jar。我所有的工作都是通过oozie完成的。Mapreduce作业通过java操作运行。在我的工作中加入第三方库的最佳方式是什么?我有两个选择Hadoop map reduce作业中的第三方JAR,hadoop,jar,mapreduce,oozie,Hadoop,Jar,Mapreduce,Oozie,我的map reduce工作依赖于第三方库,如hive-hcatalog-xxx.jar。我所有的工作都是通过oozie完成的。Mapreduce作业通过java操作运行。在我的工作中加入第三方库的最佳方式是什么?我有两个选择 将所有依赖jar捆绑到主jar中,并创建一个胖jar 将所有依赖JAR保留在HDFS位置,并通过-libjars选项添加它 我可以选择哪一个?请给我一些建议 由于我的mapreduce作业是通过oozie的java操作调用的,因此oozie lib文件夹中可用的库不会添加
lib/
文件夹,其中包含更多依赖的jar(一种称为“Uber”jar的结构),您可以通过常规的“hadoop-jar”命令提交作业,这些lib/.jar被框架拾取,因为提供的jar是通过conf.setJarByClass
或conf.setJar
显式指定的。也就是说,如果这个用户uber-jar作为mapred…jar进入JT,那么框架会正确地处理它,lib/.jar都会被考虑并放在类路径上
为什么
其优点是,您可以分发uber jar,而不必关心目的地是否安装了依赖项,因为您的uber jar实际上没有依赖项
当我的mapreduce作业通过oozie的java操作调用时
oozie lib文件夹中可用的库未添加到类路径
映射器/还原器的名称。如果我将此java操作更改为map reduce操作,
罐子有空吗
对于上述问题,由于答案是广泛的
我有,&
对于您来说,您显然可以采用您建议的方法,但是Oozie已经为hcatalog
准备了sharelib。您可以在job.properties
中将它们与oozie.action.sharelib.for.actiontype
属性一起开箱即用。对于java
操作,您可以指定:
oozie.action.sharelib.for.java=hcatalog
这将把库从oozie共享库hcatalog
加载到启动程序作业中。这应该可以完成任务
您可以在此处签出hcatalog
的内容:
hdfs dfs -ls /user/oozie/share/lib/lib_*/hcatalog
非常感谢你的回答。Uber jar的大小会更大,它会影响工作启动时间吗?因为它的单个jar存在位差;与spark相关的开发也是如此,大多数人都在使用uber jar