最初の変更のpom.xml:
<プロジェクトのxmlns = "http://maven.apache.org/POM/4.0.0" のxmlns:XSI = "http://www.w3.org/2001/XMLSchema-instance" の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.mcq < /のgroupId> <たartifactId> MR-1101 </たartifactId> <バージョン> 0.0.1-SNAPSHOT </バージョン> <依存性> <依存性> <のgroupId> jdk.tools </のgroupId> <たartifactId> jdk.tools </たartifactId > <バージョン> 1.8 </バージョン> <スコープ>システム</スコープ> <systemPath> $ {JAVA_HOME} /lib/tools.jar </ systemPath> </依存関係> <依存> <groupIdを> JUnitの</ groupIdを> <たartifactId> JUnitの</たartifactId> <バージョン> RELEASE </バージョン> </依存> <依存性> <のgroupId> org.apache.logging.log4j </のgroupId> <たartifactId> log4jのコア</たartifactId> <バージョン> 2.8.2 </バージョン> </依存> <依存性> <のgroupId> org.apache.hadoop </のgroupId> <たartifactId> Hadoopの共通</たartifactId> <バージョン> 2.7.2 </バージョン> </依存> <依存> <groupIdを> org.apache.hadoop </ groupIdを> <たartifactId> Hadoopのクライアント</たartifactId> <バージョン> 2.7.2 </バージョン> </依存関係> <依存> <groupIdを> org.apache.hadoop </ groupIdを> <たartifactId> Hadoopの-HDFS </たartifactId> <バージョン> 2.7.2 </バージョン> </依存> </依存関係> </プロジェクト>
リソースフォルダ内のファイルlog4j.propertiesを追加します。
log4j.rootLogger = INFO、STDOUT log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout = org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern =%D%Pは[ %のC] - %M%N log4j.appender.logfile = org.apache.log4j.FileAppender log4j.appender.logfile.File =目標/ spring.log log4j.appender.logfile.layout = org.apache.log4j.PatternLayout のlog4j .appender.logfile.layout.ConversionPattern =%d個の%のP [%のC] - %のm個の%nを
WordcountDriver.java:
パッケージcom.mcq。 インポートにjava.io.IOException; 輸入org.apache.hadoop.conf.Configuration。 輸入org.apache.hadoop.fs.Path。 輸入org.apache.hadoop.io.IntWritable; 輸入org.apache.hadoop.io.Text; 輸入org.apache.hadoop.mapreduce.Job。 輸入org.apache.hadoop.mapreduce.lib.input.FileInputFormat。 輸入org.apache.hadoop.mapreduce.lib.output.FileOutputFormat。 パブリッククラスWordcountDriver { 公共の静的な無効メイン(文字列[]引数)はIOExceptionが、ClassNotFoundExceptionが、InterruptedExceptionある{スロー するSystem.out.println( "こんにちは"); 設定のconf =新しいConfiguration(); 。// 1获取仕事对象 ジョブジョブ= Job.getInstance(CONF)。 // 2。设置瓶存储位置 job.setJarByClass(WordcountDriver.class); //マップと削減3関連付けられたクラス。 job.setMapperClass(WordcountMapper.class); job.setReducerClass(WordcountReducer.class); .. 4 //マッパー段の出力データがキーに設けられ、値型 job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(IntWritable.class); //最終的な出力設定5つのキーと値のタイプ。。 job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); // 6.セット入力パスおよび出力パス FileInputFormat.setInputPaths(ジョブ、パス新しい新しい(引数[0])); FileOutputFormat.setOutputPath(ジョブ、パス新しい新しい(引数)は、[1]); .. 7 //ジョブ提出 //ジョブ。 )(登録; job.waitForCompletion(真の); //ブールRES = job.waitForCompletion(真の); // trueに結果を印刷表し //でSystem.exit(RES 0:?1)。 } }
WordcountMapper.java:
com.mcqパッケージ; インポートにjava.io.IOException; インポートorg.apache.hadoop.io.IntWritable; インポートorg.apache.hadoop.io.LongWritable; インポートorg.apache.hadoop.io.Text; インポートorg.apache。 hadoop.mapreduce.Mapper; //ステージマップ // KEYIN:データ入力キー(例えば、最初の行のようなオフセットは、0〜19であり、第二のライン20〜25)はLongWritableでなければならない // VALUEIN入力データ値(例えばテキスト文字列として、テキストを埋める) // KEYOUT:出力データのキータイプ // VALUEOUT:出力データ値型 マッパー<LongWritable、テキスト、テキスト、IntWritable> {延びWordcountMapperパブリッククラス IntWritable VをIntWritable新しい新=(1); テキスト新しい新しいK =テキスト(); 文字列ライン= value.toString()。 @Overrideが 無効地図で保護(LongWritableキー、テキスト値を、マッパー<LongWritable、テキスト、テキスト、IntWritable> .contextコンテキスト) IOExceptionが、InterruptedExceptionある{スロー // TODO自動生成されたメソッドスタブを //取得ライン1。。 // 2切断単語 文字列[] = line.split単語( ""); //書き込みサイクル3。 (文字列ワード:ワード)について{ k.set(ワード); context.write(K、V)。 } } }
WordcountReducer.java:
パッケージcom.mcq。 インポートにjava.io.IOException; 輸入org.apache.hadoop.io.IntWritable; 輸入org.apache.hadoop.io.Text; 輸入org.apache.hadoop.mapreduce.Reducer。 // KEYIN、VALUEINマップ阶段输出的キー和値类型 パブリッククラスWordcountReducerが減速<テキスト、IntWritable、テキスト、IntWritable> {延び IntWritable V =新しいIntWritableを(); @Override 保護ボイドが低減(テキストキーを、反復処理可能<IntWritable>の値、 減速は<テキスト、IntWritableは、テキスト、IntWritable> .Contextコンテキスト)にIOException、InterruptedExceptionがスロー{ // TODO自動生成方法スタブ INT和= 0。 (IntWritable値:値)のための{ 和+ = value.get()。 } v.set(合計)。 context.write(キー、V); } }
/mrtest/in.txt E:/mrtest/out.txtプラスEの実行構成パラメータで
解決バグランタイム参照https://blog.csdn.net/qq_40310148/article/details/86617512が発生しました