map reduce作业中的第三方jar

mtb9vblg  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(408)

我的map reduce工作依赖于第三方库,比如hive-hcatalog-.jar。我所有的工作都是通过oozie来完成的。mapreduce作业通过java操作运行。在我的工作中加入第三方库的最佳方式是什么?我手头有两个选择
将所有依赖jar捆绑到主jar中,并创建一个胖jar。
将所有依赖jar保存在hdfs位置,并通过-libjars选项添加它
我能选哪一个?请给我建议。
由于我的mapreduce作业是通过oozie的java操作调用的,因此oozie lib文件夹中可用的库不会添加到mapper/reducer的类路径中。如果我将这个java操作更改为map reduce操作,jar是否可用?
提前谢谢。

omhiaaxx

omhiaaxx1#

显然,您可以采用您建议的方法,但是oozie已经为sharelib做好了准备 hcatalog . 你可以用他们的开箱即用 oozie.action.sharelib.for.actiontype 你的财产 job.properties . 对于 java 可以指定的操作:

  1. oozie.action.sharelib.for.java=hcatalog

这将从oozie共享库加载库 hcatalog 进入你的发射器工作。这样就可以了。
您可以 checkout hcatalog 在这里:

  1. hdfs dfs -ls /user/oozie/share/lib/lib_*/hcatalog
cvxl0en2

cvxl0en22#

1.将所有依赖jar捆绑到主jar中,并创建一个fat jar。或者2.将所有依赖jar保存在一个hdfs位置,并通过-libjars选项添加它我可以选择哪一个?
不过,这两种方法都在实践中。我建议你使用uberjar,即你的第一种方法。
uberjar:一个有 lib/ 其中包含更多依赖jar(一种称为“uber”jar的结构)的文件夹,并且您通过常规的“hadoop jar”命令提交作业,这些lib/.jar会被框架获取,因为提供的jar是通过 conf.setJarByClass 或者 conf.setJar . 也就是说,如果这个用户uberjar以mapred…jar的身份进入jt,那么框架会正确地处理它,lib/.jar都会被考虑并放在 classpath .
为什么?
这样做的好处是,你可以分发你的uberjar,而完全不在乎目的地是否安装了依赖项,因为你的uberjar实际上没有依赖项。
由于我的mapreduce作业是通过oozie的java操作调用的,因此oozie lib文件夹中可用的库不会添加到mapper/reducer的类路径中。如果我将这个java操作更改为map reduce操作,jar是否可用?
对于上述问题,由于答案是广泛的,
我有 sharelib cdh4.xx、cdh5.xx的链接&如何使用oozie shre lib配置mapreduce操作。为你

相关问题