2013-11-27 67 views
0

我想知道是否有可能在Hadoop中运行非mapreduce作业,比如说打印“hello word”的java程序。如果是这样,请给我一个例子吗? 非常感谢。在Hadoop中运行非mapreduce工作

+0

嗯Hadoop是一个数据库......这不是一个操作系统 – Pepe

+0

但我们可以提交MapReduce的工作吧,对。我在网上看到了一些例子:conf.setMapperClass(Map.class); conf.setCombinerClass(Reduce.class); conf.setReducerClass(Reduce.class);但是,如果它是一个简单的java,则不会有Map或Reduce类。它只有一个主要功能 – user3034824

+0

map-reduce的基本思想是将任务分解为子任务并且并行处理它们。当你向Hadoop提交一份工作时,它会读取输入并将其拆分并将每个拆分传递给映射器,然后将结果传递给reducer。 'hello word'并不是hadoop背后的想法,这就是为什么我们有'字数'作为hadoop –

回答

1

你可以创建一个罐子,用hadoop jar运行:

[[email protected] hellworld]# cat HelloWorld.java 

public class HelloWorld { 

    public static void main(String[] args) throws Exception { 
     System.out.println("Hello World!"); 
}} 


[[email protected] hellworld]# javac HelloWorld.java 
[[email protected] hellworld]# jar cvf helloworld.jar HelloWorld.class 

[[email protected] hellworld]# ~/Downloads/hadoop-2.1.0-beta/bin/hadoop jar helloworld.jar HelloWorld 
Hello World! 
+0

它的工作原理!非常感谢你~~ – user3034824

+1

由于这个答案被我的接受,我假设所有OP都想要将hadoop jar添加到classpath中。我认为这个问题是关于如何在hadoop中进行分布式计算,而不是MapReduce工作流。 –

2

使用Hadoop 1.x和之前版本是不可能的。但是,这正是YARN所设计的。 MapReduce 2.0建立在YARN之上。

YARN是分布式资源管理的抽象。检查出来here

编辑:其实我说谎,在Hadoop的1.x和之前仍然有些可能做到非MapReduce作业一些两轮牛车。如果您看到Apache Giraph的实现方式,他们会挂钩到MapReduce框架中来执行任务分配。 Mapper只是成为他们启动真实代码的容器。但在我看来,这不是一个优雅的解决方案。自YARN发布以来,YARN上还有一个Giraph的实现(再次,恕我直言)更加优雅。

+0

的基本示例非常感谢。让我先试试它。 – user3034824