我想编写某种“引导”类,它将监视 MQ 的传入消息并将 map/reduce 作业提交给 Hadoop。这些作业大量使用一些外部库。目前我已经实现了这些作业,打包为带有 bin、lib 和 log 文件夹的 ZIP 文件(我使用 maven-assembly-plugin 将它们联系在一起)。
现在我想为 Mapper 和 Reducer 提供小型包装器,它们将使用现有应用程序的一部分。
据我所知,当提交作业时,Hadoop 会尝试查找具有映射器/减速器类的 JAR 文件,并将此 jar 通过网络复制到数据节点,该数据节点将用于处理数据。但不清楚如何告诉 Hadoop 复制所有依赖项?
我可以使用 maven-shade-plugin 创建一个带有作业和依赖项的 uber-jar,以及另一个用于引导的 jar(该 jar 将使用 hadoop shell-script 执行)。
请指教。