我可以在HDInsight中运行包含lib文件夹下的另一个JAR文件的JAR文件吗?

时间:2015-09-16 21:17:45

标签: hadoop mapreduce hdinsight

是否可以在HDInsight中运行JAR文件,其中包含lib文件夹下的另一个JAR文件?

JAR文件

├/ folder1中/ subfolder1 /对myApp / ... │└.class文件 | | └lib/ dependency.jar // library(jar文件)

谢谢!

1 个答案:

答案 0 :(得分:1)

在HDInsight上,我们应该能够运行Java MapReduce JAR,它依赖于另一个JAR。有几种方法可以做到这一点,但通常不是通过在headnode上的lib文件夹下复制第二个JAR。 原因是 - 根据依赖关系的位置,您可能需要在所有工作节点和头节点的lib文件夹下复制JAR - 这将成为一项繁琐的任务。此外,当Azure重新映像节点时,此更改将被删除,因此不支持。

现在,有两种类型的依赖项 - 1. MapReduce驱动程序类依赖于另一个外部JAR 2. Map或reduce任务依赖于另一个JAR,Map或Reduce函数在外部JAR上调用API。

场景#1(MapReduce驱动程序类依赖于另一个JAR): 我们可以使用以下选项之一 -

一个。将依赖项JAR复制到headnode上的本地文件夹(如Windows HDI上的d:\ test),然后使用RDP将此路径附加到头节点上的HADOOP_CLASSPATH环境变量 - 这适用于dev / test直接从headnode运行作业,但不适用于远程作业提交。所以这不适合生产场景。

湾使用'胖子或超级罐'在JAR中包含所有依赖的jar - 你可以使用Maven'Shade'插件,例如here

场景#2(外部JAR上的Map或Reduce函数调用API) - 基本上使用-libjars选项。

  1. 如果要从Hadoop命令行运行mapreduce JAR - 一个。将Mapreduce JAR复制到本地路径(如d:\ test) 湾在WASB上复制依赖JAR
  2. 使用依赖项运行mapreduce JAR的示例 -

    hadoop jar D:\ Test \ BlobCount-0.0.1-SNAPSHOT.jar css.ms.BlobCount.BlobCounter -libjars wasb://mycontainername@azimwasb.blob.core.windows.net/mrdata/jars/microsoft- windowsazure-storage-sdk-0.6.0.jar -DStorageAccount =%StorageAccount%-DStorageKey =%StorageKey%-DContainer =%Container%/ mcdpoc / mrinput / mcdpoc / mroutput

    示例使用HDInsight窗口 - 您也可以在HDInsight Linux上使用类似的方法。

    1. 使用PowerShell或.Net SDK(远程作业提交) - 使用PowerShell,您可以使用-LibJars参数来引用从属jar。 您可以查看以下文档,这些文档包含使用powerShell,SSH等的各种示例。 https://azure.microsoft.com/en-us/documentation/articles/hdinsight-use-mapreduce/
    2. https://azure.microsoft.com/en-us/documentation/articles/hdinsight-use-mapreduce/

      我希望它有所帮助!

      谢谢, 阿齐姆