gpt4 book ai didi

java - 如何编写可以使用 "hadoop -jar"运行的独立 YARN 应用程序?

转载 作者:可可西里 更新时间:2023-11-01 16:12:33 26 4
gpt4 key购买 nike

我必须在 Hadoop 集群中运行一些无法用 Map/Reduce 表达的东西。我想到了为它编写一个 YARN 应用程序。我发现了Spring Yarn对于 spring-boot 并遵循入门指南(请参阅链接)。到目前为止,这是有效的,但存在一些缺陷:

  • 在教程中生成了三个 JAR(一个用于客户端,一个用于 appmaster,一个用于容器),在提交应用程序时它们必须位于特定的文件夹结构中
  • 我必须在 application.yml 中对 HDFS URI 和资源管理器主机/端口进行硬编码,或者将它们作为命令行参数提供
  • 由于它是基于Spring Boot,应用程序是用java -jar启动的,所以创建的JAR文件非常大,里面基本上有一个完整的Hadoop栈
  • 必须在 application.yml 中提及 JAR 文件的确切名称

我想要的:

  • 单个 JAR,其中包含用于 appmaster 和容器的 JAR 打包
  • 可使用 hadoop jar 从命令行运行
  • 使用与 hadoop jar 一起运行时可用的配置(对于 MR2,这可以通过启动扩展 Configured 的类并实现 Tool 使用 ToolRunner.run(),这使得 Configuration 在工具的 run 方法中可用)

我想到的做法是:

  1. 编写 Container 和 AppMaster,将 YARN 和 Hadoop 依赖项设置为在它们的 POM 中提供,将它们与 maven-shade-plugin 打包在一起,就像我对 MR 作业所做的那样
  2. 编写客户端,添加AppMaster和Container依赖,使用maven-assembly-plugin打包,防止JAR被提取

我尝试了 Twill,但无济于事。我明白了

java.lang.NoSuchMethodError: com.google.common.collect.Sets.newCopyOnWriteArraySet()Ljava/util/concurrent/CopyOnWriteArraySet;

因为我的 Hadoop 安装使用 Guava 11,而 Twill 需要 13。即使 Guava 13 隐藏在 Jar 中,它也会被忽略。

最佳答案

我发现了一些我称之为“解决方法”的东西,它足以满足我的用例:

  • 我使用 Spring YARN 构建我的应用程序,从而为客户端、容器和 AppMaster 生成单独的 JAR
  • 我将它们作为模块添加到控制版本号的 Master POM(每当我更改前三个项目之一中的任何内容时,我都会增加 Master POM 的版本)
  • 这个 Master POM 本身就是一个模块,还有我整个项目范围内的大型 Parent POM
  • 主 POM 的父级不是项目范围的大型 POM,而是 spring-boot-starter-parent

当由 Jenkins 构建时,这会创建上述三个 JAR,我目前手动将它们打包到一个文件夹中,旁边有一个启动脚本。这只是一个临时解决方案,因为此应用程序包含一个长时间运行的任务,稍后将由用户从 Web 应用程序(也基于 Spring)启动。我仍然需要弄清楚如何从那里提交申请。

我的想法如下,这与我目前为 MR 作业所做的类似:

  • 将 JAR 作为依赖项添加到 Web 应用程序的 pom.xml
  • 在三个 JAR 中包含一个没有 YARN 和 JAR 信息的基本 application.yml
  • 使用与 Job.setJarByClass() 相同的技术来定位 AppMaster 和 Container JAR
  • 使用 SpringApplication.run() 调用客户端的主类,通过命令行(args 变量)传递连接属性和 JAR 文件的解析位置

如果有人能给我提示,如果这是可行的情况,请告诉我。

关于java - 如何编写可以使用 "hadoop -jar"运行的独立 YARN 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28196436/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com