MapReduceのWORDCOUNTケースのJava実装

最初の変更の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が発生しました

おすすめ

転載: www.cnblogs.com/mcq1999/p/11780758.html