Map Reduce和流處理

歡迎大家前往騰訊云+社區,獲取更多騰訊海量技術實踐干貨哦~
本文由@從流域到海域翻譯,發表于騰訊云+社區

map()和reduce()是在集群式設備上用來做大規模數據處理的方法,用戶定義一個特定的映射,函數將使用該映射對一系列鍵值對進行處理,直接產生出一系列鍵值對。

Map Reduce和流處理

Hadoop的Map / Reduce模型在并行處理大量數據方面非常出色。它提供了一個通用的分區機制(基于數據的關鍵)來分配不同機器上的聚合式工作負載。基本上, map / reduce的算法設計都是關于如何在處理過程中的不同階段為記錄值選擇正確的key。

然而,“時間維度”與數據的其他維度屬性相比具有非常不同的特征,特別是在涉及實時數據處理時。它對面向批處理的Map/Reduce模型提出了一系列不同的挑戰。

  1. 實時處理需要非常低的響應延遲,這意味著沒有太多的數據能夠在“時間”維度上進行處理。
  2. 從多個數據源收集到的數據可能沒有全部到達匯總點。
  3. 在Map/Reduce的標準模型中,reduce階段在map階段完成之前無法啟動。而且在下載到reducer之前,所有處理過程的中間數據都保存在磁盤中。所有這些都顯著增加了處理的延遲。

盡管Hadoop Map/Reduce是針對批處理的工作負載而設計的,但某些應用程序(如欺詐檢測,廣告顯示,網絡監控需要實時響應以處理大量數據),現在已開始考慮各種調整Hadoop的方法以使其適合更實時的處理環境。在本篇文章中,我嘗試了一些基于Map/Reduce模型的執行低延遲并行處理的技術。

常用流處理模型

在這個模型中,數據是在各種各樣的OLTP系統中生成的,這些系統更新了事務數據存儲,并異步發送其他數據用于分析處理。分析處理過程將輸出寫入到決策模型,該決策模型會將信息反饋給OLTP系統來進行實時決策。

注意與OLTP系統分離的分析處理的“異步性質”,在該方式下OLTP系統不會放慢速度等待分析處理完成。無論如何,我們仍然需要盡快進行分析處理,否則決策模型將不能反映當前世界的真實場景,它將不會很有用處。什么程度的延遲可容忍的是應用程序指定的。

在Map/Reduce中進行微批處理

一種方法是根據時間窗(例如每小時)將數據分成小批量,并將每批中收集的數據提交給Map/Reduce作業。這需要分段機制,以便OLTP應用程序可以繼續獨立于分析處理。而作業調度程序用于規范生產者和消費者,基于此它們每個生產者或消費者都可以獨立進行。(生產者和消費者是在操作系統理論中對產生數據和處理數據的程序的稱呼,譯者注)

連續性Map/Reduce

這里讓我們想象一下有關Map/Reduce執行模型的一些可能的修改,以使其適應實時流處理。我并不擔心Hadoop在線原型(HOP)所采用的方法的向后兼容性 。

長時間運行

第一種修改方法是使mapper和reducer長時間運行。因此,我們不能等待map階段結束之后才開始reduce階段,因為map階段永遠不會結束。這意味著mapper在完成處理后會將數據推送到reducer,并讓reducer對數據進行排序。這種方法的缺點是它沒有機會去運行地圖側的combine()函數以降低帶寬使用率。它還將更多的工作量轉移到正需要進行分類的reducer。

注意在延遲和優化之間需要有一個折衷。優化需要更多的數據在源頭(即Mapper)就進行累積,如此即可以執行本地合并(即:結合在一起)。不幸的是,低延遲需要盡快發送數據,因此沒有太多時間使大量累積操作可以完成。

HOP提出了一種自適應流控制機制,在該方式下數據會被盡快推送到Reducer,直到Reducer被重載并退回(使用某種流量控制協議)。然后mapper將緩沖處理后的消息并在發送給reducer之前執行combine()函數。這種方法將會自動地來回移動Reducer和Mapper之間的聚合工作負載。

時間窗口:切片和范圍

這是一個“時間片(time slice)”概念和一個“時間范圍(time range)”的概念。“切片(Slice)”定義了執行reduce處理之前所累計結果的時間窗口。這也是mapper在發送到reducer之前應積累的最小數據量。

“范圍(Range)”定義了結果所匯總的時間窗口。它可以是一個具有明確起點定義的界標窗口或者是跳躍窗口的(考慮移動的界標場景)。它也可以是一個滑動窗口,其中從當前時間開始聚合的固定大小的窗口。

在從每個mapper接收到特定時間片后,reducer可以啟動聚合處理并將結果與之前的聚合結果進行合并。切片(大小)可以根據mapper發送的數據量來進行動態調整。

增量處理

請注意,reducer需要在收到所有mapper中相同時間片的所有記錄后計算聚合片值。之后,它會調用用戶定義的merge()函數將切片值與范圍值合并。如果范圍需要刷新(例如達到跳轉窗口邊界),將調用init()函數來獲取刷新的范圍值。如果范圍值需要更新(當某個切片值超出滑動范圍時),則會調用unmerge()函數。

以下是我們如何在每小時更新(即:一小時大小切片)的情況下,在24小時滑動窗口內跟蹤平均命中率(即:每小時總命中數)的示例。

# Call at each hit record
map(k1, hitRecord) {site = hitRecord.site# lookup the slice of the particular keyslice = lookupSlice(site)if (slice.time - now > 60.minutes) {# Notify reducer whole slice of site is sentadvance(site, slice)slice = lookupSlice(site)}emitIntermediate(site, slice, 1)
}combine(site, slice, countList) {hitCount = 0for count in countList {hitCount += count}# Send the message to the downstream nodeemitIntermediate(site, slice, hitCount)
}
復制代碼

# Called when reducer receive full slice from all mappers
reduce(site, slice, countList) {hitCount = 0for count in countList {hitCount += count}sv = SliceValue.newsv.hitCount = hitCountreturn sv
}# Called at each jumping window boundary
init(slice) {rangeValue = RangeValue.newrangeValue.hitCount = 0return rangeValue
}# Called after each reduce()
merge(rangeValue, slice, sliceValue) {rangeValue.hitCount += sliceValue.hitCount
}# Called when a slice fall out the sliding window
unmerge(rangeValue, slice, sliceValue) {rangeValue.hitCount -= sliceValue.hitCount
}
復制代碼

問答
比較好的MapReduce例子有哪些?
相關閱讀
MapReduce極簡教程
大數據運算模型 MapReduce 原理
如何為Hadoop選擇最佳彈性MapReduce框架

此文已由作者授權騰訊云+社區發布,原文鏈接:https://cloud.tencent.com/developer/article/1122471?fromSource=waitui


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

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

相關文章

Flume實戰監聽網絡端口

具體的配置解釋見官網 http://flume.apache.org/FlumeUserGuide.html#flume-sources 1、flume安裝目錄下新建文件夾 example 2、在example下新建文件 netcat-logger.conf內容如下:#name the components on this agent a1.sources r1 a1.sinks k1 a1.channels…

滑動關機代碼bat_BAT面試算法進階--(2) 無重復字符的最長子串(滑動法優化+ASCII碼法)...

一.算法題題目Given a string, find the length of the longest substring without repeating characters.ExampleGiven "abcabcbb", the answer is "abc", which the length is 3.Given "bbbbb", the answer is "b", with the length…

jpa findone怎么用_Jpa VS MyBatis,你用哪個?

經常看到有小伙伴在討論 JPA 和 MyBatis 這兩個孰優孰劣的問題,其實松哥覺得這是一個偽命題,沒必要為這種問題爭個面紅耳赤,每種框架有它存在的道理,也有各自擅長的事情,今天松哥就和大家來聊聊這兩個框架,…

國家開放大學本科計算機應用基礎,【(精華版)最新國家開放大學電大本科《計算機應用基礎》網絡課網考形考作業一及三試題答案】.docx...

【(精華版)最新國家開放大學電大本科《計算機應用基礎》網絡課網考形考作業一及三試題答案】(精華版)最新國家開放大學電大本科《計算機應用基礎》網絡課網考形考作業一及三試題答案 盜傳必究 形考作業一 一、單選題 1當前的計算機一般被認為是第四代計算機,它所采用…

Reset Password 重置密碼 (CentOS 5,6,7 ; Juniper Networks: SRX100 )

一些重置root 密碼的文檔分享(來自官網): CentOS 5,6,7 Juniper Networks : SRX100 鏈接:https://share.weiyun.com/5BM4kwK 密碼:f3t5xu轉載于:https://www.cnblogs.com/ling3blog/p/905018…

python正則表達式中的轉義字符_python 正則表達式之轉義字符

最近在整理python相關的知識,使用python對網站進行爬取數據的時候,需要使用到轉義字符,之前對轉義字符理解一直比較模糊,并且在python中還有一個叫原生字符r。所以通過網上調查資料對該內容進行整理,已備不時之需。 字…

計算機控制系統a卷-答案,計算機控制系統2010-2011年試題A答案

濟南大學2010 ~2011學年第一學期課程考試試卷(A卷)4、振鈴現象:(雖然閉環系統輸出較快地趨向于穩態值)……課 程 計算機過程控制系統 授課教師 王小平 數字調節器輸出u(kT)以2T為周期上下擺動。………考試時間 2010年 12 月 30日 考試班級 … ……學 號 …

非root用戶ssh 執行 sudo遠程機器免密鑰

非root用戶ssh 執行 sudo遠程機器免密鑰 # 1、登陸192.168.1.10 ssh-keygen -t rsa # 一路回車 # 將公鑰添加到認證文件中 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys # 并設置authorized_keys的訪問權限 chmod 600 ~/.ssh/authorized_keys [rootwebserver ~]# c…

分數的拆分原理和方法_常見的節稅原理你知道嗎?

節稅可以幫助大家合理的降低稅收支出,然后實現企業以及利益的最大化。但是節稅的時候一般都會使用一些節稅原理,因為不同的結節稅原理會有不同的節稅方法,這樣節稅效果也是不同的,那么生活中有哪些常見的節稅原理呢?第…

Flume實戰監聽文件夾內文件變化

Flume官網有多種場景的source,sink,channel的配置 1、flume安裝目錄下新建文件夾 example 2、在example下新建文件 spooldir-logger.conf內容如下: a1.sources r1 a1.sinks k1 a1.channels c1# Describe/configure the source a1.source…

python如何獲取輸入_python如何從鍵盤獲取輸入實例

python中使用input()函數來獲取用戶輸入 函數 input() 讓程序暫停運行,等待用戶輸入一些文本,獲取用戶的輸入后,Python將其存儲到一個變量中,以方便后期使用。 name input("Tell me your name,and I will repeat it back to…

cad打印本計算機未配置,CAD打印的基本設置詳細教程

CAD打印的基本設置詳細教程開始畫圖之前我們就考慮到打印的需要,要用多大紙張,打印比例應該設置成多少,打印后的字高、線寬、顏色應該設置成多少,在繪制圖形的時候,這些為打印而做的準備工作必須做好。要想正確地打印圖…

原 BinaryWriter和BinaryReader(二進制文件的讀寫)

原文 BinaryWriter和BinaryReader(二進制文件的讀寫) C#的FileStream類提供了最原始的字節級上的文件讀寫功能,但我們習慣于對字符串操作,于是StreamWriter和 StreamReader類增強了FileStream,它讓我們在字符串級別上操…

python redis 消息隊列_Python的Flask框架應用調用Redis隊列數據的方法

任務異步化打開瀏覽器,輸入地址,按下回車,打開了頁面。于是一個HTTP請求(request)就由客戶端發送到服務器,服務器處理請求,返回響應(response)內容。 我們每天都在瀏覽網…

go ip過濾_用Go實現自己的爬蟲

作者:Masamune在日常生活中,我們時常會遇到一些采集數據相關的需求,比如獲取一些官方數據整理到excel表中進行統計,聚合一些網頁新聞提高自己的閱讀效率等等。雖然許多爬蟲教程都是用python寫的,但是我認為Go語言是比p…

Flume實戰采集文件內容存入HDFS

1、flume安裝目錄下新建文件夾 example 2、在example下新建文件 log-hdfs.conf 內容如下: # Name the components on this agent a1.sources r1 a1.sinks k1 a1.channels c1#exec 指的是命令 # Describe/configure the source a1.sources.r1.type exec #F…

總結計算機語言的基本元素,認識程序設計中基本元素教案.doc

曲靖師院計算機科學與工程學院學生試講教案表課題:認識程序中的基本元素 年級:高一 課時:1課時授課時間:20分鐘 講授者:秦巧林 指導教師:崔麗梅教學目標知識與技能1. 掌握計算機程序中常用的常量、變量、函…

python海龜繪圖圓形_python之海龜繪圖

1. 基本功能介紹 在海龜作圖中,我們可以編寫指令讓一個虛擬的(想象中的)海龜在屏幕上來回移動。這個海龜帶著一只鋼筆,我們可以讓海龜無論移動到哪都使用這只鋼筆來繪制線條。通過編寫代碼,以各種很酷的模式移動海龜&a…

PLSQL Developer導入csv文件到oracle

csv文件內容: 要導入的表結構 create table RPT_MONILUCE_2_P01 ( imsi NUMBER, road_line NUMBER, ci NUMBER, diff NUMBER, rn NUMBER, sdate DATE, report_id NUMBER(20) ) 步驟: 1、在csv第一行上增加…

erwin 不能輸入中文_國產開源建模軟件PDMan與國外商業建模軟件ERwin的主要功能比較...

在數據庫建模的過程中,我們經常會使用到ERwin或者Power Designer之類的建模軟件,來構建我們的邏輯模型和物理模型。但是這類軟件都屬于商業軟件,需要企業購買相應的許可證授權。有些時候,我們會在沒有購買這類商業建模軟件的環境下…