我可以在 HDInsight 的 lib 文件夹下包含另一个 JAR 文件的 运行 JAR 文件吗?
Can I run JAR file which includes another JAR file under lib folder in HDInsight?
是否可以在 HDInsight 中 运行 一个包含 lib 文件夹下的另一个 JAR 文件的 JAR 文件?
JAR 文件
├/folder1/subfolder1/myApp/…
│〉 〈〉└.class 文件
|
|
└ lib/dependency.jar // 库(jar 文件)
谢谢!
在 HDInsight 上,我们应该能够 运行 一个 Java MapReduce JAR,它依赖于另一个 JAR。有几种方法可以做到这一点,但通常不是通过复制头节点上 lib 文件夹下的第二个 JAR。
原因是——根据依赖所在的位置,您可能需要将 JAR 复制到所有工作节点和头节点的 lib 文件夹下——成为一项繁琐的任务。此外,当节点被 Azure 重新映像时,此更改将被删除,因此不受支持。
现在,有两种类型的依赖关系——
1. MapReduce 驱动程序 class 依赖于另一个外部 JAR
2. Map 或 reduce 任务依赖于另一个 JAR,其中 Map 或 Reduce 函数调用外部 JAR 上的 API。
场景 #1(MapReduce 驱动程序 class 依赖于另一个 JAR):
我们可以使用以下选项之一 –
一个。将依赖项 JAR 复制到头节点上的本地文件夹(如 windows HDI 上的 d:\test),然后使用 RDP 将此路径附加到头节点上的 HADOOP_CLASSPATH 环境变量——这适用于 dev/test 到 运行 直接来自头节点的作业,但不适用于远程作业提交。所以这个不适合生产场景。
b。使用“fat or uber jar”将所有依赖的 jar 包含在你的 JAR 中——你可以使用 Maven ‘Shade’插件,示例 here
场景 #2(在外部 JAR 上调用 Map 或 Reduce 函数 API)-
基本上使用 –libjars 选项。
- 如果您想从 Hadoop 命令行 运行 mapreduce JAR -
一种。将 Mapreduce JAR 复制到本地路径(如 d:\test )
b.将依赖的 JAR 复制到 WASB
运行具有依赖关系的 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 windows – 您也可以在 HDInsight Linux 上使用类似的方法。
- 使用 PowerShell 或 .Net SDK(远程作业提交)–使用 PowerShell,您可以使用 –LibJars 参数来引用依赖的 jar。
您可以查看以下文档,其中包含使用 powerShell、SSH 等的各种示例。
https://azure.microsoft.com/en-us/documentation/articles/hdinsight-use-mapreduce/
https://azure.microsoft.com/en-us/documentation/articles/hdinsight-use-mapreduce/
希望对您有所帮助!
谢谢,
阿齐姆
是否可以在 HDInsight 中 运行 一个包含 lib 文件夹下的另一个 JAR 文件的 JAR 文件?
JAR 文件
├/folder1/subfolder1/myApp/… │〉 〈〉└.class 文件 | | └ lib/dependency.jar // 库(jar 文件)
谢谢!
在 HDInsight 上,我们应该能够 运行 一个 Java MapReduce JAR,它依赖于另一个 JAR。有几种方法可以做到这一点,但通常不是通过复制头节点上 lib 文件夹下的第二个 JAR。 原因是——根据依赖所在的位置,您可能需要将 JAR 复制到所有工作节点和头节点的 lib 文件夹下——成为一项繁琐的任务。此外,当节点被 Azure 重新映像时,此更改将被删除,因此不受支持。
现在,有两种类型的依赖关系—— 1. MapReduce 驱动程序 class 依赖于另一个外部 JAR 2. Map 或 reduce 任务依赖于另一个 JAR,其中 Map 或 Reduce 函数调用外部 JAR 上的 API。
场景 #1(MapReduce 驱动程序 class 依赖于另一个 JAR): 我们可以使用以下选项之一 –
一个。将依赖项 JAR 复制到头节点上的本地文件夹(如 windows HDI 上的 d:\test),然后使用 RDP 将此路径附加到头节点上的 HADOOP_CLASSPATH 环境变量——这适用于 dev/test 到 运行 直接来自头节点的作业,但不适用于远程作业提交。所以这个不适合生产场景。
b。使用“fat or uber jar”将所有依赖的 jar 包含在你的 JAR 中——你可以使用 Maven ‘Shade’插件,示例 here
场景 #2(在外部 JAR 上调用 Map 或 Reduce 函数 API)- 基本上使用 –libjars 选项。
- 如果您想从 Hadoop 命令行 运行 mapreduce JAR - 一种。将 Mapreduce JAR 复制到本地路径(如 d:\test ) b.将依赖的 JAR 复制到 WASB
运行具有依赖关系的 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 windows – 您也可以在 HDInsight Linux 上使用类似的方法。
- 使用 PowerShell 或 .Net SDK(远程作业提交)–使用 PowerShell,您可以使用 –LibJars 参数来引用依赖的 jar。 您可以查看以下文档,其中包含使用 powerShell、SSH 等的各种示例。 https://azure.microsoft.com/en-us/documentation/articles/hdinsight-use-mapreduce/
https://azure.microsoft.com/en-us/documentation/articles/hdinsight-use-mapreduce/
希望对您有所帮助!
谢谢, 阿齐姆