[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的一項重要技術,它首先是一個程式設計模型,用以進行大資料量的計算。對於大資料量的計算,通常採用的處理手法就是平行計算。但對許多開發