提交一个有很多依赖项的作业(jar文件)

ycl3bljg  于 2021-06-03  发布在  Hadoop
关注(0)|答案(3)|浏览(335)

我想编写某种“bootstrap”类,它将监视mq中的传入消息,并向hadoop提交map/reduce作业。这些工作大量使用一些外部库。目前,我已经实现了这些作业,打包为zip文件,包含bin、lib和log文件夹(我正在使用maven汇编插件将它们绑定在一起)。
现在我想为mapper和reducer提供一些小 Package ,它们将使用现有应用程序的一部分。
据我所知,当提交一个作业时,hadoop试图找到jar文件,其中包含mapper/reducer类,并通过网络将这个jar复制到data节点,该节点将用于处理数据。但我不清楚如何告诉hadoop复制所有依赖项?
我可以使用maven shade插件创建一个带有作业和依赖项的uber jar,以及另一个用于引导的jar(该jar将使用hadoop shell脚本执行)。
请给我建议。

gcmastyq

gcmastyq1#

使用hadoop启动程序脚本的-libjars选项指定远程JVM上运行的作业的依赖关系;使用$hadoop\u classpath变量为本地jvm上运行的jobclient设置依赖项
详细讨论如下:http://grepalex.com/2013/02/25/hadoop-libjars/

nuypyhwy

nuypyhwy2#

使用maven来管理依赖关系,并确保在构建和部署期间使用正确的版本。流行的ide具有maven支持,因此您不必担心为编辑和生成构建类路径。最后,您可以指示maven构建一个包含应用程序和所有依赖项的jar(“具有依赖项的jar”),这使得部署非常简单。
至于依赖项,比如hadoop,它保证在运行时类路径中,您可以使用“provided”的范围来定义它们,这样它们就不会包含在uberjar中。

jv4diomz

jv4diomz3#

一种方法是将所需的jar放入分布式缓存中。另一种选择是在hadoop节点上安装所有必需的jar,并告诉tasktracker它们的位置。我建议你浏览一下这篇文章。谈论同样的问题。

相关问题