【问题标题】:third party jars in map reduce job地图减少工作中的第三方罐子
【发布时间】:2016-11-11 06:14:15
【问题描述】:

我的 map reduce 作业依赖于第三方库,例如 hive-hcatalog-xxx.jar。我正在通过 oozie 运行我所有的工作。 Mapreduce 作业通过 java 操作运行。在我的工作中包含第三方库的最佳方式是什么?我手头有两个选择

  1. 将所有依赖的 jar 打包到主 jar 中,并创建一个 fat jar。

  2. 将所有依赖 jar 保存在 HDFS 位置并通过 -libjars 选项添加

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

由于我的 mapreduce 作业是通过 oozie 的 java 操作调用的,因此 oozie lib 文件夹中可用的库不会添加到 mapper/reducer 的类路径中。如果我将此 java 操作更改为映射 reduce 操作,jar 是否可用?

提前致谢。

【问题讨论】:

    标签: hadoop jar mapreduce oozie


    【解决方案1】:

    1.将所有依赖的jar打包到主jar中,创建一个fat jar。 要么 2.将所有依赖的jar保存在HDFS位置并通过添加 -libjars option 我可以选择哪一个?

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

    Uber jar:一个 jar,其中有一个 lib/ 文件夹,其中包含更多依赖的 jar(一种称为“uber”jar 的结构),您通过常规的“hadoop jar”命令提交作业,这些 lib/. jar 被框架拾取,因为提供的 jar 是通过 conf.setJarByClassconf.setJar 显式指定的。也就是说,如果这个用户的 uber jar 作为 mapred...jar 去 JT,那么它会被框架正确处理,并且 lib/.jars 都会被考虑并放在classpath 上。

    为什么

    优点是您可以分发您的 uber-jar,而根本不关心目标是否安装了依赖项,因为您的 uber-jar 实际上没有依赖项。

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

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

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

    【讨论】:

    • 非常感谢您的回答。 Uber jar 体积会更大,会影响作业启动时间吗?
    • 自其单罐以来就存在位差; spark 相关的开发,大多数人使用 uber jar
    【解决方案2】:

    您显然可以采用您建议的方法,但是 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多