国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

用python+hadoopstreaming分布式編程(一)--原理介紹,樣例程序與本地調(diào)試

來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-27 14:30:36
文檔

用python+hadoopstreaming分布式編程(一)--原理介紹,樣例程序與本地調(diào)試

用python+hadoopstreaming分布式編程(一)--原理介紹,樣例程序與本地調(diào)試:MapReduce與HDFS簡介 什么是Hadoop? Google為自己的業(yè)務(wù)需要提出了編程模型MapReduce和分布式文件系統(tǒng)Google File System,并發(fā)布了相關(guān)論文(可在Google Research的網(wǎng)站上獲得: GFS 、 MapReduce)。 Doug Cutting和Mike
推薦度:
導(dǎo)讀用python+hadoopstreaming分布式編程(一)--原理介紹,樣例程序與本地調(diào)試:MapReduce與HDFS簡介 什么是Hadoop? Google為自己的業(yè)務(wù)需要提出了編程模型MapReduce和分布式文件系統(tǒng)Google File System,并發(fā)布了相關(guān)論文(可在Google Research的網(wǎng)站上獲得: GFS 、 MapReduce)。 Doug Cutting和Mike
MapReduce與HDFS簡介
什么是Hadoop?

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

MapReduce的Data flow如下圖,原始數(shù)據(jù)經(jīng)過mapper處理,再進(jìn)行partition和sort,到達(dá)reducer,輸出最后結(jié)果。

圖片來自Hadoop: The Definitive Guide

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

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

圖片來自Hadoop: The Definitive Guide

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

Hadoop Streaming的優(yōu)缺點

優(yōu)點

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

缺點

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

用python編寫簡單的Hadoop Streaming程序

這里提供兩個例子:

Michael Noll的word count程序
Hadoop: The Definitive Guide里的例程
使用python編寫Hadoop Streaming程序有幾點需要注意:

在能使用iterator的情況下,盡量使用iterator,避免將stdin的輸入大量儲存在內(nèi)存里,否則會嚴(yán)重降低性能

streaming不會幫你分割key和value傳進(jìn)來,傳進(jìn)來的只是一個個字符串而已,需要你自己在代碼里手動調(diào)用split()

從stdin得到的每一行數(shù)據(jù)末尾似乎會有 ,保險起見一般都需要使用rstrip()來去掉

在想獲得K-V list而不是一個個處理key-value pair時,可以使用groupby配合itemgetter將key相同的k-v pair組成一個個group,得到類似Java編寫的reduce可以直接獲取一個Text類型的key和一個iterable作為value的效果。注意itemgetter的效率比lambda表達(dá)式要高,所以如果需求不是很復(fù)雜的話,盡量用itemgetter比較好。

我在編寫Hadoop Streaming程序時的基本模版是

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Some description here...
"""

import sys
from operator import itemgetter
from itertools import groupby

def read_input(file):
 """Read input and split."""
 for line in file:
 yield line.rstrip().split('	')

def main():
 data = read_input(sys.stdin)
 for key, kviter in groupby(data, itemgetter(0)):
 # some code here..

if __name__ == "__main__":
 main()

如果對輸入輸出格式有不同于默認(rèn)的控制,主要會在read_input()里調(diào)整。

本地調(diào)試

本地調(diào)試用于Hadoop Streaming的python程序的基本模式是:

$ cat  | python  | sort -t $'	' -k1,1 | python  > 

或者如果不想用多余的cat,也可以用<定向

$ python  <  | sort -t $'	' -k1,1 | python  > 

這里有幾點需要注意:

Hadoop默認(rèn)按照tab來分割key和value,以第一個分割出的部分為key,按key進(jìn)行排序,因此這里使用

sort -t $' ' -k1,1
來模擬。如果你有其他需求,在交給Hadoop Streaming執(zhí)行時可以通過命令行參數(shù)調(diào),本地調(diào)試也可以進(jìn)行相應(yīng)的調(diào)整,主要是調(diào)整sort的參數(shù)。因此為了能夠熟練進(jìn)行本地調(diào)試,建議先掌握sort命令的用法。

如果你在python腳本里加上了shebang,并且為它們添加了執(zhí)行權(quán)限,也可以用類似于

./mapper.py

來代替

python mapper.py

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

用python+hadoopstreaming分布式編程(一)--原理介紹,樣例程序與本地調(diào)試

用python+hadoopstreaming分布式編程(一)--原理介紹,樣例程序與本地調(diào)試:MapReduce與HDFS簡介 什么是Hadoop? Google為自己的業(yè)務(wù)需要提出了編程模型MapReduce和分布式文件系統(tǒng)Google File System,并發(fā)布了相關(guān)論文(可在Google Research的網(wǎng)站上獲得: GFS 、 MapReduce)。 Doug Cutting和Mike
推薦度:
標(biāo)簽: 編程 python 原理介紹
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 在线免费黄色 | 色妞综合网| 另类欧美亚洲 | 一区在线看 | 一区二区久久 | 欧美自拍亚洲 | 影音先锋中文字幕资源 | 日韩欧美中文 | 国产偷窥女洗浴在线观看 | 欧美我不卡 | 日韩欧美中文在线 | 久久精品国产91久久综合麻豆自制 | 国产精品123区 | 国产在线观看精品一区二区三区91 | 在线不卡日韩 | 欧美人与性动交a欧美精品 欧美日本一道本 | 国产女同一区二区三区五区 | 69国产成人综合久久精品91 | 欧美国产日韩在线播放 | 免费一区二区三区免费视频 | 欧美精品人爱c欧美精品 | 日韩啪 | 香蕉依人| 亚洲国产成人精品一区二区三区 | 91日韩欧美| 大陆一级毛片 | 日韩欧美三级视频 | 日韩影音 | 伊人精品成人久久综合欧美 | 欧美视频亚洲视频 | 成人免费一级毛片在线播放视频 | 国产亚洲欧美另类一区二区三区 | 精品国产一区二区 | 国产激情在线观看 | 国产午夜精品视频 | 欧美人xxx| 亚洲欧美另类色图 | 日本六十路丰满老太交尾 | 国产激情一区二区三区 | 在线观看亚洲欧美 | 中文字幕版免费电影网站 |