是否可以在hdinsight中运行一个jar文件,其中包含lib文件夹下的另一个jar文件?
├/文件夹1/子文件夹1/myapp/…│ └.类文件| |└ lib/dependency.jar//库(jar文件)谢谢您!
t30tvxxf1#
在hdinsight上,我们应该能够运行javamapreducejar,它依赖于另一个jar。有几种方法可以做到这一点,但通常不是复制headnode上lib文件夹下的第二个jar。原因是,根据依赖关系的位置,您可能需要将jar复制到所有worker节点和headnodes的lib文件夹下,这将成为一项乏味的任务。此外,当azure重新对节点进行映像时,此更改将被删除,因此不受支持。现在,有两种类型的依赖关系-1。mapreduce驱动程序类依赖于另一个外部JAR2。map或reduce任务依赖于另一个jar,其中map或reduce函数调用外部jar上的api。场景#1(mapreduce驱动程序类取决于另一个jar):我们可以使用以下选项之一-答。将依赖项jar复制到headnode上的本地文件夹(如d:\test on windows hdi),然后使用rdp将此路径附加到headnode上的hadoop\u classpath环境变量–这适合于dev/test直接从headnode运行作业,但不适用于远程作业提交。所以这不适合生产场景。b。使用“fat或uberjar”在jar中包含所有依赖的jar–您可以使用maven“shade”插件,例如场景#2(在外部jar上Map或减少函数调用api)-基本上使用–libjars选项。如果您想从hadoop命令行-a运行mapreducejar。将mapreducejar复制到本地路径(如d:\test)b。复制wasb上的依赖jar使用依赖关系运行mapreduce jar的示例-hadoop jar d:\test\blobcount-0.0.1-snapshot.jar css.ms.blobcount.blobcounter-libjarswasb://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/希望有帮助!谢谢,阿齐姆
1条答案
按热度按时间t30tvxxf1#
在hdinsight上,我们应该能够运行javamapreducejar,它依赖于另一个jar。有几种方法可以做到这一点,但通常不是复制headnode上lib文件夹下的第二个jar。原因是,根据依赖关系的位置,您可能需要将jar复制到所有worker节点和headnodes的lib文件夹下,这将成为一项乏味的任务。此外,当azure重新对节点进行映像时,此更改将被删除,因此不受支持。
现在,有两种类型的依赖关系-1。mapreduce驱动程序类依赖于另一个外部JAR2。map或reduce任务依赖于另一个jar,其中map或reduce函数调用外部jar上的api。
场景#1(mapreduce驱动程序类取决于另一个jar):我们可以使用以下选项之一-
答。将依赖项jar复制到headnode上的本地文件夹(如d:\test on windows hdi),然后使用rdp将此路径附加到headnode上的hadoop\u classpath环境变量–这适合于dev/test直接从headnode运行作业,但不适用于远程作业提交。所以这不适合生产场景。
b。使用“fat或uberjar”在jar中包含所有依赖的jar–您可以使用maven“shade”插件,例如
场景#2(在外部jar上Map或减少函数调用api)-基本上使用–libjars选项。
如果您想从hadoop命令行-a运行mapreducejar。将mapreducejar复制到本地路径(如d:\test)b。复制wasb上的依赖jar
使用依赖关系运行mapreduce jar的示例-
hadoop jar d:\test\blobcount-0.0.1-snapshot.jar css.ms.blobcount.blobcounter-libjarswasb://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/
希望有帮助!
谢谢,阿齐姆