1. 程式人生 > >[Hadoop] Hadoop Streaming使用Python程式設計

[Hadoop] Hadoop Streaming使用Python程式設計

Hadoop Streaming 是Hadoop提供方的一個程式設計工具,它允許使用者使用任何可執行檔案或者指令碼作為Mapper和Reducer。

Hadoop Streaming 多語言程式設計

1. 以標準輸入流作為輸入:

    1) C++: cin

    2) Php: stdin

    3) Python: sys.stdin

2. 以標準的輸出流作為輸出:

    1) C++: cout

    2) Php: echo

    3) Python: print

3. 可實現Mapper和Reducer,其他元件(InputFormat,Partitioner等需要用Java語言來實現)

Python實現Wordcount:

1. mapper.py

[[email protected] wordcount]# vim mapper.py

寫入

#!/usr/bin/python
import sys
word2count = {}
for line in sys.stdin:
    line = line.strip()
    words = filter(lambda word:word,line.split())
    for word in words:
        print("%s\t%s" % (word,1))

2. reducer.py

[[email protected] wordcount]# vim reducer.py
寫入
#!/usr/bin/python
from operator import itemgetter
import sys

word2count = {}
for line in sys.stdin:
    line = line.strip()
    word,count = line.split()
    try:
        count = int(count)
        word2count[word] = word2count.get(word,0) + count
    except ValueError as err:
        print(err)
        pass

sorted_word2count = sorted(word2count.items(),key=itemgetter(0))
for word,count in sorted_word2count:
    print("%s\t%s" % (word, count))

3. 準備一個測試檔案test.txt

[[email protected] wordcount]# vim test.txt
寫入
this is a test
this is a test
this is a test
this is a test

4. 本地測試

[[email protected] wordcount]# cat test.txt |python mapper.py |sort|python reducer.py 
a	4
is	4
test	4
this	4
[[email protected] wordcount]#

5. 叢集執行

叢集執行前要將本地的測試檔案上傳到hdfs
[[email protected] wordcount]# hadoop fs -mkdir /user/root/wordcount
[[email protected] wordcount]# hadoop fs -put test.txt /user/root/wordcount/
[[email protected] wordcount]# hadoop fs -ls /user/root/wordcount/
Found 1 items
-rw-r--r--   3 root root         60 2018-05-14 09:58 /user/root/wordcount/test.txt
[[email protected] wordcount]# 

執行mapreduce

[[email protected] wordcount]# hadoop jar /opt/cloudera/parcels/CDH-5.13.1-1.cdh5.13.1.p0.2/jars/hadoop-streaming-2.6.0-cdh5.13.1.jar -D mapred.reduce.tasks=1 -mapper "python mapper.py" -reducer "python reducer.py" -file mapper.py -file reducer.py -input /user/root/wordcount/test.txt -output /user/root/wordcount/out
18/05/14 10:00:37 WARN streaming.StreamJob: -file option is deprecated, please use generic option -files instead.
packageJobJar: [mapper.py, reducer.py] [/opt/cloudera/parcels/CDH-5.13.1-1.cdh5.13.1.p0.2/jars/hadoop-streaming-2.6.0-cdh5.13.1.jar] /tmp/streamjob7327942722840197442.jar tmpDir=null
18/05/14 10:00:39 INFO mapred.FileInputFormat: Total input paths to process : 1
18/05/14 10:00:39 INFO mapreduce.JobSubmitter: number of splits:2
18/05/14 10:00:39 INFO Configuration.deprecation: mapred.reduce.tasks is deprecated. Instead, use mapreduce.job.reduces
18/05/14 10:00:40 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1526119303078_0004
18/05/14 10:00:40 INFO impl.YarnClientImpl: Submitted application application_1526119303078_0004
18/05/14 10:00:40 INFO mapreduce.Job: The url to track the job: http://g13-1.novalocal:8088/proxy/application_1526119303078_0004/
18/05/14 10:00:40 INFO mapreduce.Job: Running job: job_1526119303078_0004
18/05/14 10:00:46 INFO mapreduce.Job: Job job_1526119303078_0004 running in uber mode : false
18/05/14 10:00:46 INFO mapreduce.Job:  map 0% reduce 0%
18/05/14 10:00:50 INFO mapreduce.Job:  map 100% reduce 0%
18/05/14 10:00:56 INFO mapreduce.Job:  map 100% reduce 100%
18/05/14 10:00:57 INFO mapreduce.Job: Job job_1526119303078_0004 completed successfully
18/05/14 10:00:57 INFO mapreduce.Job: Counters: 49
	File System Counters
		FILE: Number of bytes read=61
		FILE: Number of bytes written=469610
		FILE: Number of read operations=0
		FILE: Number of large read operations=0
		FILE: Number of write operations=0
		HDFS: Number of bytes read=290
		HDFS: Number of bytes written=23
		HDFS: Number of read operations=9
		HDFS: Number of large read operations=0
		HDFS: Number of write operations=2
	Job Counters 
		Launched map tasks=2
		Launched reduce tasks=1
		Rack-local map tasks=2
		Total time spent by all maps in occupied slots (ms)=5834
		Total time spent by all reduces in occupied slots (ms)=3080
		Total time spent by all map tasks (ms)=5834
		Total time spent by all reduce tasks (ms)=3080
		Total vcore-milliseconds taken by all map tasks=5834
		Total vcore-milliseconds taken by all reduce tasks=3080
		Total megabyte-milliseconds taken by all map tasks=5974016
		Total megabyte-milliseconds taken by all reduce tasks=3153920
	Map-Reduce Framework
		Map input records=4
		Map output records=16
		Map output bytes=92
		Map output materialized bytes=104
		Input split bytes=200
		Combine input records=0
		Combine output records=0
		Reduce input groups=4
		Reduce shuffle bytes=104
		Reduce input records=16
		Reduce output records=4
		Spilled Records=32
		Shuffled Maps =2
		Failed Shuffles=0
		Merged Map outputs=2
		GC time elapsed (ms)=235
		CPU time spent (ms)=3290
		Physical memory (bytes) snapshot=1292472320
		Virtual memory (bytes) snapshot=8453484544
		Total committed heap usage (bytes)=1889533952
	Shuffle Errors
		BAD_ID=0
		CONNECTION=0
		IO_ERROR=0
		WRONG_LENGTH=0
		WRONG_MAP=0
		WRONG_REDUCE=0
	File Input Format Counters 
		Bytes Read=90
	File Output Format Counters 
		Bytes Written=23
18/05/14 10:00:57 INFO streaming.StreamJob: Output directory: /user/root/wordcount/out
[[email protected] wordcount]# 
此時可以去Web UI上檢視結果。


命令列檢視結果

[[email protected] wordcount]# hadoop fs -cat /user/root/wordcount/out/part-00000
a	4
is	4
test	4
this	4
[[email protected] wordcount]# 

官方文件:https://hadoop.apache.org/docs/r1.0.4/cn/streaming.html

相關推薦

[Hadoop] Hadoop Streaming使用Python程式設計

Hadoop Streaming 是Hadoop提供方的一個程式設計工具,它允許使用者使用任何可執行檔案或者指令碼作為Mapper和Reducer。Hadoop Streaming 多語言程式設計1. 以標準輸入流作為輸入:    1) C++: cin    2) Php:

Hadoop】MapReduce程式設計Demo新舊

1.wordcount。 import java.io.IOException; import java.util.Iterator; import java.util.StringTokenizer; import org.apache.hadoop.conf.Con

【Apache Hadoop】MapReuce 程式設計總結-多MapReduce執行

學習hadoop,必不可少的就是寫MapReduce程式,當然,對於簡單的分析程式,我們只需一個MapReduce就能搞定,這裡就不提單MapReuce的情況了,網上例子很多,大家可以百度Google一下。對於比較複雜的分析程式,我們可能需要多個Job或者多個Map或者Re

Hadoop之MapReduce程式設計模型

一、MapReduce程式設計模型         MapReduce將作業的整個執行過程分為兩個階段:Map階段和Reduce階段         Map階段由一定數量的Map Task組成             輸入資料格式解析:InputFormat        

hadoop之mapreduce程式設計例項(系統日誌初步清洗過濾處理)

剛剛開始接觸hadoop的時候,總覺得必須要先安裝hadoop叢集才能開始學習MR程式設計,其實並不用這樣,當然如果你有條件有機器那最好是自己安裝配置一個hadoop叢集,這樣你會更容易理解其工作原理。我們今天就是要給大家演示如何不用安裝hadoop直接除錯程式設計MapR

hadoop--Hadoop生態上幾個技術的關系與區別:hive、pig、hbase 關系與區別

正是 讀寫操作 java 結構化 映射 map 外部表 base metastore Pig 一種操作hadoop的輕量級腳本語言,最初又雅虎公司推出,不過現在正在走下坡路了。當初雅虎自己慢慢退出pig的維護之後將它開源貢獻到開源社區由所有愛好者來維護。不過現在還是有些公司

Hadoop hadoop yarn 指令相關引數詳解

[Plain Text] 純文字檢視 複製程式碼 ? 1 2 [[email protected] bin]$ yarn classpath /home/hadoop/apache/hadoop-2.4.1/etc/hadoop:

[Hadoop]Hadoop異常彙總,不定期更新

異常1:jps命令檢視NameNode未啟動 重新啟動linux虛擬機器後,發現hadoop   start-all.sh命令啟動不了NameNode。並百度搜索了很多網站,並未能成功結果。這裡提供一個出現該問題的一個可能(筆者也是遇到的這樣的問題)。 問題描述:jps命令

8.大資料學習之旅——hadoop-Hadoop完全分散式配置

Hadoop完全分散式配置 關閉防火牆 修改主機名 配置hosts檔案。將需要搭建叢集的主機全部配置到hosts檔案中 192.168.32.138 hadoop01 192.168.32.139 hadoop02 192.168.32.14

[Hadoop] Hadoop學習筆記之Hadoop基礎

1 Hadoop是什麼?   Google公司發表了兩篇論文:一篇論文是“The Google File System”,介紹如何實現分散式地儲存海量資料;另一篇論文是“Mapreduce:Simplified Data Processing on Large Clusters”,介紹如何對分散式大規模

[Hadoop]Hadoop單元測試MRUnit

在MapReduce中,map函式和reduce函式的獨立測試是非常方便的,這是由函式風格決定的 。MRUnit是一個測試庫,它便於將已知的輸入傳遞給mapper或者檢查reducer的輸出是否符合預期。MRUnit與標準的執行框架(JUnit)一起使用。1. 設定開發環境m

[Hadoop] hadoop運維篇(一)

首先建議datanode和tasktracker分開寫獨立的exclude檔案,因為一個節點即可以同時是datanode和tasktracker,也可以單獨是datanode或tasktracker。 1、刪除datanode 修改namenode上的hdfs-site.xml <prope

[ Hadoop ] Hadoop簡介

分散式的雲端計算技術通過整合資源,為降低成本和能源消耗提供了一種簡化、集中的計算平臺。這種低成本、髙擴充套件、髙效能的特點促使其迅速發展 Hadoop分散式框架提供了一個分散式系統的基礎架構,使使用者在不瞭解分散式底層的情況下也能夠開發分散式應用,充分利用由H

[Hadoop]Hadoop的安裝與配置

        作業系統:ubuntu 14.04 LTS         Java 版本:openjdk-1.7.0_91         Hadoop 版本:hadoop-1.2.1 (下載地址:hadoop-1.2.1) 安裝         下載 hadoop-1.

[Hadoop]Hadoop+HBase 偽分散式安裝配置

(一)hadoop偽分散式的配置:        這個也可以參考《hadoop權威指南》上面寫的很全面,這裡再說一遍:   我的機器配置環境:        OS:Ubuntu10.10  ,hadoop版本:hadoop-0.20.2(下載網址: http://apache.etoak.com//

安裝Hadoop——Hadoop實戰初級部分學習筆記

3、安裝Hadoop 1、window上裝    (建議xp 玩玩就行了,實際要在linux) 1.1、裝JDK(不要裝到帶空格等目錄中。。) 1.2、安裝cygwin 需要安裝oenSSL、VIM、Base 1.3、在cygwin安裝SSHD   ssh-h

[Hadoop]Hadoop章2 HDFS原理及讀寫過程

client 第一個 fsimage slave lin 需要 流程 結構 容錯 HDFS(Hadoop Distributed File System )Hadoop分布式文件系統。 HDFS有很多特點: ① 保存多個副本,且提供容錯機制,副本丟失或宕機自動恢

hadoop程式設計實踐(一)

Hadoop操作基礎與IDE環境配置。 Hadoop操作 目錄操作 在操作之前,需要在hadoop根目錄下建立與Linux使用者同名的user目錄 ./bin/hdfs dfs -mkdir -p /user/hadoop 之後,所有的檔案都預設放

hadoop程式設計實踐(二)

叢集上使用 jar包 首先將之前FileExist檔案進行打包,得到.jar檔案: 將其拷貝到叢集中,並使用hadoop jar命令執行: WordCount 新增依賴

Hadoop學習筆記—4.初識MapReduce 一、神馬是高大上的MapReduce   MapReduce是Google的一項重要技術,它首先是一個程式設計模型,用以進行大資料量的計算。對於大資料

Hadoop學習筆記—4.初識MapReduce 一、神馬是高大上的MapReduce   MapReduce是Google的一項重要技術,它首先是一個程式設計模型,用以進行大資料量的計算。對於大資料量的計算,通常採用的處理手法就是平行計算。但對許多開發