Hadoop map reduce作业中的第三方JAR

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文件夹中可用的库不会添加

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

  • 将所有依赖jar捆绑到主jar中,并创建一个胖jar

  • 将所有依赖JAR保留在HDFS位置,并通过-libjars选项添加它

  • 我可以选择哪一个?请给我一些建议

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

    提前谢谢

    1.将所有依赖jar捆绑到主jar中,并创建一个胖jar。 或 2.将所有相关JAR保留在HDFS位置,并通过 -libjars选项我可以选择哪一个

    尽管如此,这两种方法都在实践中。我建议使用优步罐 i、 e你的第一个方法

    Uber-jar:一个jar,里面有一个
    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