、HDFS
HDFSのまず、基本的な考え方
HDFS:Hadoopの分散ファイルシステム、Hadoopの分散ファイルシステム。主に大量のデータを格納する問題を解決するために使用。
二、HDFSのファイル書き込み処理
まず、私はHDFSクラスタにファイルを保存したいです。
- RPC(リモートサービス)アクセス名前ノード、ファイルの書き込み要求によってクライアント。
- 名前ノードあなたが応答を返すためのアクセス許可を持っている場合、クライアントは、書き込み権限を持っているかどうかを確認してください。クライアントが例外をスローしない場合。
- プレスBlckSizeクライアントはその後、ブロックに最初のブロックのブロックを記述するための要求をブロックファイルへのファイルサイズ(デフォルト128M)を移動します。
- 名前ノードは、そのクライアントは、コピーの数を返し満たすために、その負荷分散メカニズムに基づいていますリスト(BLOCKID:ディレクトリに格納されているホスト、ポート番号、)(デフォルトは3です)。
- クライアントは、返されたリストによると、パイプライン(パイプライン)を構築を開始します。クライアント - >最初のノード - >第2のノード - >第3のノード。
- 最初DataNodesに成功した送信は、次に、第一DodaNodeパケット複製が開始パケットと次DataNodesにパイプを入れると、転送ブロックパケット、パケットに応じて、データの送信を開始しますデータノードのパケットを受信した後、コピーを継続し、次のデータノードに送信されます。
- ターンがクライアントに、パイプキューからのACKを返すのブロックブロック転送が正常に完了し、DataNodesは、最後から始まります。
- クライアントは限り書かれたデータノードの成功があるので、彼らは書き込み動作が完了していると思う、ACKキューへのリターンマッチで、ACKと独自の内部キューを維持します。
- ブロックは次のブロックが書き込まれ始めます。3-8を繰り返します。
送信時には、いくつかのデータノードがダウンしている場合、このデータノードがこのパイプから出ることになります。データノードは、送信の残りを続けます。その後、転送が完了した後、名前ノードは、そのコピーに成功データノードのブロックブロックを書き出すために、サブノードを発行しますので、新しいデータノードを書きました。
三、HDFSファイルの読み込み処理
- クライアントは、RPC経由名前ノードに読み出し要求を送信します。
- 、クライアントに応答を返し、そうでない場合、もしあれば名前ノードは、クライアントが読み取りアクセス権を持つかどうかを確認し、クライアントが例外をスローします。
- クライアントは、名前ノードに読み出される必要があるファイルを要求します。
- 名前ノードは、このファイルが置かれている各ブロック・ストレージ・ブロックの位置のリストを返します。
- クライアントは、ブロックのブロックを読んで、接続を確立し、最近で返されるリストから選択します。ブロックの下の読み取り検証情報は、統計ディレクトリをブロックしますときに、一緒に来てください。
- 試合は、それが正しく表示される場合、クライアント情報のブロック完了後のブロックの読み取りには、比較の上で読んチェックサムとチェックサムを計算します。一致しない場合、ブロックブロックは、他のノードから読み込まれます。
二、MapReduceの
、MapReduceの基本的な概念
MapReduceは、検索フィールドは、主に大規模なデータの計算問題を解決するためにGoogleが提案した分散コンピューティングモデル、使用されています。MRは、2つのフェーズで構成されています(MAPと削減、ユーザーが唯一のマップを実装する必要があります)
および()は、2つの機能、分散コンピューティングを実現することができる減らします。これら2つの関数のパラメータは、入力情報機能を表すキーと値のペアです。ここではMRの実行フローは次のとおりです。
1、マップタスク
①子供のためのキー、値に解析され、入力ファイルの内容をお読みください。入力ファイルの各行は、キーと値のペアに解析しました。マップ機能一度と呼ばれる各キーと値のペア。
キー入力、値の処理のための独自のロジックを記述②、新しいキーに変換し、出力された値
キー、値パーティションの出力③
キーソート、グループ化によるデータの④異なるパーティション。セットに同じキー値。
⑤(オプション)データパケット減少
2、タスクを削減
マップの複数のタスクの①出力は、別のパーティションによれば、ネットワークノードが異なるコピーに減らします。
②ソートをマージする複数の出力タスクをマッピングします。機能を減らす書く自分のロジックを増やし、入力キー、値の処理は、新しいキー、値出力に変換されます。
③に保存されたファイルへの出力を減らします
二、WORDCOUNTプログラム
プログラムの機能:今、テスト用のテキストがあり、WORDCOUNT MRプログラムは、各単語がテキストで表示された回数の合計を計算するための統計モデルを使用することであると仮定します。
そして、実現原理は次のとおりです。処理のためのデータの私達のそれぞれの行のマップ方法MapTask。同じキーがグループ化されReduceTaskその後、各グループには処理を削減するためのメソッドを呼び出します!
コードは以下の通りであります:
1 パブリック クラスWordCountTest { 2 // 行オフセット、データの各行位置KEYINを開始する 。3 // VALUEIN各行 。4 // キータイプのKEYOUT地図データ出力端子 5 // VALUEOUT地図データ値出力端子タイプ 6つ のパブリック 静的 クラスマッパー<LongWritable、テキスト、テキスト、IntWritable>延びWCMapper { 7 // キーは、行オフセット 8つの // 行毎にデータ値を 9 // 後続のコンテキストコンテキスト、我々のマップが処理されたデータ送り出されました。 10 @Override 11 保護 のボイド地図(LongWritableキー、テキスト値、コンテキストコンテキスト)にIOException、InterruptedExceptionある{スロー 12である 文字列[] = value.toStringワード()スプリット(" " ;) 13がある ため(文字列ワード:ワード){ 14 context.write(新しい新しいテキスト(ワード)、新しい新しい IntWritable(1。 )); 15 } 16 } 17 } 18である // サイドキーデータ・タイプを受信低減KEYIN 。19 // VALUEIN減らす側が値のデータ型受信 20は // KEYOUTがデータ出力端子を削減しますキータイプ 21 //VALUEOUTは、値のデータ型の出力端減らす 22である パブリック 静的 クラス減速<テキスト、IntWritable、テキスト、IntWritable>が延びWCReducer { 23は // キーは、データマップのタイプ受け入れるように端を低減することである 24 // 値の組の値を同一の鍵 25 / / コンテキストcontext、我々は送信されたデータを処理し、将来を削減することです。 26である 保護された ボイド低減(テキストキー、反復処理可能<IntWritable> 値は、コンテキスト・コンテキスト)にIOException、InterruptedExceptionある{スロー 27 のint SUM = 0 ; 28 のため(IntWritable値:値){ 29 + = SUM値GET(); 30 } 31 context.write(キー、新しいIntWritable(合計))。 32 } 33 } 34 公共 静的 ボイドメイン(文字列[]引数)にIOException、ClassNotFoundExceptionが、InterruptedExceptionある{スロー 35 構成CONF = 新しい設定を(); 36 ジョブのジョブ= Job.getInstance(CONF)。 37 job.setJarByClass(WordCountTest。クラス)。 38 job.setMapperClass(WCMapper。クラス)。 39 job.setReducerClass(WCReducer。クラス); 40 // 指定マップ和減らす输出数据的类型 41 job.setMapOutputKeyClass(テキスト。クラス); 42 job.setMapOutputValueClass(IntWritable。クラス)。 43 job.setOutputKeyClass(テキスト。クラス)。 44 job.setOutputValueClass(IntWritable。クラス)。 45 FileInputFormat.setInputPaths(仕事、新しいパス(" E:\\入力" )); 46 ファイルシステムFS =ファイルシステム。取得ファイル(conf); 47 パスOUTPATH = 新しいパス(" E:\\出力" ); 48 であれば(fs.exists(OUTPATH)){ 49 fs.delete(OUTPATH、真)。 50 } 51 FileOutputFormat.setOutputPath(ジョブ、OUTPATH)。 52 job.submit()。 53 } 54 }
三、MapReduceの操作原理
splitSizeのデフォルトは128Mです。
FileInputFormat最初のスライススキャン、各スキャンラインデータ、クラスコールRecordReader getCurrentKey()、のgetCurrentValue()はキー(行オフセット)、値(各行の内容)を返し。
方法をマッピングするようにMapTaskにリターンキーと値のコンテキストが、処理されます。
処理されたマップ法、リングバッファに書き込まれた処理されたキー、シリアル化された値は、後。(デフォルトは100Mです)。リングバッファは、コンテンツの書き込みのオーバーフローになり、80%に到達したとき。
ときに引き継がれreduceTaskし、書き込みパーティション、およびキーのハッシュコードに基づいてデフォルト値をオーバーフローします。複数のパーティションに割り当てられた同じ番号によります。パーティションは、デフォルトの辞書順でソートされますとき。クイックソートを使用してください。
キー - >のhashCodeのキー - >モジュロreduceTaskの数に応じて - >パーティションを法の結果に応じて。
MapTask端は、同じデータがパーティションに集約される場合。そして、ソートし、ソートをマージします。
MapTask以来終わりました。
後に終了します減らしマップは、ファイルがパーティションに引っ張って、同じ処理され、終了します。そして、ソート、マージソートマージ。
パーティションにデータ処理ReduceTask。
同じキーに基づいReduceTaskパケットは、同じ鍵データをグループに分割されます。
方法を減らすために一度と呼ばれるデータのセット。
ファイルに書き込まreduceTask加工しreduceTask後。
三、糸のフローチャートリソーススケジューリング
- クライアントは、糸にそのプログラムを提出します。
- RMはパスをクライアントに返すだけでなく、ジョブID。
- クライアントに対応する番組情報(ジャーパケット、スライス情報、シリアル化されたファイル)が対応するパスに提出されます。
- あなたの後あなたのリターンRMに確認応答を送信します。
- 台湾ノードマネージャRMは、容器にそこに保存された情報を提出することを作成します。私たちのApplicationMasterを開始します。
- ApplicationMaster情報と手順提出され、アプリケーションコンテナとRMスライスに登録します。
- RM NMを伝えるために話をするリソース要求を受信した後、NMは、自分のノードに必要なコンテナの数を作成します。
- ApplicationMaster対応するタスク情報を作成し、タスクを実行するために、容器の外に使用し、対応するノードNMに送信されます。
- ReduceTaskを実行します。
- だから、すべてのタスクは、RMのキャンセルについて、ApplicationMasterを実行された後、RMは、リソースを再利用します。
RM:リソースの割り当てを担当します。
ApplicationMaster:リソースの適用、監視プログラム。
NM:コンテナは、タスクを実行し、作成するための責任があります。