Python 3 使用Hadoop 3之MapReduce總結

MapReduce 運行原理

MapReduce簡介

MapReduce是一種分布式計算模型,由Google提出,主要用于搜索領域,解決海量數據的計算問題。

MapReduce分成兩個部分:Map(映射)和Reduce(歸納)。

  1. 當你向MapReduce框架提交一個計算作業時,它會首先把計算作業拆分成若干個Map任務,然后分配到不同的節點上去執行,每一個Map任務處理輸入數據中的一部分。
  2. 當Map任務完成后,它會生成一些中間文件,這些中間文件將會作為Reduce任務的輸入數據。Reduce任務的主要目標就是把前面若干個Map的輸出匯總并輸出

MapReduce 基本模式和處理思想

大規模數據處理時,MapReduce在三個層面上的基本構思:

1、對付大數據處理:分而治之

????????對相互之間不具有計算依賴關系的大數據,實現并行最自然的辦法就是采取分而治之的策略。

2、上升到抽象模型:Mapper與Reduce

?????????MPI等并行計算方法缺少高層并行編程模型,程序員需要自行指定存儲,計算,分發等任務,為了克服這一缺陷,MapReduce借鑒了Lisp函數式語言中的思想,用Map和Reduce兩個函數提供了高層的并發編程模型抽象。

3、上升到架構:統一架構,為程序員隱藏系統層細節

????????MPI等并行計算方法缺少統一的計算框架支持,程序員需要考慮數據存儲、劃分、分發、結果收集、錯誤恢復等諸多細節;為此,MapReduce設計并提供了同意的計算框架,為程序員隱藏了絕大多數系統層面的處理系統。

大數據處理:分而治之

?建立Map和Reduce抽象模型

借鑒函數式程序設計語言Lisp中的思想,定義了Map和Reduce兩個抽象的操作函數:

Map:(k1:v1)->[(k2:v2)]
Reduce:(k2:[v2])->[(k3:v3)]
每個map都處理結構、大小相同的初始數據塊,也就是(k1:v1),其中k1是主鍵,可以是數據塊索引,也可以是數據塊地址;

v1是數據。經過Map節點的處理后,生成了很多中間數據集,用[]表示數據集的意思。而Reduce節點接收的數據是對中間數據合并后的數據,也就是把key值相等的數據合并在一起了,即(k2:[v2]);再經過Reduce處理后,生成處理結果。

上升到架構:統一架構,為程序員隱藏系統層細節

?核心流程說明:

1.有一個待處理的大數據,被劃分成大小相同的數據庫(如64MB),以及與此相應的用戶作業程序。

2.系統中有一個負責調度的主節點(Master),以及數據Map和Reduce工作節點(Worker).

3.用戶作業提交個主節點。

4.主節點為作業程序尋找和配備可用的Map節點,并將程序傳送給map節點。

5.主節點也為作業程序尋找和配備可用的Reduce節點,并將程序傳送給Reduce節點。

6.主節點啟動每一個Map節點執行程序,每個Map節點盡可能讀取本地或本機架的數據進行計算。(實現代碼向數據靠攏,減少集群中數據的通信量)。

7.每個Map節點處理讀取的數據塊,并做一些數據整理工作(combining,sorting等)并將數據存儲在本地機器上;同時通知主節點計算任務完成并告知主節點中間結果數據的存儲位置。

8.主節點等所有Map節點計算完成后,開始啟動Reduce節點運行;Reduce節點從主節點所掌握的中間結果數據位置信息,遠程讀取這些數據。

9.Reduce節點計算結果匯總輸出到一個結果文件,即獲得整個處理結果。
?

Python 實現 MapReduce?

Python MapReduce 代碼

????????使用python寫MapReduce的“訣竅”是利用Hadoop流的API,通過STDIN(標準輸入)、STDOUT(標準輸出)在Map函數和Reduce函數之間傳遞數據。

? ? ? 我們唯一需要做的是利用Python的sys.stdin讀取輸入數據,并把我們的輸出傳送給sys.stdout。Hadoop流將會幫助我們處理別的任何事情。

Map階段

PyCharm 功能測試代碼:

# _*_ coding : UTF-8_*_
# 開發者 : zhuozhiwengang
# 開發時間 : 2023/8/14 15:38
# 文件名稱 : pythonMap_2
# 開發工具 : PyCharm
import sys
for line in sys.stdin:line = line.strip()words = line.split()for word in words:print("%s\t%s" % (word, 1))

效果截圖:

Reduce階段

PyCharm 功能測試代碼:

from operator import itemgetter
import syscurrent_word = None
current_count = 0
word = Nonefor line in sys.stdin:line = line.strip()word, count = line.split('\t', 1)try:count = int(count)except ValueError:  # count如果不是數字的話,直接忽略掉continueif current_word == word:current_count += countelse:if current_word:print("%s\t%s" % (current_word, current_count))current_count = countcurrent_word = wordif word == current_word:  # 不要忘記最后的輸出print("%s\t%s" % (current_word, current_count))

效果截圖:

Hadoop Streaming?

Hadoop streaming是Hadoop的一個工具, 它幫助用戶創建和運行一類特殊的map/reduce作業。

實例:我們可以用Python來編寫腳本:mapper.py和reducer.py。

語法:

$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-streaming.jar \
-input myInputDirs \
-output myOutputDir \
-mapper mapper.py \
-reducer reducer.py

Hadoop? Streaming工具會創建一個Map/Reduce作業,并把它發送給合適的集群,同時監視這個作業的整個執行過程。所以,面向具體任務,重點是我們該怎么編寫python腳本呢?

總結:一、編寫的代碼要遵從標準輸入輸出流;

? ? ? ? ? 二、因為程序是要上傳到集群上執行的,一些Python庫可能是不受支持的,應要注意這點。
?

操作實例

待補充?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/37364.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/37364.shtml
英文地址,請注明出處:http://en.pswp.cn/news/37364.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

tauri-react:快速開發跨平臺軟件的架子,支持自定義頭部和窗口陰影效果

tauri-react 一個使用 taurireacttsantd 開發跨平臺軟件的模板,支持窗口頭部自定義和窗口陰影,不用再自己做適配了,拿來即用,非常 nice。 開原地址:GitHub - Sjj1024/tauri-react: 一個最基礎的使用tauri和react開發…

生成式 AI 在泛娛樂行業的應用場景實踐 – 助力風格化視頻內容創作

感謝大家閱讀《生成式 AI 行業解決方案指南》系列博客,全系列分為 4 篇,將為大家系統地介紹生成式 AI 解決方案指南及其在電商、游戲、泛娛樂行業中的典型場景及應用實踐。目錄如下: 《生成式 AI 行業解決方案指南與部署指南》《生成式 AI 在…

一個概率論例題引發的思考

浙江大學版《概率論與數理統計》一書,第13章第1節例2: 這個解釋和模型比較簡單易懂。 接下來,第13章第2節的例2也跟此模型相關: 在我自己的理解中,此題的解法跟上一個題目一樣,其概率如下面的二維矩陣&a…

聊聊計算機技術

目錄 1.計算機的概念 2.計算機的發展過程 3.計算機的作用 4.計算機給人類帶來的福利 1.計算機的概念 計算機是一種用于處理和存儲數據的電子設備。它能夠執行各種操作,比如計算、邏輯操作、數據存儲和檢索等。計算機由硬件和軟件兩部分組成。 計算機的硬件包括中…

Go 語言并發編程 及 進階與依賴管理

1.0 從并發編程本質了解Go高性能的本質 1.1 Goroutine 協程可以理解為輕量級線程; Go更適合高并發場景原因之一:Go語言一次可以創建上萬協成; “快速”:開多個協成 打印。 go func(): 在函數前加 go 代表 創建協程; time.Sleep():…

基于深度信念網絡的西儲大學軸承故障分類識別,基于EMD+DBN的西儲大學軸承故障識別,LCD+DBN,LMD+DBN

目錄 背影 DBN神經網絡的原理 DBN神經網絡的定義 受限玻爾茲曼機(RBM) (EMD,LCD,LMD)+DBN的深度信念網絡的西儲大學軸承故障分類識別 基本結構 主要參數 數據 MATALB代碼 結果圖 展望 背影 DBN是一種深度學習神經網絡,擁有提取特征,非監督學習的能力,是一種非常好的分類…

Nacos使用SpringCloudAlibaba+Dubbo實現

Nacos簡介 Nacos是阿里的一個開源產品,它是針對微服務架構中的服務發現、服務治理、配置管理的綜合型解決方案。 官方介紹是這樣的: Nacos 致力于幫助您發現、配置和管理微服務。Nacos 提供了一組簡單易用的特性集,幫助您實現動態服務發現、…

CSDN編程題-每日一練(2023-08-14)

CSDN編程題-每日一練(2023-08-14) 一、題目名稱:小股炒股二、題目名稱:王子闖閘門三、題目名稱:圓小藝 一、題目名稱:小股炒股 時間限制:1000ms內存限制:256M 題目描述: …

Linux學習之防火墻概述

防火墻分類: 軟件防火墻:常用于數據包的過濾,比如限制某些ip或者端口,進行某些數據的轉發或者傳送 硬件防火墻:防御地域攻擊 軟件防火墻的分類: 包過濾防火墻:控制比較寬泛,防御效果…

ISIS技術(第三十七課)

1 分享一下華為官網上的一張地圖 官網地址:https://support.huawei.com/hedex/hdx.do?docid=EDOC1000105967&id=ZH-CN_CONCEPT_0000001501534705 2 路由的分類 -直連路由 直接連接的路由,且配置了IP地址之后(在同一網段內),就是直連路由。 -非直連路由 -靜態路由…

Shell命令之eval命令

1、基本作用 二次執行命令 2、基本格式 eval command-line3、例如 以下命令無法執行 pipe"|" ls $pipe wc -l ls: -l: No such file or directory ls: wc: No such file or directory ls: |: No such file or directory以下命令可以執行 eval ls $pipe wc -lSh…

Apache Dubbo概述

一、課程目標 1. 【了解】軟件架構的演進過程 2. 【理解】什么是RPC 3. 【掌握】Dubbo架構 4. 【理解】注冊中心Zookeeper 5. 【掌握】Zookeeper的安裝和使用 6. 【掌握】Dubbo入門程序 7. 【掌握】Dubbo管理控制臺的安裝和使用 8. 【理解】Dubbo配置二、分布式RPC框架Apache …

2021年06月 C/C++(二級)真題解析#中國電子學會#全國青少年軟件編程等級考試

第1題:數字放大 給定一個整數序列以及放大倍數x,將序列中每個整數放大x倍后輸出。 時間限制:1000 內存限制:65536 輸入 包含三行: 第一行為N,表示整數序列的長度(N ≤ 100); 第二行為N個整數(不超過整型范圍…

(css)點擊前隱藏icon圖表 點擊后顯示

(css)點擊前隱藏icon圖表 點擊后顯示 效果 html <liv-for"(item,index) in sessionList":key"index"class"liClass":class"{ active: change2 index }"tabindex"2">...<el-tooltip class"item" effec…

c++病毒/惡搞代碼大全( 下 )

注&#xff1a;以下代碼應勿用于非法&#xff08;Dev-c5.11實測可用&#xff09; 警告:以下為危險/永久性程序&#xff0c;請慎重使用 8. 效果:禁用任務管理器 提示:可能被殺毒軟件攔截 #include <stdio.h> #include <windows.h> int main() {HKEY hkey;DWORD …

Neo4j之OPTIONAL MATCH基礎

OPTIONAL MATCH 是 Neo4j 查詢語言 Cypher 中的一種關鍵字&#xff0c;用于在查詢中執行可選的模式匹配。它允許你在匹配節點和關系的過程中&#xff0c;即使匹配失敗也不影響整個查詢結果。OPTIONAL MATCH 允許你查找與指定模式匹配的數據&#xff0c;如果匹配失敗&#xff0c…

分布式監控平臺——Zabbix

市場上常用的監控軟件&#xff1a; 傳統運維&#xff1a;zabbix、 Nagios 一、zabbix概述 作為一個運維&#xff0c;需要會使用監控系統查看服務器狀態以及網站流量指標&#xff0c;利用監控系統的數據去了解上線發布的結果&#xff0c;和網站的健康狀態。 利用一個優秀的監…

Dedecms V110最新版RCE---Tricks

前言 剛發現Dedecms更新了發布版本&#xff0c;順便測試一下之前的day有沒有修復&#xff0c;突然想到了新的tricks去實現RCE。 文章發布的時候估計比較晚了&#xff0c;一直沒時間寫了。 利用 /uploads/dede/article_string_mix.php /uploads/dede/article_template_rand.…

Blender增強現實3D模型制作指南【AR】

推薦&#xff1a;用 NSDT編輯器 快速搭建可編程3D場景 將靜態和動畫 3D 內容集成到移動增強現實 (AR) 體驗中是增強用戶沉浸感和參與度的高效方法。 然而&#xff0c;為 AR 創建 3D 對象可能相當艱巨&#xff0c;尤其是對于那些缺乏 3D 建模經驗的人來說。 與添加視頻或照片 AR…

黑馬項目一階段面試58題 蒼穹外賣具體技術細節9題

一、Nginx的作用 1.反向代理 前端把請求發送給nginx&#xff0c;再由nginx將請求發送給后端服務器。 2.負載均衡 提高訪問速度&#xff1b;進行負載均衡&#xff1b;保證后端服務安全 二、Swagger有什么作用 直接調試后端請求響應 三、Redis常見數據類型 String、Hash、L…