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までです。
- maptaskは、map()メソッドによって出力されたkvペアを収集し、それらをメモリバッファに配置します。
- ローカルディスクファイルがメモリバッファから継続的にオーバーフローしており、複数のファイルがオーバーフローしている可能性があります。
- 複数のオーバーフローファイルは大きなオーバーフローファイルにマージされます
- オーバーフロープロセスとマージプロセス中に、キーのパーティション分割と並べ替えを行うためにパーティショナーを呼び出す必要があります。
- 独自のパーティション番号に従って、reducetaskは各maptaskマシンに移動して、対応する結果パーティションデータをフェッチします。
- reducetaskは、同じパーティション内の異なるmaptasksから結果ファイルをフェッチします。reducetaskは、これらのファイルをマージします(マージとソート)。
- 大きなファイルにマージした後、シャッフルプロセスが終了し、reducetaskの論理演算プロセスに入ります(ファイルからキーと値のペアグループを取り出し、ユーザー定義のreduceメソッドを呼び出します。
シャッフルの概要:
バッファーサイズはmapreduceの実行効率に影響します。原則として、バッファーが大きいほど、ディスクIOの数が少なくなり、実行速度が速くなります。