MapReduceは、構文解析のプロセス全体を実行します

いかなる社会的関心は、我々は必見のJava /情報インタビューの公開、自由に利用可能な知識に「公園をブログ」、いいえ背景を返信することはできません。

 

序文

以前の私たちは、MapReduceのプログラミングモデルについて話しました、我々は彼がタスクを完了するために2つの段階に分けていることを知って、私たちの地図データの個別初のステージを数えて、第二段階は、位相マップの計算で、その結果、削減されます要約。

また、彼は同じHelloWorldのWORDCOUNTコードでJavaに似た非常に古典を、書きました。今日は、このコードの基礎を持っているのMapReduceのプロセス全体の動作を説明することです。

あなたを教えて真剣まず、この知識は非常に、非常に重要であり、5社の前には、3社は後で話すことが起こっている他の2つの動作機構糸を、聞いて、このプロセスを求めていますコンテンツは、あなたがすべての詳細を研究するために見つけ出すことができれば最高そしてもちろん、一般的なプロセスは次のようにあるか知っている必要があります。

 記憶処理完了までの処理プログラムへのデータ出力からフィード、我々は、大きく以下の5つの段階に分け、全体のプロセス。

  • 入力分割または読み出しデータ相

     入力分割、データスライス、処理プログラムへの入力データから始まります。読むには逆の処理プログラムから見た図である、ハンドラにファイルから読み取ったデータ。このステージはから来た私たちのデータの表現です。これは、プロセスの始まりです。

  • 地図段階

    入力されたデータが入ってくるとき、私たちはマップの段階を扱われます。例えば、ワード線が分割され、各ワードは出力としてカウントされます。

  • シャッフル段階

    今の段階間でのステージを削減し、地図の間でシャッフル相は、MapReduceのの核心です。スパークでもこの考え方を持っている、あなたは、私たちは次のように焦点を当てるそれらのほとんどが同じ哲学であるため、あなたは非常に大きな助けをもたらすでしょう、時間の他のビッグデータ・コンピューティング・フレームワークの原則を学ぶために、それまで待って、あなたはこの概念を理解すると言うことができますプロセスを説明します。

  • 舞台を削減

    地図データは、データを段階を処理し、その後シャッフルステージの後、最終的に削減するために後に、同じデータが同じにキー値が最終的な要約でタスクを軽減されます。

  • 出力段

    この段階の事は行くことをどこかに記憶された位相計算結果を削減することで、これはプロセスの終わりです。

     

全体の実行のフローチャート

百聞は一見にしかずです。

 

 

あなたが明確でない場合、私はアドレス上記gayHubに完全にアップロード:

(https://raw.githubusercontent.com/heyxyw/bigdata/master/bigdatastudy/doc/img/mapreduce/mr-Implementation-process.png)

 

もちろん、私はあまりにも開始し、理解したり、比較的無知な力を見始めることが新しいものはありません。ここでは、曲を分割するために説明し、最終的にはほとんど理解しています。

 

入力分割データ相

私たちは入力のスライスと呼ん入力スプリットGuming Siのイーは、断片化を入力してください?算出マップを実行する前に、データは、MapReduceのは、入力ファイルに基づいてセグメント化されますので、我々はよく計算配布する必要があるため、私は断片に切断することがどれだけ私のデータの計算した、と我々は、データの各部分を割り当てるために行きますに対処するためのタスク。

各入力は、フラグメントマップのタスクに対応する、入力データのスライスは、それ自体に格納されていないが、スライスデータ長と記録位置、およびそれがHDFSブロック(ブロック)が関連していることが多いです。

我々はHDFS 128Mのそれぞれのブロックサイズを設定した場合、我々は、その後のMapReduce 10Mデータファイルにドキュメントフラグメントに三つのファイル、10M、129M、200Mのすなわち大きさを、持っている場合は、129Mが2分割されています断片化の部分は、200Mファイルは、次の2つのフラグメントに分割されます。だから我々は、5つのスライスを持っているこの時間は、あなたがに対処するための5マップタスクが必要ですが、データはまだ不均一です。

小さなファイルがたくさんある場合、それは地図のタスクの処理効率の多くは非常に低いですが生成されます。

このフェーズでは、に対処するためのデフォルトのTextInputFormatで使用されるインターフェイスである、のInputFormatのコンポーネントを使用している、彼はデータを読み取るためにreadRecord()を呼び出します。

これはまた、インタビューをされる前に** **テスト最適化された非常に重要なMapReduceのポイント計算です。どのように小さなファイルそれの問題を最適化するには?

  • 最善の方法:データ処理システム(事前買収)の最前線に立って、最初の小さなファイルが結合されます、その後、HDFSに渡されます。

  • 対策:あなたはHDFSの小さな多数のファイルがある場合は、解決するために、別のInputFormatアセンブリCombineFileInputFormatを使用することができ、それはTextInputFormatと異なる方法でスライスしています、論理的にスライスを提出するために、もう少し計画になりますこのように、複数の小さいファイルを扱うためのマップタスクに引き渡さすることができます。

     

 地図段階

地図として出力段は、プロセスの入力段を下げシャッフルです。これは、全体のMapReduce最も重要な側面です。

一般的なMapReduceの処理は、大量のデータ我々はマップ機能()メソッドでcontext.writeを呼び出すときに、データマップの出力は、メモリ内のすべてのデータを置くことができないが、それはOutputCollector成分データが書き込まれている呼び出し、リングバッファメモリと呼ばれるものであることを。

リングバッファのデフォルトのサイズは100Mですが、出力マップは、デーモンスレッドがデータをクリア開始し、データがディスクに書き込まれ、データが80%に達したときに、デーモンスレッドを動作させるプロセスを開始する一方、80%だけを書きます流出と呼ばれます。

データがリングバッファに書き込まれる場合、データは、デフォルトのキーに従ってソートされ、各パーティションのデータは、デフォルトでHashPartitionerあるためです。もちろん、私たちは、このパーティションがあるカスタマイズするために行くことができます。

各実行ファイルのクリーンアップを生成し、実行が完了したときにマップした後、ファイルをマージするプロセスがあるだろう、実際には、彼が入力(入力スプリット)地図段階のスライスにここにあった非常に似ている、パーティション分割があれば、削減操作に対応そこに複数ある操作を減らした場合にのみ、その後、パーティショナ一つだけの操作を軽減し、より多くのパーティション分割があります。キー値の数と決定した削減数をパーティ。それは)(job.setNumReduceTasksによって設定することができます。

オーバーフローデータを使用して、同じキー値を最初に一緒に加え、減らすと同じロジックであるコンポーネント、コンバイナを呼び出す場合、それを貼り付けないように、合併は、ビジネスを変更しないことを提供するオプションのコンポーネントのコンバイナもあり、効率を高めるために、同じキーの送信データの多く。

例えば、データのオーバーフローは、コンバイナがデフォルトで使用されていない場合、このようなデータ長:<1>、<2>、<C、4>。<3>、<C、4>:コンバイナ成分データがある場合。マージされたデータへ。

 

舞台を削減

マージソートを行い、マージすることもローカルに引っ張られ、独自のデータパーティションを担当して置くが、ためになります削減し、削減作業を行う前に。

舞台を削減するだけでなく、ロジックの私たち自身の実装、マップ・メソッドマップ段階で、唯一の実行機能を削減する場合のように、キーと値のイテレータの同じセットの値の方法を減らします。例WORDCOUNTでは、我々はこれらのデータに重畳反復します。最後の呼び出しcontext.write機能、単語と出力の合計数。

 

出力段

関数呼び出しは、ターゲット・ストレージに、機能を減らすコンポーネントTextOutputFormatのデフォルトの実装をOutPutFomart呼び出して、出力データcontext.writeとき、それは一般的なHDFSです。

 

スプレッド

私達はちょうど一般的なプロセス上で説明し、いくつかの質問を投げるためにここにいますか?また、頻繁にインタビューを尋ねました

1.ファイルの分割はカットする方法ですか?最後のファイルが少しカットされますか?このアルゴリズムは、どのようにのようなものでしょうか?

ナンバー2.マップタスクはどのように決定されますか?

 

上記の問題は、誰もが2つのリンクを投稿しました:

MapReduceの入力スプリット(入力ポイント/セクション)の詳細

https://blog.csdn.net/dr_guo/article/details/51150278

ソース解決MapReduceジョブは(スプリット)プロセスをスライス

https://blog.csdn.net/u010010428/article/details/51469994

概要

ほぼ完了ここで説明するためのMapReduce実装プロセス、私はあなたにも上記の全体像を引き出すことができると思います。一般的なプロセスを理解すること、およびキーリンクシャッフルを把握することが可能です。あなたはまだ他の大規模なデータコンポーネントで、この言葉を聞くことができます。

我々は戻っておおよそ操作機構糸をあなたを持参して、実行上のあなたのための全体のプロセスWORDCOUNTます。

ご期待。

 

Java技術オタク公共番号は、Java技術の開発を愛する人々のグループによって設立された、オリジナル、高品質のJavaの記事の共有に焦点を当てました。あなたは私たちの記事が悪いわけではないと思われる場合は、サポートを転送し、見て、感謝助けてください、より良い記事を共有するために私たちを励まします。

 

 

おすすめ

転載: www.cnblogs.com/justdojava/p/11271223.html