[ビッグデータ] MapReduce

MapReduce

分散コンピューティングプログラムのプログラミング・フレームワークは、「Hadoopのベースのデータ分析アプリケーション」を開発するユーザーのためのコアフレームワークです。

MapReduceコア関数

では、ユーザ記述されたビジネス・ロジック・コードデフォルトのコンポーネントが付属して完全統合するプログラムを分散コンピューティング(統合コードを、分散プログラムで実行されているに適しなる)、およびHadoopクラスタ上で実行します。

MapReduceの利点

  • MapReduceはプログラミングが簡単です。分散プログラムを完成させるためにいくつかのインターフェースを実装するだけで、実行するために多数の安価なPCマシンに分散することができます。つまり、分散プログラムを作成することは、単純なシリアルプログラムを作成することとまったく同じです。
  • MapReduceは優れたスケーラビリティを備えています。コンピューティングリソースが満たされない場合、マシンを追加するだけでコンピューティング能力を拡張し、コピーメカニズムによって信頼性を向上させることができます。
  • 高いフォールトトレランス:たとえば、マシンの1つがハングアップした場合、上記のコンピューティングタスクを別のノードに転送て、タスクが失敗しないようにすることができますこのプロセスは自動的に行われます
  • PBレベルを超える大規模なオフラインデータ処理に適しています。数千のクラスターの同時操作を実現します。

MapReduceのデメリット

  • MapReduceは、mysqlのようにミリ秒または秒で結果を返すことはできません。
  • ストリーミングコンピューティングは得意ではありません。MapReduceによって入力されるデータセットは静的です。
  • DAG計算が苦手

MapReduceのコアプログラミングのアイデア:

マップタスク->は、ファイル分割し、入力と出力の各行を分割し、ハローワードをキー値の形式に分割し、それをruduceプロセスに渡してさらに処理します。

タスクの削減->は、マップの結果をカウントすることです。


マップの入力もkey1とvalue1の形式であり、key1はオフセットであり、value1は各行の内容です。

オフセット:

hello word

hello nihao

0 1 2 3 4 5 6 7

map(0,“hello word”)

map(12,“hello nihao”)

//空格算一个,换行不计

マップの出力value2は要素であり、value3はvalue2のコレクションであるコレクションイテレータです。

reduce(hello,(1,1,1,1)) //map的输出作为reduce的输入,将相同key放在一起作为一个集合

Hadoopでデータ型を使用する理由:

student{
string name;
string age;
string set;
}              java封装后通过网络传输——————————>100kb
               hadoop类型已经实现了序列化传输——————————>10kb


シリアル化

これは、メモリ内のオブジェクトバイトシーケンス(または他のデータ転送プロトコル)に変換して、ディスクへの保存(永続性)とネットワーク送信、およびその逆を行うことです。

hsdoopシリアル化の機能:

  • 収納スペースのコンパクトで効率的な使用。上記の例では、(名前、年齢、性別)のみが送信されます
  • データの読み取りと書き込みのための高速で少しの追加開発。
  • 通信プロトコルのアップグレードによるスケーラブルなアップグレード
  • 多言語インタラクション、r、scala、c ++をサポート

 

MapReduceの詳細なワークフロー:

 

シャッファーメカニズム:

mapメソッドの後、reduceメソッドの前のデータ処理はシャッフルと呼ばれます

リングバッファ:ヘッドまたはテールがなく、80%でオーバーフローします

シャッフルプロセスは、ステップ7からステップ16までです。

  1. maptaskは、map()メソッドによって出力されたkvペアを収集し、それらをメモリバッファに配置します。
  2. ローカルディスクファイルがメモリバッファから継続的にオーバーフローしており、複数のファイルがオーバーフローしている可能性があります。
  3. 複数のオーバーフローファイルは大きなオーバーフローファイルにマージされます
  4. オーバーフロープロセスとマージプロセス中に、キーのパーティション分割と並べ替えを行うためにパーティショナーを呼び出す必要があります。
  5. 独自のパーティション番号に従って、reducetaskは各maptaskマシンに移動して、対応する結果パーティションデータをフェッチします。
  6. reducetaskは、同じパーティション内の異なるmaptasksから結果ファイルをフェッチします。reducetaskは、これらのファイルをマージします(マージとソート)。
  7. 大きなファイルにマージした後、シャッフルプロセスが終了し、reducetaskの論理演算プロセスに入ります(ファイルからキーと値のペアグループを取り出し、ユーザー定義のreduceメソッドを呼び出します。

シャッフルの概要:

バッファーサイズはmapreduceの実行効率に影響します。原則として、バッファーが大きいほど、ディスクIOの数が少なくなり、実行速度が速くなります。

 

 

 

 

 

 

 

おすすめ

転載: blog.csdn.net/Qmilumilu/article/details/104650793