是否可以在HDInsight中运行JAR文件,其中包含lib文件夹下的另一个JAR文件?
├/ folder1中/ subfolder1 /对myApp / ... │└.class文件 | | └lib/ dependency.jar // library(jar文件)
谢谢!
答案 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选项。
使用依赖项运行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上使用类似的方法。
https://azure.microsoft.com/en-us/documentation/articles/hdinsight-use-mapreduce/
我希望它有所帮助!
谢谢, 阿齐姆