欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java編寫(xiě)Mapreduce程序過(guò)程淺析

 更新時(shí)間:2023年05月11日 11:15:40   作者:讓線程再跑一會(huì)  
MapReduce是一種用于處理大規(guī)模數(shù)據(jù)集的并行編程模型,其特點(diǎn)高效性和可擴(kuò)展性,在本文中,我們將深入了解MapReduce,并使用Java編寫(xiě)一個(gè)簡(jiǎn)單的MapReduce程序,需要的朋友可以參考下

一個(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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Spring中使用xml配置bean的細(xì)節(jié)

    詳解Spring中使用xml配置bean的細(xì)節(jié)

    本篇文章主要介紹了Spring中使用xml配置bean的細(xì)節(jié),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • Java.lang.Long.parseLong()方法詳解及示例

    Java.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-01
  • java文件操作工具類分享(file文件工具類)

    java文件操作工具類分享(file文件工具類)

    java文件操作工具類(文件工具類)
    2014-01-01
  • Spring Boot 2.x 實(shí)現(xiàn)文件上傳功能

    Spring Boot 2.x 實(shí)現(xiàn)文件上傳功能

    這篇文章主要介紹了Spring Boot 2.x 實(shí)現(xiàn)文件上傳功能,本文分步驟通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • IDEA引入本地jar包的幾種方法

    IDEA引入本地jar包的幾種方法

    本文主要介紹了IDEA引入本地jar包的幾種方法,文中通過(guò)圖文結(jié)合的方式碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2024-01-01
  • Java使用FFmpeg處理視頻文件的方法教程

    Java使用FFmpeg處理視頻文件的方法教程

    這篇文章主要給大家介紹了關(guān)于Java使用FFmpeg處理視頻文件的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Java線程之程安全與不安全代碼示例

    Java線程之程安全與不安全代碼示例

    這篇文章主要介紹了Java線程之程安全與不安全代碼示例,還是比較不錯(cuò)的,這里分享給大家,供需要的朋友參考。
    2017-11-11
  • 詳解Java?Unsafe如何花式操作內(nèi)存

    詳解Java?Unsafe如何花式操作內(nèi)存

    C++可以動(dòng)態(tài)的分類內(nèi)存,而java并不能這樣,是不是java就不能操作內(nèi)存呢,其實(shí)是有其他辦法可以操作內(nèi)存的,下面就一起看看Unsafe是如何花式操作內(nèi)存的吧
    2023-08-08
  • 基于spring?@Cacheable?注解的spel表達(dá)式解析執(zhí)行邏輯

    基于spring?@Cacheable?注解的spel表達(dá)式解析執(zhí)行邏輯

    這篇文章主要介紹了spring?@Cacheable?注解的spel表達(dá)式解析執(zhí)行邏輯,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • JVM調(diào)優(yōu)OutOfMemoryError異常分析

    JVM調(diào)優(yōu)OutOfMemoryError異常分析

    這篇文章主要為大家介紹了JVM調(diào)優(yōu)OutOfMemoryError異常分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11

最新評(píng)論