【发布时间】:2015-02-04 21:20:22
【问题描述】:
我必须在 Hadoop 集群中运行一些不能用 Map/Reduce 表示的东西。我想为它写一个 YARN 应用程序。我发现 Spring Yarn 用于 spring-boot 并遵循入门(参见链接)。到目前为止,这是可行的,但存在一些缺陷:
- 在本教程中,生成了三个 JAR(一个用于客户端,一个用于 appmaster,一个用于容器),在提交应用程序时,它们必须位于特定的文件夹结构中
- 我必须在 application.yml 中硬编码 HDFS URI 和资源管理器主机/端口,或者将它们作为命令行参数提供
- 由于它基于 Spring Boot,并且应用程序以
java -jar启动,因此创建的 JAR 文件非常大,其中基本上包含了整个 Hadoop 堆栈 - JAR 文件的确切名称必须在 application.yml 中提及
我想要什么:
- 单个 JAR,其中包含用于 appmaster 和容器的 JAR
- 可从命令行使用
hadoop jar运行 - 使用
hadoop jar运行时可用的配置(对于 MR2,这可以通过启动扩展Configured的类并使用ToolRunner.run()实现Tool来实现,这使得Configuration在工具中可用run方法)
我想到的办法是:
- 编写 Container 和 AppMaster,将 YARN 和 Hadoop 依赖项设置为在其 POM 中提供,并像我为 MR 作业那样使用 maven-shade-plugin 打包它们
- 编写客户端,添加AppMaster和Container作为依赖,用maven-assembly-plugin打包,防止JAR被解压
我试过斜纹布,但无济于事。我明白了
java.lang.NoSuchMethodError: com.google.common.collect.Sets.newCopyOnWriteArraySet()Ljava/util/concurrent/CopyOnWriteArraySet;
因为我的 Hadoop 安装使用 Guava 11 而 Twill 需要 13。即使 Guava 13 被隐藏在 Jar 中,它也被忽略了。
【问题讨论】:
标签: java hadoop hadoop-yarn