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

Java編寫Mapreduce程序過程淺析

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

一個Maprduce程序主要包括三部分:Mapper類、Reducer類、執(zhí)行類。

Maven項目下所需依賴

<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: 一種可變長度的字節(jié)數(shù)組,用于表示文本數(shù)據(jù)。相當(dāng)于Java中的String。
  • LongWritable、IntWritable、FloatWritable、DoubleWritable: 分別用于表示長整型、整型、浮點型和雙精度浮點型數(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ù)空格分開
//            String[] words = line.split(" ");
            String[] words = StringUtils.split(line,' ');//hadoop的StringUtils.split方法對大數(shù)據(jù)來說比Java自帶的擁有更好的性能
            //輸出鍵值對
            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;
        //遍歷單詞計數(shù)數(shù)組,將值累加到sum中
        for (LongWritable value : values) {
            sum += value.get();
        }
        //輸出每次最終的計數(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)計文件輸入的路徑,將命令行的第一個參數(shù)作為輸入文件的路徑
        //讀取maven項目下resources目錄的文檔    
        String path = getClass().getResource("/words.txt").getPath();
        FileInputFormat.setInputPaths(job,path);
        //設(shè)置結(jié)果數(shù)據(jù)存放路徑,將命令行的第二個參數(shù)作為數(shù)據(jù)的輸出路徑
        //輸出目錄必須不存在!!!
        FileOutputFormat.setOutputPath(job,new Path("./output"));
        return job.waitForCompletion(true) ? 0 : 1;
    }
}

程序執(zhí)行結(jié)果

  • .part-r-00000.crc: 是Reduce任務(wù)輸出結(jié)果文件的校驗文件,用于校驗Reduce任務(wù)輸出結(jié)果文件的完整性和正確性。該文件由Hadoop框架自動生成,不需要手動創(chuàng)建,其內(nèi)容是Reduce任務(wù)輸出結(jié)果文件的校驗和信息。
  • ._SUCCESS.crc: 是表示任務(wù)執(zhí)行成功的標(biāo)志文件的校驗文件,用于校驗標(biāo)志文件的完整性和正確性。該文件由Hadoop框架自動生成,其內(nèi)容是標(biāo)志文件的校驗和信息。
  • _SUCCESS: 表示任務(wù)執(zhí)行成功的標(biāo)志文件,文件內(nèi)容為空。
  • part-r-00000: 表示Reduce任務(wù)的輸出結(jié)果文件,其中“00000”表示該文件是第一個Reduce任務(wù)的輸出結(jié)果文件,如果有多個Reduce任務(wù),則會生成多個該類型的文件,文件內(nèi)容為每個單詞出現(xiàn)的次數(shù)。

到此這篇關(guān)于Java編寫Mapreduce程序過程淺析的文章就介紹到這了,更多相關(guān)Java編寫Mapreduce內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

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

    MyBatis CodeHelperPro激活方法詳細教程

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

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

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

    Java自動化測試中多數(shù)據(jù)源的切換(實例講解)

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

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

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

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

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

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

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

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

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

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

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

    Java8的常用時間api實用指南

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

最新評論

偏关县| 茶陵县| 新竹县| 雅江县| 南陵县| 宜黄县| 利川市| 荔浦县| 共和县| 广饶县| 长岛县| 舒兰市| 宁德市| 肇庆市| 项城市| 胶南市| 寿宁县| 土默特左旗| 灵台县| 同德县| 郎溪县| 阳春市| 阳朔县| 福州市| 皮山县| 电白县| 石首市| 凤山市| 德庆县| 镇原县| 新郑市| 葵青区| 太和县| 萨迦县| 平南县| 鸡西市| 黄平县| 金山区| 三台县| 闵行区| 彭山县|