我可以运行JAR文件,其中包括HDInsight lib文件夹下的另一个JAR文件



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

JAR文件

├/folder1/subfolder1/myApp/…││class文件||lib/dependency.jar//库(jar文件)

谢谢!

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

现在,有两种类型的依赖关系-1. MapReduce驱动类依赖于另一个外部JAR2. Map或reduce任务依赖于另一个JAR,其中Map或reduce函数调用外部JAR上的API。

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

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

b。使用"fat或uber jar"来包含jar中的所有依赖jar -你可以使用Maven的"Shade"插件,示例如下

场景#2(映射或减少外部JAR上的函数调用API) -基本使用- libjar选项。

  1. 如果您想从Hadoop命令行运行mapreduce JAR -a.将Mapreduce JAR复制到本地路径(如d:test)b.将依赖JAR复制到WASB

使用依赖关系运行mapreduce JAR的示例-

hadoop jar D:TestBlobCount-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上使用类似的方法。

  • 使用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/

    我希望它有帮助!

    谢谢,Azim

    相关内容

    • 没有找到相关文章

    最新更新