溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Hadoop中使用Combiner有什么好處

發(fā)布時(shí)間:2021-12-09 15:55:32 來(lái)源:億速云 閱讀:160 作者:小新 欄目:云計(jì)算

這篇文章主要介紹了Hadoop中使用Combiner有什么好處,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

        使用Combiner好處

                           減少M(fèi)apper任務(wù)輸出數(shù)據(jù)量,減少網(wǎng)絡(luò)傳輸時(shí)間,減少整體Job運(yùn)行時(shí)間。

        Combiner僅作用于單個(gè)Mapper任務(wù),每個(gè)Map任務(wù)可能會(huì)產(chǎn)生大量的輸出,Combiner的作用就是在Map端對(duì)輸出先做一次合并,以減少傳輸?shù)絉educer的數(shù)據(jù)量。

        Combiner最基本是實(shí)現(xiàn)本地Key的遞歸,Combiner具有類(lèi)似本地的Reduce功能。如果不用Combiner,那么所有的結(jié)果都是Reduce完成,效率會(huì)相對(duì)低下,使用Combiner先完成的Map會(huì)在本地聚合,提升速度。

        注意:Combiner的輸出時(shí)Reduce的輸入,Combiner決不能改變最終的計(jì)算結(jié)果,所以從我的想法來(lái)看,Combiner只應(yīng)該用于那種Reduce的輸入key/value與輸出key/value類(lèi)型完成一致,且不影響最終結(jié)果的場(chǎng)景。比如累加,最大值等。

        為什么使用Combiner

                          集群上的可用寬帶限制了MapReduce作業(yè)的數(shù)量,因此最重要的一點(diǎn)是盡量避免Map任務(wù)和Reduce任務(wù)之間的數(shù)據(jù)傳輸。

                          Hadoop允許用戶(hù)針對(duì)Map任務(wù)的輸出指定一個(gè)合并函數(shù)(Combiner)——————合并函數(shù)的輸出作為Reduce函數(shù)的輸入。

                            由于合并函數(shù)是一個(gè)優(yōu)化方案,所以Hadoop無(wú)法確定針對(duì)Map任務(wù)輸出中任一條記錄需要調(diào)用多少次合并函數(shù)。換而言之,不管調(diào)用合并函數(shù)多少次,Reduce的輸出結(jié)構(gòu)都是一致的。

例子:
package combiner;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

import mapreduce.MyMapper;
import mapreduce.MyReducer;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
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.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.mapreduce.lib.partition.HashPartitioner;

/**
 * 計(jì)算單詞
 * @author Xr
 *
 */
public class WordCountApp {
    private static final String INPUT_PATH = "hdfs://hadoop:9000/hello";
    private static final String OUTPUT_PATH = "hdfs://hadoop:9000/hello1";
    public static void main(String[] args)throws Exception {
        Configuration conf = new Configuration();
        //判處是否存在輸入目錄
        existsFile(conf);
        Job job = new Job(conf,WordCountApp.class.getName());
        
        //1.1    從哪里讀取數(shù)據(jù)
        FileInputFormat.setInputPaths(job, INPUT_PATH);
        //把輸入文本中的每一行解析成一個(gè)個(gè)鍵值對(duì)
        job.setInputFormatClass(TextInputFormat.class);
        
        //1.2    設(shè)置自定義map函數(shù)
        job.setMapperClass(MyMapper.class);
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(LongWritable.class);
        
        //1.3    分區(qū)
        job.setPartitionerClass(HashPartitioner.class);
        job.setNumReduceTasks(1);
        
        //1.4    TODO    排序分組
        //1.5    規(guī)約
        job.setCombinerClass(MyReducer.class);
        
        //2.1    是框架做的,不需要程序員手工干預(yù)。
        //2.2    自定義reducer函數(shù)
        job.setReducerClass(MyReducer.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(LongWritable.class);
        
        //2.3    寫(xiě)入到HDFS中
        FileOutputFormat.setOutputPath(job, new Path(OUTPUT_PATH));
        //格式化類(lèi)
        job.setOutputFormatClass(TextOutputFormat.class);
        
        //提交給JobTracker去執(zhí)行
        job.waitForCompletion(true);
    }
    private static void existsFile(Configuration conf) throws IOException,
            URISyntaxException {
        FileSystem fs = FileSystem.get(new URI(INPUT_PATH), conf);
        if(fs.exists(new Path(OUTPUT_PATH))){
            fs.delete(new Path(OUTPUT_PATH), true);
        }
    }
}

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Hadoop中使用Combiner有什么好處”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI