国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

hadoop學習:mapreduce入門案例四:partitioner 和 combiner

這篇具有很好參考價值的文章主要介紹了hadoop學習:mapreduce入門案例四:partitioner 和 combiner。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

先簡單介紹一下partitioner 和 combiner?

Partitioner類

  • 用于在Map端對key進行分區(qū)
    • 默認使用的是HashPartitioner
      • 獲取key的哈希值
      • 使用key的哈希值對Reduce任務數(shù)求模
    • 決定每條記錄應該送到哪個Reducer處理
  • 自定義Partitioner
    • 繼承抽象類Partitioner,重寫getPartition方法
    • job.setPartitionerClass(MyPartitioner.class)

Combiner類

  • Combiner相當于本地化的Reduce操作
    • 在shuffle之前進行本地聚合
    • 用于性能優(yōu)化,可選項
    • 輸入和輸出類型一致
  • Reducer可以被用作Combiner的條件
    • 符合交換律和結合律
  • 實現(xiàn)Combiner
    • job.setCombinerClass(WCReducer.class)

我們進入案例來看這兩個知識點

一 案例需求

一個存放電話號碼的文本,我們需要136 137,138 139和其它開頭的號碼分開存放統(tǒng)計其每個數(shù)字開頭的號碼個數(shù)

hadoop學習:mapreduce入門案例四:partitioner 和 combiner,mapreduce,mapreduce,大數(shù)據(jù),hadoop,學習,linux

hadoop學習:mapreduce入門案例四:partitioner 和 combiner,mapreduce,mapreduce,大數(shù)據(jù),hadoop,學習,linux
效果

?二 PhoneMapper 類

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

import java.io.IOException;

public class PhoneMapper extends Mapper<LongWritable, Text,Text, IntWritable> {
    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        String phone = value.toString();
        Text text = new Text(phone);
        IntWritable intWritable = new IntWritable(1);
        context.write(text,intWritable);
    }
}

三 PhoneReducer 類

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;

public class PhoneReducer extends Reducer<Text, IntWritable,Text,IntWritable> {
    @Override
    protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
        int count = 0;
        for (IntWritable intWritable : values){
            count += intWritable.get();
        }
        context.write(key, new IntWritable(count));
    }
}

四 PhonePartitioner 類

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Partitioner;

public class PhonePartitioner extends Partitioner<Text, IntWritable> {
    @Override
    public int getPartition(Text text, IntWritable intWritable, int i) {
        //136,137   138,139     其它號碼放一起
        if("136".equals(text.toString().substring(0,3)) || "137".equals(text.toString().substring(0,3))){
            return 0;
        }else if ("138".equals(text.toString().substring(0,3)) || "139".equals(text.toString().substring(0,3))){
            return 1;
        }else {
            return 2;
        }

    }
}

五 PhoneCombiner 類

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;

public class PhoneCombiner extends Reducer<Text, IntWritable,Text,IntWritable> {
    @Override
    protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
        int count = 0;
        for(IntWritable intWritable : values){
            count += intWritable.get();
        }
        context.write(new Text(key.toString().substring(0,3)), new IntWritable(count));
    }
}

六 PhoneDriver 類

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
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 java.io.IOException;

public class PhoneDriver {
    public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
        Configuration conf = new Configuration();
        Job job = Job.getInstance(conf);

        job.setJarByClass(PhoneDriver.class);

        job.setMapperClass(PhoneMapper.class);
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(IntWritable.class);

        job.setCombinerClass(PhoneCombiner.class);

        job.setPartitionerClass(PhonePartitioner.class);
        job.setNumReduceTasks(3);

        job.setReducerClass(PhoneReducer.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);

        Path inPath = new Path("in/demo4/phone.csv");
        FileInputFormat.setInputPaths(job, inPath);

        Path outPath = new Path("out/out6");
        FileSystem fs = FileSystem.get(outPath.toUri(),conf);
        if (fs.exists(outPath)){
            fs.delete(outPath, true);
        }
        FileOutputFormat.setOutputPath(job, outPath);

        job.waitForCompletion(true);

    }
}

七 小結

該案例新知識點在于分區(qū)(partition)和結合(combine)

這次代碼的流程是?

driver——》mapper——》partitioner——》combiner——》reducer

map 每處理一條數(shù)據(jù)都經(jīng)過一次 partitioner 分區(qū)然后存到環(huán)形緩存區(qū)中去,然后map再去處理下一條數(shù)據(jù)以此反復直至所有數(shù)據(jù)處理完成

combine 則是將環(huán)形緩存區(qū)溢出的緩存文件合并,并提前進行一次排序和計算(對每個溢出文件計算后再合并)最后將一個大的文件給到 reducer,這樣大大減少了 reducer 的計算負擔文章來源地址http://www.zghlxwxcb.cn/news/detail-685798.html

到了這里,關于hadoop學習:mapreduce入門案例四:partitioner 和 combiner的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Hadoop入門學習筆記——四、MapReduce的框架配置和YARN的部署

    Hadoop入門學習筆記——四、MapReduce的框架配置和YARN的部署

    視頻課程地址:https://www.bilibili.com/video/BV1WY4y197g7 課程資料鏈接:https://pan.baidu.com/s/15KpnWeKpvExpKmOC8xjmtQ?pwd=5ay8 Hadoop入門學習筆記(匯總) 本次YARN的部署結構如下圖所示: 當前,共有三臺服務器(虛擬機)構成集群,集群規(guī)劃如下所示: 主機 部署的服務 node1 ResourceManager、N

    2024年02月04日
    瀏覽(17)
  • Hadoop3 - MapReduce COVID-19 案例實踐

    Hadoop3 - MapReduce COVID-19 案例實踐

    上篇文章對 MapReduce 進行了介紹,并編寫了 WordCount 經(jīng)典案例的實現(xiàn),本篇為繼續(xù)加深 MapReduce 的用法,實踐 COVID-19 新冠肺炎案例,下面是上篇文章的地址: https://blog.csdn.net/qq_43692950/article/details/127195121 COVID-19,簡稱“新冠肺炎”,世界衛(wèi)生組織命名為“2019冠狀病毒病” [1-

    2024年02月08日
    瀏覽(18)
  • 虛擬機+Hadoop下MapReduce的Wordcount案例

    虛擬機+Hadoop下MapReduce的Wordcount案例

    環(huán)境:ubuntu18.04 前提:Hadoop已經(jīng)搭建好 抄作業(yè)記得改標題 輸入內(nèi)容(可以自定義,抄作業(yè)別寫一樣的) yarn-site.xml 內(nèi)容如下,注意第一個property要改: ·輸入hadoop classpath(任意路徑下均可),將返回的內(nèi)容復制在第一個property的value中 *修改配置文件之后要重啟hadoop(關了又

    2024年02月07日
    瀏覽(14)
  • 【Hadoop_06】MapReduce的概述與wc案例

    【Hadoop_06】MapReduce的概述與wc案例

    MapReduce是一個 分布式運算程序 的編程框架,是用戶開發(fā)“基于Hadoop的數(shù)據(jù)分析應用”的核心框架。 MapReduce核心功能是 將用戶編寫的業(yè)務邏輯代碼 和 自帶默認組件 整合成一個完整的 分布式運算程序 ,并發(fā)運行在一個Hadoop集群上。 1)MapReduce易于編程 它簡單的實現(xiàn)一些接口

    2024年02月04日
    瀏覽(58)
  • Hadoop3教程(十九):MapReduce之ETL清洗案例

    ETL,即 Extract-Transform-Load 的縮寫,用來描述數(shù)據(jù)從源端,經(jīng)過抽取(Extract)、轉換(transform),最后加載(load)到目標端的處理過程。 ETL主要應用于數(shù)據(jù)倉庫,但不只是應用于數(shù)據(jù)倉庫,畢竟這個更像是一類思想。 在運行核心的MR程序之前,往往要對數(shù)據(jù)進行清理,清除掉

    2024年02月06日
    瀏覽(18)
  • Hadoop3教程(十七):MapReduce之ReduceJoin案例分析

    現(xiàn)在有兩個文件: orders.txt,存放的是訂單ID、產(chǎn)品ID、產(chǎn)品數(shù)量 pd.txt,這是一個產(chǎn)品碼表,存放的是產(chǎn)品ID、產(chǎn)品中文名; 現(xiàn)在是想通過join,來實現(xiàn)這么一個預期輸出,即訂單ID、產(chǎn)品中文名、產(chǎn)品數(shù)量。 以上是本次案例需求。 簡單思考一下思路。我們需要將關聯(lián)條件作為

    2024年02月07日
    瀏覽(28)
  • 大數(shù)據(jù)實戰(zhàn)——基于Hadoop的Mapreduce編程實踐案例的設計與實現(xiàn)

    大數(shù)據(jù)實戰(zhàn)——基于Hadoop的Mapreduce編程實踐案例的設計與實現(xiàn)

    圖1:MaxCompute MapReduce各個階段思路設計 設計思路分析分為六個模塊:input輸入數(shù)據(jù)、splitting拆分、Mapping映射、Shuffing派發(fā)、Reducing縮減、Final result輸出。 輸入數(shù)據(jù):直接讀入文本不進行分片,數(shù)據(jù)項本身作為單個Map Worker的輸入。 Map階段:Map處理輸入,每獲取一個數(shù)字,將數(shù)

    2024年02月05日
    瀏覽(21)
  • 大數(shù)據(jù)與云計算——部署Hadoop集群并運行MapReduce集群案例(超級詳細!)

    大數(shù)據(jù)與云計算——部署Hadoop集群并運行MapReduce集群案例(超級詳細!)

    Linux搭建Hadoop集群(CentOS7+hadoop3.2.0+JDK1.8+Mapreduce完全分布式集群) 本文所用到的版本號: CentOS7 Hadoop3.2.0 JDK1.8 基本概念及重要性 很多小伙伴部署集群用hadoop用mapreduce,卻不知道到底部署了什么,有什么用。在部署集群之前先給大家講一下Hadoop和MapReduce的基本概念,以及它們在大

    2024年02月04日
    瀏覽(22)
  • MapReduce入門(一)—— MapReduce概述 + WordCount案例實操

    MapReduce入門(一)—— MapReduce概述 + WordCount案例實操

    MapReduce知識點總覽圖 MapReduce 是 一個分布式運算程序的編程框架 ,是用戶開發(fā)“基于 Hadoop 的數(shù)據(jù)分析應用”的核心框架。 MapReduce 核心功能是 將用戶編寫的業(yè)務邏輯代碼 和 自帶默認組件 整合成一個 完整的分布式運算程序 ,并發(fā)運行在一個 Hadoop 集群上。 1.2.1 優(yōu)點 1 )M

    2023年04月21日
    瀏覽(25)
  • Hadoop系統(tǒng)應用之MapReduce相關操作【IDEA版】---經(jīng)典案例“倒排索引、數(shù)據(jù)去重、TopN”

    Hadoop系統(tǒng)應用之MapReduce相關操作【IDEA版】---經(jīng)典案例“倒排索引、數(shù)據(jù)去重、TopN”

    ? 倒排索引是文檔檢索系統(tǒng)中最常用的數(shù)據(jù)結構,被廣泛應用于全文搜索引擎。倒排索引主要用來存儲某個單詞(或詞組)在一組文檔中的存儲位置的映射,提供了可以根據(jù)內(nèi)容來查找文檔的方式,而不是根據(jù)文檔來確定內(nèi)容,因此稱為倒排索引(Inverted Index)。帶有倒排索引

    2024年02月07日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包