Hadoop Streaming和Pipes理解

來源:互聯網
上載者:User

原始問題的引出見: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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.