第3章のMapReduceフレームワークの原則
3.1のInputFormatデータ入力
MapTaskのセクション3.1.1および並列処理の意思決定メカニズム
- 問題は、鉛
並列処理は、それによって仕事の全体の処理速度に影響を与える、地図MapTaskタスク処理の同時実行フェーズを決定しました。
思考:データ1G、8 MapTaskを開始するには、同時処理クラスタの能力を向上させることができます。また、8 MapTaskを開始し、データの1Kがそう、それはクラスタのパフォーマンスを向上させるのだろうか?それか、できるだけMapTaskは、並列タスク?どのような要因は、並列MapTask度に影響を与えますか? - MapTask並列処理メカニズム決定
ブロック:ブロックは、物理的なものにHDFSデータです。
データスライス:入力データスライスのみ論理的に断片化し、そしてディスク上に格納される断片に切断しないこと。 - MapTask並列の意思決定のメカニズム
3.1.2ジョブ提出プロセスのソースコードとソースコードは、スライスされた詳細
- ジョブ送信プロセスの詳細なソース
waitForCompletion()
submit();
// 1建立连接
connect();
// 1)创建提交Job的代理
new Cluster(getConfiguration());
// (1)判断是本地yarn还是远程
initialize(jobTrackAddr, conf);
// 2 提交job
submitter.submitJobInternal(Job.this, cluster)
// 1)创建给集群提交数据的Stag路径
Path jobStagingArea = JobSubmissionFiles.getStagingDir(cluster, conf);
// 2)获取jobid ,并创建Job路径
JobID jobId = submitClient.getNewJobID();
// 3)拷贝jar包到集群
copyAndConfigureFiles(job, submitJobDir);
rUploader.uploadFiles(job, jobSubmitDir);
// 4)计算切片,生成切片规划文件
writeSplits(job, submitJobDir);
maps = writeNewSplits(job, jobSubmitDir);
input.getSplits(job);
// 5)向Stag路径写XML配置文件
writeConf(conf, submitJobFile);
conf.writeXml(out);
// 6)提交Job,返回提交状态
status = submitClient.submitJob(jobId, submitJobDir.toString(), job.getCredentials());
- FileInputFormatスライスソース解析(input.getSplits(ジョブ))
3.1.3 FileInputFormatスライシング機構
3.1.4 CombineTextInputFormatスライシング機構
- デフォルトのフレームファイルで作業を計画TextInputFormatスライス機構スライス、ファイルどんなに小さな、単一のスライスになり、MapTaskを与える、小さなファイルの数が多い場合ので、それはMapTaskの多くを生成し、処理効率が極めて低く、 。
- シナリオ:
シーンファイル用CombineTextInputFormat小さすぎる、それは小さな複数のファイルに計画することができる論理的に小さな複数のファイルがMapTaskに加工することができるようにスライスします。 - 最大仮想記憶部が設けられ
CombineTextInputFormat.setMaxInputSplitSize(ジョブ、4194304を); // 4メートル
注:仮想メモリは、好ましくは、小さいファイルの実際の状況に応じて、特定のサイズの最大設定値をスライスするように構成されています。 - ミクロトームで
スライス工程と仮想ストレージ手順二つの部分:を含むスライスプロセスを生成します。
(1)仮想ストアドプロシージャ:
- すべての入力ディレクトリのファイルサイズ、および最大値のセットよりも大きくない場合、順次setMaxInputSplitSize比較値、論理ブロックを分割します。入力ファイルが2倍の最大より大きいセット大きい場合には、最大値に切断し、残りのデータサイズの最大値をより2倍以上の最大値を超える場合、次にファイルは、二つの仮想ストレージブロックに分割されている(防止小さなスライス)が表示されます。
- 例えばsetMaxInputSplitSizeは4M、入力ファイルのサイズの8.02Mである、第一の論理4Mに分割されています。論理的に4Mに応じて分割場合、残りのサイズ4.02Mは、0.02M小さい仮想ストレージファイルが表示されますので、4.02Mに残りのファイル(2.01Mと2.01M)二つのファイル。
(2)スライス工程: - ファイルサイズが、仮想ストレージsetMaxInputSplitSize値よりも大きいか否かを決定することはより大きい又は単一のスライスを形成するのに等しいです。
- その後、次の仮想メモリファイルと組み合わせることがない場合は、一緒にスライスを形成します。
- 試験例:1.7M、5.1M、3.4M及び6.8M四つの小ファイルがファイル6は、仮想ストレージブロック4を形成した後、ありは小さいファイルサイズであり、サイズは:
1.7M(2.55M、2.55 M)、3.4M及び(3.4M、3.4M)を
最終的に三つのセクションを形成する、サイズがある:
(1.7 + 2.55)M、(2.55 + 3.4)M、(3.4 + 3.4)M