最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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類(lèi)、Reducer類(lèi)、執(zhí)行類(lèi)。

Maven項(xiàng)目下所需依賴(lài)

<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ù)類(lèi)型

  • 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: 用于表示布爾類(lèi)型數(shù)據(jù)。相當(dāng)于Java中的boolean。
  • NullWritable: 用于表示空值,通常用于表示Map任務(wù)的輸出中間結(jié)果數(shù)據(jù)中的值為空。相當(dāng)于Java中的null。
  • ArrayWritable: 用于表示數(shù)組類(lèi)型數(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ù)類(lèi)型接口,可以作為Map任務(wù)或Reduce任務(wù)的輸入輸出數(shù)據(jù)類(lèi)型。

一、Mapper類(lèi)

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類(lèi)

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í)行類(lèi)

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è)該類(lèi)型的文件,文件內(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)文章

  • maven打包失敗踩坑的解決方式詳解

    maven打包失敗踩坑的解決方式詳解

    最近因?yàn)樾马?xiàng)目有很多自定義的jar包,而且占內(nèi)存很多,就直接拷貝過(guò)來(lái),新開(kāi)了一個(gè)maven倉(cāng)庫(kù),用的時(shí)候沒(méi)有問(wèn)題,但是打包一直編譯不通過(guò),下面這篇文章主要給大家介紹了關(guān)于maven打包失敗踩坑的解決方式,需要的朋友可以參考下
    2023-05-05
  • MyBatis CodeHelperPro激活方法詳細(xì)教程

    MyBatis CodeHelperPro激活方法詳細(xì)教程

    MyBatisCodeHelper-Pro是IDEA下的一個(gè)插件,功能類(lèi)似mybatis plugin,今天小編給大家分享MyBatis CodeHelperPro激活方法,需要的朋友跟隨小編一起看看吧
    2021-07-07
  • Java文件與Base64之間的轉(zhuǎn)化方式

    Java文件與Base64之間的轉(zhuǎn)化方式

    這篇文章介紹了如何使用Java將文件(如圖片、視頻)轉(zhuǎn)換為Base64編碼,以及如何將Base64編碼轉(zhuǎn)換回文件,通過(guò)提供具體的工具類(lèi)實(shí)現(xiàn),作者希望幫助讀者更好地理解和應(yīng)用這一過(guò)程
    2025-02-02
  • Java自動(dòng)化測(cè)試中多數(shù)據(jù)源的切換(實(shí)例講解)

    Java自動(dòng)化測(cè)試中多數(shù)據(jù)源的切換(實(shí)例講解)

    下面小編就為大家?guī)?lái)一篇Java自動(dòng)化測(cè)試中多數(shù)據(jù)源的切換(實(shí)例講解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • 使用Java實(shí)現(xiàn)查看線程的運(yùn)行狀態(tài)(附源碼)

    使用Java實(shí)現(xiàn)查看線程的運(yùn)行狀態(tài)(附源碼)

    在現(xiàn)代 Java 應(yīng)用中,線程的運(yùn)行狀態(tài)對(duì)于排查問(wèn)題和優(yōu)化性能具有至關(guān)重要的作用,本文將使用Java編寫(xiě)一個(gè)查看線程運(yùn)行狀態(tài)的工具,有需要的可以了解下
    2025-03-03
  • Spring Boot 項(xiàng)目設(shè)置網(wǎng)站圖標(biāo)的方法

    Spring Boot 項(xiàng)目設(shè)置網(wǎng)站圖標(biāo)的方法

    這篇文章主要介紹了Spring Boot 項(xiàng)目設(shè)置網(wǎng)站圖標(biāo)的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • 使用Java和SNMP4J實(shí)現(xiàn)SNMP操作完整代碼

    使用Java和SNMP4J實(shí)現(xiàn)SNMP操作完整代碼

    這篇文章主要介紹了如何使用Java和SNMP4J庫(kù)進(jìn)行SNMP操作,包括初始化SNMP、創(chuàng)建目標(biāo)、創(chuàng)建PDU、發(fā)送SNMP請(qǐng)求和處理響應(yīng)等內(nèi)容,通過(guò)編寫(xiě)SnmpUtil類(lèi),展示了完整的SNMP操作流程,需要的朋友可以參考下
    2024-12-12
  • java代碼實(shí)現(xiàn)空間切割

    java代碼實(shí)現(xiàn)空間切割

    大家好,本篇文章主要講的是java代碼實(shí)現(xiàn)空間切割,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • Spring?Cloud?Gateway集成Sentinel流控詳情

    Spring?Cloud?Gateway集成Sentinel流控詳情

    這篇文章主要介紹了Spring?Cloud?Gateway集成Sentinel流控詳情,Sentinel支持對(duì)Spring?Cloud?Gateway、Zuul等主流的API?Gateway進(jìn)行限流,需要的朋友可以參考一下
    2022-09-09
  • Java8的常用時(shí)間api實(shí)用指南

    Java8的常用時(shí)間api實(shí)用指南

    這篇文章主要給大家介紹了關(guān)于Java8的常用時(shí)間api的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11

最新評(píng)論

甘孜县| 敦煌市| 伊春市| 天峻县| 和静县| 中阳县| 松江区| 衡阳市| 彭山县| 台山市| 萨迦县| 永宁县| 南靖县| 酉阳| 房山区| 东宁县| 麟游县| 江口县| 彭山县| 河间市| 浑源县| 乡城县| 教育| 林州市| 鸡西市| 达尔| 赤水市| 龙井市| 伊宁县| 临江市| 卫辉市| 瑞丽市| 榆社县| 濮阳市| 宁陵县| 永川市| 延边| 怀柔区| 马边| 综艺| 丹江口市|