从Java程序运行Hadoop作业

时间:2012-12-18 11:18:45

标签: java hadoop mapreduce

我正在编写一个分布式系统,并且面临将其连接到Hadoop的问题。这是我的情况:

1)我有一台在3台计算机上运行的分布式系统(sys1,sys2,sys3)

2)Sys2和Sys3是两个不同Hadoop集群的MasterNodes。这两个Hadoop集群没有相互连接,每个集群都独立运行。

3)我的分布式系统有三个部分(p1,p2,p3)。

P1位于sys1上,从客户端接收Mappers / Reducers的源代码(客户端是另一个系统)。然后,P1将联系P2或P3并向其发送映射器/缩减器的代码。

4)现在问题是P2或P3需要在Hadoop上运行作业并将结果发送回P1。

我已经和hadoop合作了一段时间,并且知道如何编写一个简单的mapReduce程序,将其转换为JAR文件并在Hadoop上执行它。问题是,在我的情况下,mapReduce作业的源代码是在执行期间发送的,我无法从中生成JAR文件。我需要从收到的代码中创建一个hadoop作业并在hadoop中运行它。如果有任何关于如何解决这个问题的建议/意见,我将不胜感激?

PS。我知道一种解决方案是将接收到的map / Reduce代码写入磁盘上的文件,执行所有必需的命令以生成JAR文件并在我的Java代码中使用运行时实例在shell中运行作业。但我更喜欢能够直接从我的Java代码中运行这个工作,而不是解决上述解决方案的所有可能的麻烦。

1 个答案:

答案 0 :(得分:1)

使用JavaCompiler API怎么样?然后,您可以使用JarOuptputStream

轻松创建jar文件

这是一篇很好的博客文章,解释了API: JavaBeat