Hadoop之wordcount實例-MapReduce程序

2021-01-08 專注物聯網知識

實驗目的

利用搭建好的大數據平臺 Hadoop,對 HDFS 中的文本文件進行處理,採用 Hadoop Steaming 方式,使用 Python 語言實現英文單詞的統計功能,並輸出單詞統計結果。

實驗內容

將附件"COPYING_LGPL.txt"上傳 Hadoop 集群的 HDFS 中,採用 Hadoop Steaming方式,使用 Python語言實現字詞統計功能,輸出字詞統計結果,即實現文本單詞的詞頻統計功能。要求將實驗原理,過程,代碼分析,結果分析記錄在實驗報告中。

實驗步驟

實驗原理簡述 MapReduce 的 Data Flow 如下圖所示,原始數據經過 mapper 處理,再進行 partition 和 sort,到達 reducer,輸出最後結果。Hadoop 的MapReduce處理框架,一般的編程模型如下圖所示, 將一個業務拆分為 Mapper 和 Reducer 兩個階段。使用 Python 語言背後的「技巧」是我們將使用 Hadoop Streaming API 來幫助我們通過 STDIN(標準輸入)和 STDOUT(標準輸出)在 Map 和 Reduce 代碼之間傳遞數據。我們將簡單地使用 Python 的 sys.stdin 來讀取輸入數據並將我們自己的輸出列印到 sys.stdout。這就是我們需要做的全部,因為 Hadoop Streaming 會幫助我們處理其他所有事情!

使用 Python 來調用 Hadoop Streaming API,其基本流程如下圖。用 Python 寫MapReduce 還需要了解 HadoopStreaming ,在 Apache 的 Hadoop 官網可以查看HadoopStreaming 的運行機制,簡單來說就是 HadoopStreaming 是可運行特殊腳本的MapReduce 作業的工具 ,使用格式如下:

hadoop jar /home/hadoop/app/hadoop-2.7.7/share/hadoop/tools/lib/hadoopstreaming-2.7.7.jar -files /home/hadoop/mapper.py -mapper /home/hadoop/mapper.py -files /home/hadoop/reducer.py -reducer /home/hadoop/reducer.py -input /wordcount/COPYING_LGPL.txt -output /wordcount/output

實驗過程將本地物理機的測試文本文件 COPYING_LGPL.txt 上傳到虛擬主機 Master 上,在從 Master 上傳到 Hadoop 集群的 HDFS 文件系統上/wordcount/COPYING_LGPL.txt。

使用 Python 編寫 MapReduce 程序,分別根據實現原理編寫 Mapper 程序和Reducer 程序,使用 Vim 編寫 Mapper 和 Reducer 腳本,並使兩個腳本具有可執行權限,及使用命令: chmod +x mapper.py reducer.py。

使用 HadoopStreaming 命令來運行自己編寫的程序,其命令如下:

hadoop jar /home/hadoop/app/hadoop-2.7.7/share/hadoop/tools/lib/hadoopstreaming-2.7.7.jar -files /usr/bin/mapper.py -files /usr/bin/reducer.py -mapper "python /usr/bin/mapper.py" -reducer "python /usr/bin/reducer.py" -input /wordcount/input/COPYING_LGPL.txt -output /wordcount/output

可以編寫一個 shell 腳本命令,來運行 HadoopStreaming 命令,這樣在 shell 腳本中首先使用刪掉輸出目錄文件的命令(hdfs dfs -rm -r -f /wordcount/output),防止多次測試出錯, 同時每次測試只需要運行 shell 腳本即可,這樣在做實驗的時候更加方便操作,而不用每次都敲命令。

對HadoopStreaming 命令進行解釋:

hadoop jar #指調用hadoop jar包的命令

/home/hadoop/app/hadoop-2.7.7/share/hadoop/tools/lib/hadoopstreaming-2.7.7.jar #調用HadoopStreaming 命令的jar包

-files /usr/bin/mapper.py #提交的作業的路徑

-files /usr/bin/reducer.py #提交的作業的路徑

-mapper "python /usr/bin/mapper.py" #mapper程序的解釋器python以及程序路徑

-reducer "python /usr/bin/reducer.py" #reducer程序的解釋器python以及程序路徑

-input /wordcount/input/COPYING_LGPL.txt #HDFS上的輸入文件的路徑

-output /wordcount/output #HDFS上的輸出文件的路徑

HadoopStreaming API 的調用接口說明: 調用 python 中的標準輸入流 sys.stdin ,MAP 具體過程是, HadoopStream 每次從 input 文件讀取一行數據,然後傳到 sys.stdin中,運行 payhon 的 map 函數腳本,然後用 print 輸出回 HadoopStreeam。 REDUCE 過程一樣。所以 M 和 R 函數的輸入格式為 for line in sys.stdin:line=line.strip。

Mapper 過程如下: 第一步,在每個節點上運行我們編寫的 map 程序 ,即就是 調用標準輸入流 , 讀取文本內容,對文本內容分詞,形成一個列表,讀取列表中每一個元素的值 , Map 函數輸出, key 為 word,下一步將進行 shuffle 過程,將按照key 排序,輸出,這兩步為 map 階段工作為,在本地節點進行,第二步, hadoop 框架,把我們運行的結果,進入 shuffle 過程,每個節點對 key 單獨進行排序,然後輸出。Reducer 過程:第一步, merge 過程,把所有節點匯總到一個節點,合併並且按照 key排序。第二步,運行 reducer 函數。

Python原始碼

分析 WordCount 程序實例的實現原理步驟,具體 Python 代碼如下原始碼所示,前面是簡要原理的實現,後面是使用 Python 的迭代器和生成器升級 mapper 程序和 reducer 程序。

MapReduce 的 WordCount 簡要原理 Python 實現原始碼如下,分為Mapper階段和Reducer階段,想要查看Python原始碼的請查看我的博客文章,博客名雲主宰蒼穹。

相關焦點

  • 大數據基礎入門——編寫經典大數據實戰項目wordcount程序!
    獲取更多精彩文章請關注云主宰蒼穹引言:前面學習了Hadoop的起源背景,了解了分布式儲存HDFS和並行編程計算模型MapReduce,接下來我們進行大數據的經典項目程序的編程以及實現,即就是wordcount。
  • MapReduce詳解
    = current_word: print('%s\t%s' % (current_word, sum)) current_word = word sum = 0​ sum += int(count)​print('%s\t%s' % (current_word, sum)) 我們先把輸入文件上傳到HDFS上去hadoop fs -put /input.txt
  • Java從WordCount看hadoop執行流程
    準備要執行Map reduce程序,首先得安裝hadoop,hadoop安裝可以參考hadoop安裝啟動hdfs和yarnstart-dfs.cmdstart-yarn.cmd創建待處理數據目錄:hadoop fs -mkdir
  • MapReduce知識整理
    2)第一個階段的MapTask並發實例,完全並行運行,互不相干。3)第二個階段的ReduceTask並發實例互不相干,但是他們的數據依賴於上一個階段的所有MapTask並發實例的輸出。4)MapReduce編程模型只能包含一個Map階段和一個Reduce階段,如果用戶的業務邏輯非常複雜,那就只能多個MapReduce程序,串行運行。
  • hadoop的補充---03
    hadoop.mapreduce.TaskAttemptContext taskContext = new org.apache.hadoop.mapreduce.task.TaskAttemptContextImpl(job
  • HADOOP快速入門
    1.2 MapReduce框架結構及核心運行機制1.2.1 結構一個完整的mapreduce程序在分布式運行時有三類實例進程:1、MRAppMaster:負責整個程序的過程調度及狀態協調2、mapTask:負責map階段的整個數據處理流程3、ReduceTask:負責reduce
  • hadoop HA集群的安裝
    22 hadoop]$ hadoop fs -put /tmp/test.txt /wordcount將/tmp/test.txt文件上傳於hdfs中,並重命名為wordcount[hadoop@10-124-147-22 hadoop]$ hadoop fs -cat /wordcounthello worldhello mysqlhello mongohello elasticsearchhello
  • 好程式設計師大數據分享Hadoop2.X的環境配置與運行官方案例
    hadoop-2.7.2]$ mkdir input2) 將hadoop的xml配置文件複製到input[hadoop@hadoop01 hadoop-2.7.2]$ cp etc/hadoop/*.xml input/3) 執行share目錄下的mapreduce程序[hadoop@hadoop01 hadoop-2.7.2]$ bin/hadoop
  • 老師,IDEA如何在本地運行和調試Hadoop程序?
    簡介正如上文所說,在單機模式下,可以將MapReduce程序當成一個普通的JAVA程序;對比偽分布模式,其主要不足就在於沒有Hadoop的整個管理控制系統,如JobTracker面板,而只是用來運行和調試程序;而其優點就在於開發調試方便,編寫的程序通常不需要修改即可在真實的分布式Hadoop集群下運行。
  • hadoop分布式計算MapReduce詳細總結
    一個完整的mapreduce程序有三類實例進程:MRAppMaster:負責整個程序的協調過程MapTask:負責map階段的數據處理ReduceTask:負責reduce階段的數據處理(1)Map階段由一定數量的Map Task組成格式解析:InputFormat(把輸入文件分片)據處理:繼承Mapper
  • hadoop服務快速部署
    這篇文章記錄下針對不同的hadoop版本進行服務部署的過程,希望可以幫到你們安裝docker hadoop2.7.0一鍵部署docker hadoop3.0.0集群(一個master 三個slave)安裝docker hadoop 3.2.0 a、docker啟動 b、docker compose方式啟動
  • 多臺阿里雲伺服器搭建Hadoop集群
    包wget https://mirrors.bfsu.edu.cn/apache/hadoop/common/hadoop-2.9.2/hadoop-2.9.2.tar.gz解壓,jdk、hadooptar -zxvf hadoop-2.9.2.tar.gz -C 
  • Hadoop知識整理
    執行share目錄下的MapReduce程序 bin/hadoop jarshare/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output &39;4.
  • 通過 Serverless Regsitry 快速開發與部署一個 WordCount 實例
    單詞計數通過兩個函數 Map 和 Reduce,可以快速地統計出文本文件中每個單詞出現的個數,它雖然簡單,但也是最能體現 MapReduce 思想的程序之一。而 Serverless 的出現,為 MapReduce 進行大數據處理又提供了一個新的部署方案,Serverless 與 MapReduce 究竟如何結合呢?
  • 大數據中java與mapreduce編程
    mapreduce介紹hadoop mapreduce是Google提出的大規模分布式並行計算模型,用於海量數據離線計算。、map、shuffle、reduce、outputshuffle過程包括sort、copy、combine操作reduce之前有時涉及二次排序mr運行過程示意圖mr開發方式1、hadoop streaming執行mapreduce2、hive執行mapreduce3、java MR編程hadoop
  • 大數據中java與mapreduce編程
    mapreduce介紹hadoop mapreduce是Google提出的大規模分布式並行計算模型streaming執行mapreduce2、hive執行mapreduce3、java MR編程hadoop streaming執行mr優點:可以用大多數語言開發代碼量少,開發速度快方便本地調試不足:
  • 大數據平臺搭建:Hadoop集群運行模式與相關配置詳解
    Hadoop官方網站:http://hadoop.apache.org/4.1 本地運行模式(官方wordcount)1)創建在hadoop-3.1.3文件下面創建一個wcinput文件夾mkdirmapreducebigdatabigdata保存退出::wq4)回到Hadoop目錄/opt/module/hadoop-3.1.35)執行程序hadoop jar share/hadoop/mapreduce/
  • 原因都在MapReduce
    1.1 MapReduce是什麼hadoop MapReduce是一個軟體框架,基於該框架能夠容易地編寫應用程式,這些應用程式能夠運行在由上千個商用機器組成的大集群上,並以一種可靠的,具有容錯能力的方式並行地處理上TB級別的海量數據集。
  • Hadoop分布式環境搭建
    運行 wordcount 程序,體驗並檢驗 Hadoop 集群。關閉 Hadoop 集群,現在 master 主機上關閉 HDFS,在 slave1 主機上關閉YARN,則 slave2 主機上的 Hadoop 集群的進程就自動被關閉了。實驗代碼或分析重啟網卡:systemctl restart network。
  • Hive WordCount實現示例
    (word string);# 將每一行句子拆分成每個單詞插入到表中hive> insert into table tbl_word select explode(split(line, " ")) as word from tbl_line;hive> select * from tbl_word;OKHadoopCommonHadoopDistributedFileSystemHadoopYARNHadoopMapReducehive