首頁 資料庫 mysql教程 Hadoop的Map-side join和Reduce-side join

Hadoop的Map-side join和Reduce-side join

Jun 07, 2016 pm 04:37 PM
hadoop join

Hadoop中连接(join)操作很常见,Hadoop“连接”的概念本身,和SQL的“连接”是一致的。SQL的连接,在维基百科中已经说得非常清楚。比如dataset A是关于用户个人信息的,key是用户id,value是用户姓名等等个人信息;dataset B是关于用户交易记录的,key是用

Hadoop的Map side join和Reduce side join

Hadoop中连接(join)操作很常见,Hadoop“连接”的概念本身,和SQL的“连接”是一致的。SQL的连接,在维基百科中已经说得非常清楚。比如dataset A是关于用户个人信息的,key是用户id,value是用户姓名等等个人信息;dataset B是关于用户交易记录的,key是用户id,value是用户的交易历史等信息。我们当然可以对这两者以共同键用户id为基准来连接两边的数据。

首先,在一切开始之前,先确定真的需要使用Hadoop的连接操作吗?

如果要把两个数据集合放到一起操作,Hadoop还提供了Side Data Distribution(data sharing)的方式,这种方式对于小数据量的情况下效率要高得多,说白了就是把某些数据缓存到本地,例如在本地内存中,直接操作执行,具体包括两种子方式:

  • 使用Job Configuration传递;
  • 使用Distributed Cache。

当数据量比较大时,是不适合采用Side Data Distribution的,这时候就需要考虑Join了。

Map-side Join

Map-side Join会将数据从不同的dataset中取出,连接起来并放到相应的某个Mapper中处理,因此key相同的数据肯定会在同一个Mapper里面一起得到处理的。如果Mapper前dataset中的数据是无序的,那么对于dataset A的任意一个key,要到其它的dataset中寻找该key对应的数据,造成的复杂度是n的x次方,x等于dataset的个数。因此要求dataset是有序的,这样每个对于任何一个Mapper来说,每一个dataset都只需要遍历一次就可以取到所有需要的数据。Map-side Join对dataset的限制很多,进入不仅仅是有序,不同的dataset中数据的partition方式也要一致,其实最终目的就是保证同样key的数据同时进入一个Mapper。

Hadoop的Map side join和Reduce side join

Reduce-side Join

Reduce-side Join原理上要简单得多,它也不能保证相同key但分散在不同dataset中的数据能够进入同一个Mapper,整个数据集合的排序在Mapper之后的shuffle过程中完成。相对于Map-side Join,它不需要每个Mapper都去读取所有的dataset,这是好处,但也有坏处,即这样一来Mapper之后需要排序的数据集合会非常大,因此shuffle阶段的效率要低于Map-side Join。如果希望在shuffle之后,进入Reducer的时候,value列表是有序的,那么就需要使用Hadoop的Secondary Sort(移步此文)。

Hadoop的Map side join和Reduce side join

不管使用Map-side Join还是Reduce-side Join,都要求进行Join的数据满足某一抽象,这个抽象类型即为进入Mapper或者Reducer的input key的类型。

文章未经特殊标明皆为本人原创,未经许可不得用于任何商业用途,转载请保持完整性并注明来源链接《四火的唠叨》

你可能也喜欢:

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

MySql中如何使用JOIN MySql中如何使用JOIN Jun 04, 2023 am 08:02 AM

JOIN的意思就如英文單字「join」一樣,連接兩張表,大致分為內連接,外連接,右連接,左連接,自然連接。先建立兩個表,以下用於範例CREATETABLEt_blog(idINTPRIMARYKEYAUTO_INCREMENT,titleVARCHAR(50),typeIdINT);SELECT*FROMt_blog;+----+-------+--------+| id|title|typeId|+----+-------+--------+|1|aaa|1||2|bbb|2||3|ccc|3|

Java錯誤:Hadoop錯誤,如何處理與避免 Java錯誤:Hadoop錯誤,如何處理與避免 Jun 24, 2023 pm 01:06 PM

Java錯誤:Hadoop錯誤,如何處理和避免使用Hadoop處理大數據時,常常會遇到一些Java異常錯誤,這些錯誤可能會影響任務的執行,導致資料處理失敗。本文將介紹一些常見的Hadoop錯誤,並提供處理和避免這些錯誤的方法。 Java.lang.OutOfMemoryErrorOutOfMemoryError是Java虛擬機器記憶體不足的錯誤。當Hadoop任

MySQL Join使用原理是什麼 MySQL Join使用原理是什麼 May 26, 2023 am 10:07 AM

Join的類型leftjoin,以左表為驅動表,以左表作為結果集基礎,連接右表的資料補齊到結果集中rightjoin,以右表為驅動表,以右表作為結果集基礎,連接左表的資料補齊到結果集中innerjoin,結果集取兩個表的交集fulljoin,結果集取兩個表的並集mysql沒有fulljoin,union取代union與unionall的區別為,union會去重crossjoin笛卡爾積如果不使用where條件則結果集為兩個關聯表行的乘積與,的差異為,crossjoin建立結果集時會根據on條件過

在Beego中使用Hadoop和HBase進行大數據儲存和查詢 在Beego中使用Hadoop和HBase進行大數據儲存和查詢 Jun 22, 2023 am 10:21 AM

隨著大數據時代的到來,資料處理和儲存變得越來越重要,如何有效率地管理和分析大量的資料也成為企業面臨的挑戰。 Hadoop和HBase作為Apache基金會的兩個項目,為大數據儲存和分析提供了一個解決方案。本文將介紹如何在Beego中使用Hadoop和HBase進行大數據儲存和查詢。一、Hadoop和HBase簡介Hadoop是一個開源的分散式儲存和運算系統,它可

如何使用PHP和Hadoop進行大數據處理 如何使用PHP和Hadoop進行大數據處理 Jun 19, 2023 pm 02:24 PM

隨著資料量的不斷增大,傳統的資料處理方式已經無法處理大數據時代所帶來的挑戰。 Hadoop是開源的分散式運算框架,它透過分散式儲存和處理大量的數據,解決了單節點伺服器在大數據處理中帶來的效能瓶頸問題。 PHP是一種腳本語言,廣泛應用於Web開發,而且具有快速開發、易於維護等優點。本文將介紹如何使用PHP和Hadoop進行大數據處理。什麼是HadoopHadoop是

MySQL中JOIN怎麼用 MySQL中JOIN怎麼用 Jun 03, 2023 am 09:30 AM

簡介A的獨有+AB的公有B的獨有+AB的公有AB的公有A的獨有B的獨有A的獨有+B的獨有+AB的公有A的獨有+B的獨有練習建表部門表DROPTABLEIFEXISTS`dept`;CREATETABLE`dept`(`dept_id`int(11)NOTNULLAUTO_INCREMENT,`dept_name`varchar(30)DEFAULTNULL,`dept_number`int(11)DEFAULTN =InnoDBAUT

探索Java在大數據領域的應用:Hadoop、Spark、Kafka等技術堆疊的了解 探索Java在大數據領域的應用:Hadoop、Spark、Kafka等技術堆疊的了解 Dec 26, 2023 pm 02:57 PM

Java大數據技術堆疊:了解Java在大數據領域的應用,如Hadoop、Spark、Kafka等隨著資料量不斷增加,大數據技術成為了當今網路時代的熱門話題。在大數據領域,我們常聽到Hadoop、Spark、Kafka等技術的名字。這些技術起到了至關重要的作用,而Java作為一門廣泛應用的程式語言,也在大數據領域發揮著巨大的作用。本文將重點放在Java在大

mysql的join查詢和多次查詢方法是什麼 mysql的join查詢和多次查詢方法是什麼 Jun 02, 2023 pm 04:29 PM

join查詢和多次查詢比較MySQL多表格關聯查詢效率高點還是多次單表查詢效率高?在資料量不夠大的時候,用join沒有問題,但是一般都會拉到service層上去做第一:單機資料庫運算資源很貴,資料庫同時要服務寫讀,都需要消耗CPU,為了能讓資料庫的吞吐變得更高,而業務又不在乎那幾百微妙到毫秒級的延時差距,業務會把更多計算放到service層做,畢竟計算資源很好水平擴展,數據庫很難啊,所以大多數業務會把純運算操作放到service層做,而將資料庫當成有事務能力的kv系統來使用,這是一種重業務,

See all articles