Java編寫(xiě)Mapreduce程序過(guò)程淺析
一個(gè)Maprduce程序主要包括三部分:Mapper類、Reducer類、執(zhí)行類。
Maven項(xiàng)目下所需依賴
<dependencies> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>3.3.0</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.30</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.2</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>compile</scope> </dependency> </dependencies>
數(shù)據(jù)類型
- Text: 一種可變長(zhǎng)度的字節(jié)數(shù)組,用于表示文本數(shù)據(jù)。相當(dāng)于Java中的String。
- LongWritable、IntWritable、FloatWritable、DoubleWritable: 分別用于表示長(zhǎng)整型、整型、浮點(diǎn)型和雙精度浮點(diǎn)型數(shù)據(jù)。相當(dāng)于Java中的long、int、float和double。
- BooleanWritable: 用于表示布爾類型數(shù)據(jù)。相當(dāng)于Java中的boolean。
- NullWritable: 用于表示空值,通常用于表示Map任務(wù)的輸出中間結(jié)果數(shù)據(jù)中的值為空。相當(dāng)于Java中的null。
- ArrayWritable: 用于表示數(shù)組類型數(shù)據(jù)。相當(dāng)于Java中的數(shù)組。
- MapWritable: 一種可序列化的Map數(shù)據(jù)結(jié)構(gòu),可以作為Map任務(wù)的輸出(中間結(jié)果數(shù)據(jù))或Reduce任務(wù)的輸入。相當(dāng)于Java中的Map<>。
- WritableComparable: 一種可序列化的、可比較的數(shù)據(jù)類型接口,可以作為Map任務(wù)或Reduce任務(wù)的輸入輸出數(shù)據(jù)類型。
一、Mapper類
import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.util.StringUtils; import java.io.IOException; public class WordCountMapper extends Mapper<LongWritable,Text,Text,LongWritable> { @Override protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { //如果當(dāng)前數(shù)據(jù)不為空 if (value!=null){ //獲取每一行的數(shù)據(jù) String line = value.toString(); //將一行數(shù)據(jù)根據(jù)空格分開(kāi) // String[] words = line.split(" "); String[] words = StringUtils.split(line,' ');//hadoop的StringUtils.split方法對(duì)大數(shù)據(jù)來(lái)說(shuō)比Java自帶的擁有更好的性能 //輸出鍵值對(duì) for (String word : words) { context.write(new Text(word),new LongWritable(1)); } } } }
二、Reducer類
import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Reducer; import java.io.IOException; public class WordCountReducer extends Reducer<Text, LongWritable,Text,LongWritable> { @Override protected void reduce(Text key, Iterable<LongWritable> values, Context context) throws IOException, InterruptedException { //累加單詞的數(shù)量 long sum = 0; //遍歷單詞計(jì)數(shù)數(shù)組,將值累加到sum中 for (LongWritable value : values) { sum += value.get(); } //輸出每次最終的計(jì)數(shù)結(jié)果 context.write(key,new LongWritable(sum)); } }
三、執(zhí)行類
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configured; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; import org.apache.hadoop.util.Tool; import org.apache.hadoop.util.ToolRunner; public class WordCountRunner extends Configured implements Tool { public static void main(String[] args) throws Exception { ToolRunner.run(new Configuration(),new WordCountRunner(),args); } @Override public int run(String[] args) throws Exception { Configuration conf = new Configuration(); Job job = Job.getInstance(conf, "word count"); job.setJarByClass(WordCountRunner.class); job.setMapperClass(WordCountMapper.class); job.setReducerClass(WordCountReducer.class); job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(LongWritable.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(LongWritable.class); //設(shè)置統(tǒng)計(jì)文件輸入的路徑,將命令行的第一個(gè)參數(shù)作為輸入文件的路徑 //讀取maven項(xiàng)目下resources目錄的文檔 String path = getClass().getResource("/words.txt").getPath(); FileInputFormat.setInputPaths(job,path); //設(shè)置結(jié)果數(shù)據(jù)存放路徑,將命令行的第二個(gè)參數(shù)作為數(shù)據(jù)的輸出路徑 //輸出目錄必須不存在!!! FileOutputFormat.setOutputPath(job,new Path("./output")); return job.waitForCompletion(true) ? 0 : 1; } }
程序執(zhí)行結(jié)果
- .part-r-00000.crc: 是Reduce任務(wù)輸出結(jié)果文件的校驗(yàn)文件,用于校驗(yàn)Reduce任務(wù)輸出結(jié)果文件的完整性和正確性。該文件由Hadoop框架自動(dòng)生成,不需要手動(dòng)創(chuàng)建,其內(nèi)容是Reduce任務(wù)輸出結(jié)果文件的校驗(yàn)和信息。
- ._SUCCESS.crc: 是表示任務(wù)執(zhí)行成功的標(biāo)志文件的校驗(yàn)文件,用于校驗(yàn)標(biāo)志文件的完整性和正確性。該文件由Hadoop框架自動(dòng)生成,其內(nèi)容是標(biāo)志文件的校驗(yàn)和信息。
- _SUCCESS: 表示任務(wù)執(zhí)行成功的標(biāo)志文件,文件內(nèi)容為空。
- part-r-00000: 表示Reduce任務(wù)的輸出結(jié)果文件,其中“00000”表示該文件是第一個(gè)Reduce任務(wù)的輸出結(jié)果文件,如果有多個(gè)Reduce任務(wù),則會(huì)生成多個(gè)該類型的文件,文件內(nèi)容為每個(gè)單詞出現(xiàn)的次數(shù)。
到此這篇關(guān)于Java編寫(xiě)Mapreduce程序過(guò)程淺析的文章就介紹到這了,更多相關(guān)Java編寫(xiě)Mapreduce內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 深入探究如何使用Java編寫(xiě)MapReduce程序
- Java大數(shù)據(jù)處理的核心技術(shù)MapReduce框架
- Java大數(shù)據(jù)開(kāi)發(fā)Hadoop?MapReduce
- java實(shí)現(xiàn)MapReduce對(duì)文件進(jìn)行切分的示例代碼
- Java基礎(chǔ)之MapReduce框架總結(jié)與擴(kuò)展知識(shí)點(diǎn)
- Java/Web調(diào)用Hadoop進(jìn)行MapReduce示例代碼
- java 矩陣乘法的mapreduce程序?qū)崿F(xiàn)
- java連接hdfs ha和調(diào)用mapreduce jar示例
相關(guān)文章
詳解Spring中使用xml配置bean的細(xì)節(jié)
本篇文章主要介紹了Spring中使用xml配置bean的細(xì)節(jié),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06Java.lang.Long.parseLong()方法詳解及示例
這個(gè)java.lang.Long.parseLong(String s) 方法解析字符串參數(shù)s作為有符號(hào)十進(jìn)制長(zhǎng),下面這篇文章主要給大家介紹了關(guān)于Java.lang.Long.parseLong()方法詳解及示例的相關(guān)資料,需要的朋友可以參考下2023-01-01Spring Boot 2.x 實(shí)現(xiàn)文件上傳功能
這篇文章主要介紹了Spring Boot 2.x 實(shí)現(xiàn)文件上傳功能,本文分步驟通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01基于spring?@Cacheable?注解的spel表達(dá)式解析執(zhí)行邏輯
這篇文章主要介紹了spring?@Cacheable?注解的spel表達(dá)式解析執(zhí)行邏輯,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01JVM調(diào)優(yōu)OutOfMemoryError異常分析
這篇文章主要為大家介紹了JVM調(diào)優(yōu)OutOfMemoryError異常分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11