Hadoop Streaming和Pipes理解

原始问题的引出见:http://bbs.hadoopor.com/viewthread.php?tid=542
在论坛里搜索了下,发现了两篇利用C/C++编写mapreduce的文章.如下:
http://bbs.hadoopor.com/thread-256-1-1.html
http://bbs.hadoopor.com/thread-420-1-2.html
一. 其中,利用stream的文章中提到,利用stream编写mapreduce程序,其reduce任务要等到所有map任务结束后才能进行,这点不太理解.
二. 从两种方法的实现上来看.感觉有点奇怪.在linux下,一般从stdin读入数据认为是管道的方式,而通过socket读入数据为stream方式,但是在hadoop中,貌似其叫法与linux下相反.不知道为什么.
三. 从代码可以看出,在hadoop中,stream是利用stdin,而pipes是利用socket.这两者有什么优缺点可以比较下的.
By:guxiangxi

一,二两个问题我也不理解,不止如何回答。第三个问题我更关注一些,因为之前用过一下streaming,感觉不是特别好用,现在的状况还是熟悉C++,但写mapreduce还是用java。正好Pipes正好是我想要的。下面有三处文章可以参考
       1、http://cxwangyi.blogspot.com/2010/01/writing-hadoop-programs-using-c.html
       2、http://remonstrate.wordpress.com/2010/10/01/hadoop-%E4%B8%8A%E7%9A%84-c-%E4%BE%8B%E7%A8%8B/
       3、http://blog.endlesscode.com/2010/06/16/simple-demo-of-streaming-and-pipes/

总结如下:
      1、Streaming是Hadoop提供的一个可以使用其他编程语言来进行MapReduce来的API,因为Hadoop是基于Java(由于作者比较擅长Java,Lucene和Nutch都是出于Hadoop的作者)。Hadoop Streaming并不复杂,其只是使用了Unix的标准输入输出作为Hadoop和其他编程语言的开发接口,因此在其他的编程语言所写的程序中,只需要将标准输入作为程序的输入,将标准输出作为程序的输出就可以了。在标准的输入输出中,key和value是以tab作为分隔符,并且在reduce的标准输入中,hadoop框架保证了输入的数据是经过了按key排序的。

      2、Hadoop Pipes是Hadoop MapReduce的C++接口。与使用标准输入输出的Hadoop Streaming不同(当然Streaming也可以用于C++),Hadoop Pipes在tasktacker和map/reduce进行通信时使用的socket作为管道,不是标准输入输出,而不是JNI。Hadoop Pipes不能运行在standalone模式下,所以要先配置成pseudo-distributed模式,因为Hadoop Pipes依赖于Hadoop的分布式缓存技术,而分布式缓存只会在HDFS运行的时候才会支持。与Java的接口不一样,Hadoop Pipes的key和value都是基于STL的string,因此在处理时开发人员需要手动地进行数据类型的转换。

      3、从本质上 hadoop pipes 和 hadoop streaming 做的事情几乎一样,除了两者的通信不同,pipes 可以利用 hadoop 的 counter 特性。与 Java native code 比较,Java native code 可以使用实现了 Writable 接口的任何数据类型作为 key/value,而 pipes 和 streaming 就必须通过字符串进行一次转换(通信开销大,存储开销大)。也许正是这个原因,pipes 可能以后会被从 hadoop 中移除。当然,如果计算代价较高,可能 Java native code 并没有 C++ 执行效率高,那么以后可能就写 streaming code 了。pipes 使用的是 byte array,正好可以用 std:string 封装,只是例子里面都是转换成为字符串输入输出。这要求程序员自己设计合理的输入输出方式(数据 key/value 的分段)。

已经得到证实:pipes 已经从 hadoop 中移除。运行$ ~/hadoop-0.21.0/bin/hadoop,已经看不到pipe的这一项了。

使用上的参考:
1、http://developer.yahoo.com/hadoop/tutorial/module4.html#pipes
2、http://code.google.com/p/hypertable/wiki/MapReduceWithHypertable

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页