コード
輸入org.apache.commons.lang.ObjectUtils。 輸入org.apache.hadoop.conf.Configuration。 輸入org.apache.hadoop.conf.Configured; 輸入org.apache.hadoop.fs.Path。 輸入org.apache.hadoop.io.NullWritable; 輸入org.apache.hadoop.io.Text; 輸入org.apache.hadoop.mapreduce.Job。 輸入org.apache.hadoop.mapreduce.lib.input.TextInputFormat。 輸入org.apache.hadoop.mapreduce.lib.output.TextOutputFormat。 輸入org.apache.hadoop.util.Tool。 輸入org.apache.hadoop.util.ToolRunner。 / ** *のIntelliJ IDEAを使用して作成。 *ユーザー:@别慌 日付*:2019年6月16日 *時間:午前〇時44 *説明: * / パブリック クラス PartitionerMain 拡張設定済みの実装のツール{ 公共の int型の RUN(文字列[] args)をスロー例外{ // ジョブクラス、MRに組み立て ジョブのジョブを=ジョブを.getInstance(スーパー .getConf()、PartitionerMainの。クラス.getSimpleName()); // 実行の包装 job.setJarByClass(PartitionerMain。クラス); // まずステップ:にKVを解析し、ファイルを読み込む job.setInputFormatClass(TextInputFormat。クラス); TextInputFormat.addInputPath(仕事、新しいパス(引数[0 ])); // 自定义マップ逻辑 job.setMapperClass(partitionMap。クラス); job.setMapOutputKeyClass(テキスト。クラス); job.setMapOutputValueClass(NullWritable。クラス); // 第三部分区 job.setPartitionerClass(partitionerOwn。クラス); // 自定义逻辑減らす job.setReducerClass(partitionReduce。クラス)。 job.setOutputKeyClass(テキスト。クラス); job.setOutputValueClass(NullWritable。クラス); job.setNumReduceTasks( 2 ); // 設定された出力クラス job.setOutputFormatClass(TextOutputFormat。クラス); // 出力経路ダイ書き込まれていない、渡されたパラメータ TextOutputFormat.setOutputPath(仕事、新しい新しいパス(引数[1 ])); / / タスク提出 ブール(B = job.waitForCompletionをtrueに)、 リターン B 0 :. 1?; } パブリック 静的 ボイドメイン(文字列引数[])をスロー例外{ int型の RUNは= ToolRunner.run(新しい新しい構成()、新しい新PartitionerMain()、引数)。 でSystem.exit(実行)。 } } インポートorg.apache.hadoop.io.NullWritable。 輸入org.apache.hadoop.io.Text; 輸入org.apache.hadoop.mapreduce.Partitioner。 / ** *のIntelliJ IDEAを使用して作成。 *ユーザー:别慌@ *日:2019年6月16日 *時間:0:56 *説明: * / パブリック クラス partitionerOwnは拡張パーティショナ<テキスト、NullWritable> { 公共 のint getPartition(テキスト、テキスト、NullWritable nullWritable、int型i)を{ String []型こぼれ= text.toString()スプリット( "\ tの"。); 文字列gameResultは =こぼれた[5 ]。 もし(NULL!= gameResult && "" = gameResult){ 場合(15 Integer.parseInt(gameResult)> ){ 戻り 0 ; } 他{ リターン 1 。 } } 戻り 0 。 } } インポートorg.apache.hadoop.io.LongWritable。 輸入org.apache.hadoop.io.NullWritable; 輸入org.apache.hadoop.io.Text; 輸入org.apache.hadoop.mapreduce.Mapper; インポートにjava.io.IOException; / ** *のIntelliJ IDEAを使用して作成。 *ユーザー:@别慌 *日:2019年6月16日 *時間:午後12時47 *説明: * / パブリック クラス partitionMapが 拡張マッパー<LongWritable、テキスト、テキスト、NullWritable> { 保護された 無効 マップ(LongWritableキー、テキスト値を、コンテキスト・コンテキスト)がスローにIOException、InterruptedExceptionある{ context.write(値、NullWritable.getを())。 } } インポートorg.apache.hadoop.io.NullWritable。 インポートorg.apache.hadoop.io.Text; 輸入org.apache.hadoop.mapreduce.Reducer。 インポートにjava.io.IOException; / ** *のIntelliJ IDEAを使用して作成。 *ユーザー:@别慌 *日:2019年6月16日 *時間:1:14 *説明: * / パブリック クラス partitionReduceが拡張リデューサー<テキスト、NullWritable、テキスト、NullWritable> { 保護された ボイドが(テキストキー、反復処理可能<NullWritableを減らします>値は、コンテキスト・コンテキスト)がスローにIOException、InterruptedExceptionある{ context.write(キー、NullWritable.getを())。 } }
pom.xml
<?xml version = "1.0"エンコード= "UTF-8"?> <プロジェクトのxmlns = "http://maven.apache.org/POM/4.0.0" のxmlnsを:XSI = "のhttp://www.w3 .ORG / 2001 / XMLスキーマ・インスタンス」 のxsi:のschemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion> 4.0.0 </ modelVersion> <のgroupId> com.ali </のgroupId> <たartifactId> HDFS </たartifactId> <バージョン> 1.0-SNAPSHOT </バージョン> <依存性> <依存性> <のgroupId> org.apache .hadoop </ groupIdを> <たartifactId> Hadoopの共通</たartifactId> <バージョン> 2.9.0 </バージョン> </依存関係> <依存> <groupIdを> org.apache.hadoop </ groupIdを> <たartifactId> HadoopのHDFS-</たartifactId> <バージョン> 2.9.0 </バージョン> </依存関係> < -のhttps:!// mvnrepository.com/artifact/ org.apache.hadoop / HadoopのMapReduceの-クライアントコア- > <依存> <groupIdを> org.apache.hadoop </ groupIdを> <たartifactId> HadoopのMapReduceの-クライアントコア</たartifactId> <バージョン> 2.9。 0 </バージョン> </依存関係> </依存関係> </プロジェクト>
Javaプロジェクトのアーキテクチャ
- PartitionerMain
- partitionerOwn
- partitionMap
- partitionReduce
Hadoopのジャーmouse.jar PartitionerMain /パーティション/ outtest
ジャーHDFS主な機能上のHDFS出力ファイルオブジェクトファイル(既存のではありません)
ソース・ファイル(パーティション)
1 0 1 2017年7月31日23時10分12秒834232 6 sadasaa
2 9 6 2019-06-76 78:97:12 687907 45 dsdskd