地图中的第三方罐子减少了工作量

时间:2016-07-08 15:42:39

标签: hadoop jar mapreduce oozie

我的情况是我的地图减少工作依赖于第三方库,如hive-hcatalog-xxx.jar。我正在通过oozie完成所有工作。 Mapreduce作业通过java动作运行。在我的工作中包含第三方图书馆的最佳方式是什么?我有两个选择

  1. 将所有相关的罐子捆绑到主罐子里并制作一个胖罐子。

  2. 将所有相关的jar放在HDFS位置,并通过-libjars选项添加

  3. 我可以选择哪一个?请指教。

    由于我的mapreduce作业是通过oozie的java动作调用的,因此oozie lib文件夹中的库未添加到mapper / reducer的类路径中。如果我将此java动作更改为map reduce动作,那么这些jar是否可用?

    提前致谢。

2 个答案:

答案 0 :(得分:2)

  

1.将所有依赖的罐子装入主罐子并制作一个胖罐子。                                  要么   2.保存HDFS位置中的所有相关jar并通过它添加   -libjars选项我可以选择哪一个?

虽然这两种方法都在实践中。我建议优步罐子  即你的第一种方法。

优步罐:一个罐子里面有一个lib/文件夹,里面装着更多的独立罐子(一种叫做“超级罐子”的结构),你可以通过常规的#39提交工作。 ; hadoop jar'命令,这些lib / .jars被框架选中,因为提供的jar是通过conf.setJarByClassconf.setJar显式指定的。也就是说,如果这个用户uber jar作为mapred ... jar转到JT,那么它将由框架正确处理并且lib / .jars都被考虑并放在classpath上。

  

为什么

优点是您可以分发您的超级jar,而不管是否在目的地安装了依赖项,因为您的超级jar实际上没有依赖项。

  

因为我的mapreduce作业是通过oozie的java动作调用的   oozie lib文件夹中可用的库未添加到类路径中   映射器/减速器。如果我将此java动作更改为map reduce动作,   这些罐子可以买到吗?

对于上述问题,由于答案很广泛,

我有来自CDH4.xxCDH5.xx&的sharelib个链接 How to configure Mapreduce action with Oozie shre lib.为你

答案 1 :(得分:1)

您显然可以采用您建议的方法,但Oozie已为hcatalog准备了sharelib。您可以在oozie.action.sharelib.for.actiontype中使用job.properties属性开箱即用。对于java操作,您可以指定:

oozie.action.sharelib.for.java=hcatalog

这会将oozie share lib hcatalog中的库加载到启动器作业中。这应该可以胜任。

您可以在此处查看hcatalog的内容:

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