国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

用python + hadoop streaming 分布式編程(一) -- 原理介紹,樣例程序

2020-02-23 05:32:59
字體:
來源:轉載
供稿:網友

MapReduce與HDFS簡介
什么是Hadoop?

Google為自己的業務需要提出了編程模型MapReduce和分布式文件系統Google File System,并發布了相關論文(可在Google Research的網站上獲得: GFS 、 MapReduce)。 Doug Cutting和Mike Cafarella在開發搜索引擎Nutch時對這兩篇論文做了自己的實現,即同名的MapReduce和HDFS,合起來就是Hadoop。

MapReduce的Data flow如下圖,原始數據經過mapper處理,再進行partition和sort,到達reducer,輸出最后結果。

圖片來自Hadoop: The Definitive Guide

Hadoop Streaming原理
Hadoop本身是用Java開發的,程序也需要用Java編寫,但是通過Hadoop Streaming,我們可以使用任意語言來編寫程序,讓Hadoop運行。

Hadoop Streaming的相關源代碼可以在Hadoop的Github repo 查看。簡單來說,就是通過將用其他語言編寫的mapper和reducer通過參數傳給一個事先寫好的Java程序(Hadoop自帶的*-streaming.jar),這個Java程序會負責創建MR作業,另開一個進程來運行mapper,將得到的輸入通過stdin傳給它,再將mapper處理后輸出到stdout的數據交給Hadoop,partition和sort之后,再另開進程運行reducer,同樣地通過stdin/stdout得到最終結果。因此,我們只需要在其他語言編寫的程序里,通過stdin接收數據,再將處理過的數據輸出到stdout,Hadoop streaming就能通過這個Java的wrapper幫我們解決中間繁瑣的步驟,運行分布式程序。

圖片來自Hadoop: The Definitive Guide

原理上只要是能夠處理stdio的語言都能用來寫mapper和reducer,也可以指定mapper或reducer為Linux下的程序(如awk、grep、cat)或者按照一定格式寫好的java class。因此,mapper和reducer也不必是同一類的程序。

Hadoop Streaming的優缺點

優點

可以使用自己喜歡的語言來編寫MapReduce程序(換句話說,不必寫Java XD)
不需要像寫Java的MR程序那樣import一大堆庫,在代碼里做一大堆配置,很多東西都抽象到了stdio上,代碼量顯著減少
因為沒有庫的依賴,調試方便,并且可以脫離Hadoop先在本地用管道模擬調試

缺點

只能通過命令行參數來控制MapReduce框架,不像Java的程序那樣可以在代碼里使用API,控制力比較弱,有些東西鞭長莫及
因為中間隔著一層處理,效率會比較慢
所以Hadoop Streaming比較適合做一些簡單的任務,比如用python寫只有一兩百行的腳本。如果項目比較復雜,或者需要進行比較細致的優化,使用Streaming就容易出現一些束手束腳的地方。

用python編寫簡單的Hadoop Streaming程序

這里提供兩個例子:

Michael Noll的word count程序

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 贵州省| 兰州市| 鄂伦春自治旗| 正安县| 政和县| 娱乐| 镇远县| 宜良县| 会同县| 和平县| 宜兰县| 丰都县| 昌邑市| 额尔古纳市| 古蔺县| 延川县| 微博| 多伦县| 曲松县| 西盟| 二连浩特市| 潢川县| 临漳县| 专栏| 信阳市| 双辽市| 年辖:市辖区| 韩城市| 洞口县| 阜城县| 安多县| 吐鲁番市| 连州市| 华蓥市| 石河子市| 牙克石市| 眉山市| 南投市| 枝江市| 湘西| 左权县|