ワークショップ - 第六実験

MapReduceのは、「分割統治」の考え方を使用して、管理下ノードに分散大きなデータセットの操作は、各ノードの中間結果の統合により、最終的な結果をマスタノードを完了しました。簡単に言えば、MapReduceは「分解の概要とタスクの結果」です。

、MapReduceは作品

分散メモリ型並列プログラミング、ジョブスケジューリング、負荷分散、フォールトトレランスとネットワーク通信における複雑な問題に対処するための分散コンピューティング、MapReduceのフレームワークの中で、今、私たちは、プロセスを削減し、高度に抽象化し、地図で持っていますまとめると分解サブタスクの複数の削減処理結果の一部を担当する複数のサブタスク、にマップタスクの一部を担っている部分2に記載され、具体的なデザインのアイデアは、次のとおりです。

(1)地図org.apache.hadoop.mapreduce継承プロセスは、パッケージマッパークラス、メソッドを必要とし、そのマップをオーバーライドします。キー値と、コンソールのコード値に2つの値を加算することにより、地図出力処理は、テキストファイルの行(行は改行マークで終了)に入力されたマップ値価値保存方法で発見することができキー値記憶された入力線は、テキストファイルへの最初のオフセットアドレスに対しての最初の文字です。StringTokenizerはクラスとフィールドの行に各分割、フィールドカットを必要とする(この実験で買い手IDフィールドである)キーを設定し、マップ方式として結果を出力します。

(2)プロセスを削減継承クラスorg.apache.hadoop.mapreduce減速パッケージを必要とし、そのオーバーライドメソッドを減らします。マッププロセス出力<キー、値>の値でグループ化キー値の同じ値のすべての値を介して、最初のキー処理シャッフルの対は、この場合は、その後<キー、値、構成キーフィールドのカウント値に対応する値のリストであります>入力方法は、低減方法は、値を横断した回数の合計ワードを得るために合計する限り低減します。

()主な新ジョブオブジェクトの主な機能は、ジョブオブジェクトによってコンピューティングタスクは、MapReduceの管理・運用を担当し、そして仕事の方法により、タスクに関連するパラメータを設定します。この実験は、取り扱い中地図完了を継承したクラスの仕上げ加工工程を削減doReducerを使用しますdoMapperマッパークラスを使用して設定しました。また、出力タイプマップを提供し、処理手順を削減:Text型、タイプIntWritableの値のキーを。入力パス文字列で指定された出力タスク、およびFileInputFormat FileOutputFormatによっては設定されています。タスクは、パラメータの設定が完了したら、タスクを実行するためにjob.waitForCompletion()メソッドを呼び出すことができ、残りの作業は、MapReduceのフレームワークプロセスに引き渡されます。

第二に、作業プロセスの実行のMapReduceフレームワーク

ここでの挿入の説明(1)のResourceManager:YARNのリソースを一元管理し、クラスタ内のすべてのリソースの割り当てを担当する中央モジュール制御フレームワークです。それはNM(ノードマネージャ)、AMの設立からの報告を受け、資源AM(ApplicationMaster)に送信されます。

(2)ノードマネージャ:短いNMは、ノードマネージャは、コンテナ管理に責任を各マシン上のResourceManager剤である、とリソース(CPU、メモリ、ディスク、ネットワークなど)の使用を監視し、このResourceManagerに報告するこれらのリソースを使用します。

(3)ApplicationMaster:以下、AMと呼びます。YARN各アプリケーションは、AMを開始します、RMは、コンテナ、コンテナと何かをするように言わを開始するNM要求資金を申請する責任があります。

(4)コンテナ:コンテナ・リソース。YARNすべてのアプリケーションは、コンテナで実行されています。AMはまた、コンテナで実行されているが、AMはコンテナRMアプリケーションです。コンテナは、リソース(CPUおよびメモリリソースカテゴリ)の一定量にノードをカプセル化し、リソース糸の抽象化です。コンテナApplicationMaster ApplicationMasterに非同期ResouceManagerにリソーススケジューラによって割り当てられるのResourceManagerアプリケーション、へ。ノードマネージャ内部タスクのコマンドを提供する必要性によって開始されたリソースが必要な環境を実行するためにコンテナランタイム(C ++のコマンドは、プロセスを開始することができ、そのようなJavaの、Pythonのように、任意のコマンドすることができます)などのコマンドを実行しApplicationMasterによって運営コンテナ変数と(例えば辞書ファイル、実行可能ファイル、jarファイルのパッケージなど)外部リソース。

さらに、二つのカテゴリーに分け、所望のアプリケーションコンテナ、次のように

①実行ApplicationMasterコンテナ:これは、(リソース・スケジューラの内部に向かって)のResourceManagerによって引き起こされ、ユーザがアプリケーションを一意に指定することができる送信したときに、アプリケーションを起動さApplicationMaster必要なリソース。

②タスクコンテナのすべての種類を実行します。これは、このResourceManager ApplicationMasterアプリケーションによるもので、起動にノードマネージャApplicationMasterと通信します。

コンテナのカテゴリは、上記の任意のノードであってもよく、それらの一般的な位置は、それがノード上で実行されているApplicationMaster管理タスクに関連することができること、ランダムです。

第三に、実験環境

のLinuxのUbuntu 14.0

JDK-7u75-のLinux-x64の

cdh5.4.5-2.6.0-のHadoop

Hadoopの-2.6.0-cdh5.4.5.jar Eclipse-

のEclipse-JUNO-SR2のJava-Linuxの-x86_64でgtk-

4つの実験コンテンツ

の既存の電力会社のサイトのユーザーに商品のコレクションデータは、ユーザーの好みのプロダクトIDとbuyer_favorite1と呼ばれるコレクションの日付を記録します。

buyer_favorite1あって、次のように買い手ID、項目ID、これらの三つのフィールド、データ「\ tの」スプリットの採取日、およびサンプルデータ形式は次のとおりです。
買い手のID IDの生成物収集日
101811000481 2010-04-04午後04時54分31秒
2010-04-07 15時07分52秒200011001597
200011001560 2010-04-07午前15時08分27秒
200421001368 2010-04-08午前8時20分30秒
200671002061 2010-04-08 16時45分33秒
200561003289 2010年4月12日10時50分55秒
200561003290 2010-04-12午前11時57分三十五秒
200561003292 2010-04-12午前12時05分29秒
200541002420 2010-04-14午後3時24分12秒
20055 10016792010- 4月14日19時46分04秒
200541010675 2010-04-14夜03時23分53秒
20054 1002429 2010年4月14日夜五時52分45秒
20076 1002427 2010年4月14日午後7時35分39秒
20054 1003326 2010年4月20日12時54分44秒
20056 1002420 2010年4月15日11時24分49秒
20064 1002422 2010年4月15日11時35分54秒
20056 1003066 2010年4月15日午前11時43分01秒
20056 1003055 2010年4月15日11時43分06秒
20056 1010183 2010年4月15日11時45分24秒
20056 1002422 2010- 4月15日午前11時45分49秒
20056 1003100 2010年4月15日11時45分五十四秒
20056 1003094 2010年4月15日11時45分57秒
20056 1003064 2010年4月15日午前11時46分04秒
20056 1010178 2010-04- 15午前16時15分20秒
20076 1003101 2010年4月15日午後04時37分27秒
20076 1003103 2010年4月15日16時37分05秒
20076 1003100 2010年4月15日午前16時37分18秒
20076 1003066 2010-04-15 16 :37:31
20054 1003103 2010年4月15日午前16時40分14秒
200541003100 2010-04-15夜4時40分16秒
のMapReduceプログラムを書くための要件は、各買い手のための物品の統計収集の数。

次のように統計結果は以下のとおりです。

購入者の製品ID番号
10181. 1
20001 2
20042. 1
20054. 6
20055. 1
20056 12で
20064. 1
20067. 1
20076. 5
マッパーコード:

1  パブリック 静的 クラス doMapper 延びマッパー<オブジェクト、テキスト、テキスト、IntWritable> {
 2  // 入力の第一のタイプは、キーオブジェクトを表す入力の第二のタイプは、テキストの値を示し、テキストは第3の出力は、結合の種類を示す表します; IntWritableタイプを示す第4の出力値
。3  パブリック 静的 最終 IntWritable 1 = 新たな新しい IntWritable(1。 。4  パブリック 静的テキストワード= 新しい新しいテキスト();
 5  @Override
 。6  保護 ボイドマップ(オブジェクトキー、テキスト値、コンテキスト・コンテキスト)
 7は スローIOExceptionが、InterruptedExceptionある
 8  //を例外がスローされている
9。 {
 10 StringTokenizerはトークナイザ= 新しい新しい StringTokenizerは(value.toString()、 "\ T" );
 11  // StringTokenizerは、分割文字列のJavaベースのツールキット
12は、 (word.set tokenizer.nextToken());
 13である // 次分離器に現在位置の間の文字列を返す
14  context.write(単語、1つ);
 15  // 容器内に格納された単語、番号が付さ
16 }
マッパー

減速コード:

公共の 静的な クラス doReducerが拡張リデューサー<テキスト、IntWritable、テキスト、IntWritable> {
 // 地図のようなパラメータを、順番に入力キー、入力値、キータイプの出力、出力値型のタイプの種類を示している
プライベート IntWritable結果= 新しい新しいIntWritableを(); 
@Override 
保護 ボイド低減(テキストキー、反復処理可能<IntWritable> 値は、コンテキスト・コンテキスト)が
 スローにIOException、InterruptedExceptionある{
 int型 SUM = 0 ;
 のため(IntWritable値:値){ 
SUM + = value.get(); 
} 
// forループ得られた値の積算値、トラバース
result.set(合計)。
context.write(キー、結果);  
}
}
減速

ジョブ層

パッケージのMapReduce。
インポートにjava.io.IOException;
輸入java.util.StringTokenizer。
輸入org.apache.hadoop.fs.Path。
輸入org.apache.hadoop.io.IntWritable;
輸入org.apache.hadoop.io.Text;
輸入org.apache.hadoop.mapreduce.Job。
輸入org.apache.hadoop.mapreduce.Mapper;
輸入org.apache.hadoop.mapreduce.Reducer。
輸入org.apache.hadoop.mapreduce.lib.input.FileInputFormat。
輸入org.apache.hadoop.mapreduce.lib.output.FileOutputFormat。
パブリック クラスWORDCOUNT {
 公共の 静的な 無効メイン(文字列[]引数)スローIOExceptionが、ClassNotFoundExceptionが、InterruptedExceptionある{ 
ジョブジョブ = Job.getInstance()を。
job.setJobName( "WORDCOUNT" ); 
job.setJarByClass(WORDCOUNT。クラス); 
job.setMapperClass(doMapper。クラス); 
job.setReducerClass(doReducer。クラス); 
job.setOutputKeyClass(テキスト。クラス); 
job.setOutputValueClass(IntWritable。クラス); 
パス = 新しいパス( "HDFS:// localhostを:9000 / mymapreduce1 /中/ buyer_favorite1" ); 
パスアウト = 新しいですパス( "HDFS:// localhostを:9000 / mymapreduce1 /アウト" ); 
FileInputFormat.addInputPath(ジョブ、中)。
FileOutputFormat.setOutputPath(ジョブ、アウト)。
System.exit(job.waitForCompletion()0:1 )。
} 
パブリック 静的 クラス doMapperが延びマッパー<オブジェクト、テキスト、テキスト、IntWritable> {
 パブリック 静的 最終 IntWritable 1 = 新しい IntWritable(1 )。
公共の 静的なテキスト・ワード= 新しいテキスト(); 
@Override 
保護 のボイドマップ(オブジェクトキー、テキスト値、コンテキストコンテキストを)
 投げますIOExceptionが、InterruptedExceptionある{ 
StringTokenizerはトークナイザ = 新しい StringTokenizerは(value.toString()、 "\ tの" )。
word.set(tokenizer.nextToken())。
context.write(ワード、1); 
} 
} 
パブリック 静的 クラス doReducerは延び減速<テキスト、IntWritable、テキスト、IntWritable> {
 プライベート = IntWritable結果を新しいIntWritable()。
@Override 
保護 ボイドが低減(テキストキーを、反復処理可能<IntWritable> 値は、コンテキスト・コンテキスト)が
 スローにIOException、InterruptedExceptionある{
 int型の和= 0 ;
(IntWritable値:値){ 
合計 + = value.get()。
} 
result.set(合計)。
context.write(キー、結果); 
} 
} 
}
コードの表示

WORDCOUNTクラスファイルでは、右クリック=> =>はHadoopのオプションで実行として実行、でのHadoopのMapReduceタスクに提出されます。

 

 

保留中、または末端プラグのHadoop Eclipseを開きが完了した後、HDFSビューは、プログラムの出力をもたらします。

HadoopのFS -ls / mymapreduce1 /アウト
HadoopのFS -cat / mymapreduce1 /アウト/部分-R-00000

 

おすすめ

転載: www.cnblogs.com/yeshenfeng/p/11768573.html