Hadoop的Map-side join和Reduce-side join
Hadoop中连接(join)操作很常见,Hadoop“连接”的概念本身,和SQL的“连接”是一致的。SQL的连接,在维基百科中已经说得非常清楚。比如dataset A是关于用户个人信息的,key是用户id,value是用户姓名等等个人信息;dataset B是关于用户交易记录的,key是用
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。
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(移步此文)。
不管使用Map-side Join还是Reduce-side Join,都要求进行Join的数据满足某一抽象,这个抽象类型即为进入Mapper或者Reducer的input key的类型。
文章未经特殊标明皆为本人原创,未经许可不得用于任何商业用途,转载请保持完整性并注明来源链接《四火的唠叨》

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











JOIN の意味は英語の「結合」と同じで、2 つのテーブルを結合するもので、内部結合、外部結合、右結合、左結合、自然結合に大別されます。まず 2 つのテーブルを作成します。例として次のものが使用されます。 CREATETABLEt_blog(idINTPRIMARYKEYAUTO_INCREMENT,titleVARCHAR(50),typeIdINT);SELECT*FROMt_blog;+----+------+--------+ | id|title|typeId|+----+----------+--------+|1|aaa|1||2|bbb|2||3|ccc|3 |

Java エラー: Hadoop エラー、対処方法と回避方法 Hadoop を使用してビッグ データを処理する場合、タスクの実行に影響を与え、データ処理の失敗を引き起こす可能性のある Java 例外エラーが頻繁に発生します。この記事では、一般的な Hadoop エラーをいくつか紹介し、それらに対処および回避する方法を示します。 Java.lang.OutOfMemoryErrorOutOfMemoryError は、Java 仮想マシンのメモリ不足によって発生するエラーです。 Hadoop の場合

結合タイプ leftjoin は、左側のテーブルを駆動テーブルとして使用し、左側のテーブルを結果セットの基礎として使用します。右側のテーブルのデータは結果セットに接続されます。rightjoin は、右側のテーブルを駆動テーブルとして使用し、右側のテーブルを結果セットとして使用します。左側のテーブルを接続するための結果セットの基礎 データは結果セットの innerjoin に追加されます 結果セットは 2 つのテーブルの共通部分を取得します fulljoin 結果セットは 2 つのテーブルの結合を取得します MySQL にはfulljoin。union と Unionall の違いは、union がクロスジョインのデカルト積の重複を排除することです。where 条件が使用されていない場合、結果セットは、関連付けられた 2 つのテーブル行の積になります。違いは、クロスジョインが結果を作成するときの点です。設定されている場合は、on 条件に従って渡されます。

データ量が増加し続けるにつれて、従来のデータ処理方法ではビッグデータ時代がもたらす課題に対処できなくなります。 Hadoop は、ビッグ データ処理において単一ノード サーバーによって引き起こされるパフォーマンスのボトルネック問題を、分散ストレージと大量のデータの処理を通じて解決する、オープン ソースの分散コンピューティング フレームワークです。 PHP は、Web 開発で広く使用されているスクリプト言語であり、迅速な開発と容易なメンテナンスという利点があります。この記事では、ビッグデータ処理に PHP と Hadoop を使用する方法を紹介します。 HadoopとはHadoopとは

ビッグデータ時代の到来に伴い、データの処理と保存の重要性がますます高まっており、大量のデータをいかに効率的に管理、分析するかが企業にとっての課題となっています。 Apache Foundation の 2 つのプロジェクトである Hadoop と HBase は、ビッグ データのストレージと分析のためのソリューションを提供します。この記事では、ビッグデータのストレージとクエリのために Beego で Hadoop と HBase を使用する方法を紹介します。 1. Hadoop と HBase の概要 Hadoop は、オープンソースの分散ストレージおよびコンピューティング システムです。

はじめに 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)DEFAULTNULL,PRIMARYKEY(`dept_id`))ENGINE =InnoDBAUT

Java ビッグ データ テクノロジ スタック: Hadoop、Spark、Kafka などのビッグ データ分野における Java のアプリケーションを理解します。データ量が増加し続けるにつれて、今日のインターネット時代ではビッグ データ テクノロジが注目のトピックになっています。ビッグデータの分野では、Hadoop、Spark、Kafka などのテクノロジーの名前をよく耳にします。これらのテクノロジーは重要な役割を果たしており、広く使用されているプログラミング言語である Java もビッグデータの分野で大きな役割を果たしています。この記事では、Java のアプリケーション全般に焦点を当てます。

1: JDK1のインストール 以下のコマンドを実行して、JDK1.8のインストールパッケージをダウンロードします。 wget--no-check-certificatehttps://repo.huaweicloud.com/java/jdk/8u151-b12/jdk-8u151-linux-x64.tar.gz2. 次のコマンドを実行して、ダウンロードした JDK1.8 インストール パッケージを解凍します。 。 tar-zxvfjdk-8u151-linux-x64.tar.gz3. JDK パッケージを移動して名前を変更します。 mvjdk1.8.0_151//usr/java84. Java 環境変数を設定します。エコー'
