python執行mapreduce

來源:互聯網
上載者:User

標籤:python   mapreduce   hadoop   

執行mapreduce有兩種方式,一種是原生Java寫的mr,一種是直接使用Streaming方式,這種方式是在Java上面做了一個封裝,可以通過其它語言調用Java原生的mr介面。

  • 優點
    • 可以使用自己喜歡的語言來編寫MapReduce程式(換句話說,不必寫Java XD)
    • 不需要像寫Java的MR程式那樣import一大堆庫,在代碼裡做一大堆配置,很多東西都抽象到了stdio上,代碼量顯著減少
    • 因為沒有庫的依賴,調試方便,並且可以脫離Hadoop先在本地用管道類比調試
  • 缺點
    • 只能通過命令列參數來控制MapReduce架構,不像Java的程式那樣可以在代碼裡使用API,控制力比較弱,有些東西鞭長莫及
    • 因為中間隔著一層處理,效率會比較慢
下面是一個例子:

第一個檔案test.dat:

0067011990999991950051507004...9999999N9+00001+99999999999... 0043011990999991950051512004...9999999N9+00221+99999999999... 0043011990999991950051518004...9999999N9-00111+99999999999... 0043012650999991949032412004...0500001N9+01111+99999999999... 0043012650999991949032418004...0500001N9+01121+99999999999...0043012650999991949032418004...0500001N9+01221+99999999999...


第二個檔案:map.py

#!usr/bin/pythonimport reimport sysfor line in sys.stdin:    val=line.strip()    (year,temp)=(val[15:19],val[40:45])    print "%s\t%s" % (year,temp)



第三個檔案:red.py

#!usr/bin/pythonimport sys(last_key,max_val)=(None,0)for line in sys.stdin:  (key,val)=line.strip().split('\t')  if last_key and last_key!=key:    print '%s\t%s' % (last_key, max_val)    (last_key, max_val)=(key,int(val))  else:    (last_key, max_val)=(key,max(max_val,int(val)))if last_key:  print '%s\t%s' % (last_key, max_val)


執行的mr命令:

hadoop jar /opt/cloudera/parcels/CDH-5.3.2-1.cdh5.3.2.p0.10/jars/hadoop-streaming-2.5.0-cdh5.3.2.jar -mapper 'python map.py' -file /usr/local/tables/map.py -reducer 'python red.py' -file /usr/local/tables/red.py -input /tmp/logs/test.dat -output /tmp/test/


為了讓Hadoop將程式分發給其他機器,需要再加一個-file參數用於指明要分發的程式放在哪裡。


python執行mapreduce

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.