我必须在Hadoop集群中运行一些无法用Map / Reduce表示的东西。我想过为它写一个YARN应用程序。我发现Spring Yarn用于spring-boot并遵循Getting Started(参见链接)。这项工作到目前为止,但有一些缺陷:
java -jar
启动,因此创建的JAR文件非常大,基本上包含整个Hadoop堆栈我想要的是什么:
hadoop jar
hadoop jar
一起运行时可用的配置(对于MR2,可以通过启动扩展Configured
的类并使用Tool
实施ToolRunner.run()
来实现此操作工具Configuration
方法中提供的run
我想到的方法是:
我试过斜纹,但无济于事。我得到了
java.lang.NoSuchMethodError: com.google.common.collect.Sets.newCopyOnWriteArraySet()Ljava/util/concurrent/CopyOnWriteArraySet;
因为我的Hadoop安装使用Guava 11和Twill需要13.即使Guava 13被遮蔽到Jar中,它也会被忽略。
答案 0 :(得分:0)
我找到了一种我称之为“解决方法”的东西,它足以满足我的用例:
spring-boot-starter-parent
当由Jenkins构建时,这会创建上面提到的三个JAR,我现在手动将它们打包到一个文件夹中,旁边有一个启动脚本。这只是一个临时解决方案,因为此应用程序包含一个长时间运行的任务,后来由用户从Web应用程序(也基于Spring)启动。我仍然需要弄清楚如何从那里提交申请。
我的想法如下,这类似于我目前为MR工作做的事情:
application.yml
,但没有YARN和JAR信息Job.setJarByClass()
相同的技术来查找AppMaster和Container JAR SpringApplication.run()
通过命令行(args
变量)传递连接属性和JAR文件的已解析位置来调用客户端的主类如果有人可以给我一个提示,如果这是一个可行的情况,请告诉我。