溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Hadoop中使用Combiner有什么好處

發布時間:2021-12-09 15:55:32 來源:億速云 閱讀:192 作者:小新 欄目:云計算

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

        使用Combiner好處

                           減少Mapper任務輸出數據量,減少網絡傳輸時間,減少整體Job運行時間。

        Combiner僅作用于單個Mapper任務,每個Map任務可能會產生大量的輸出,Combiner的作用就是在Map端對輸出先做一次合并,以減少傳輸到Reducer的數據量。

        Combiner最基本是實現本地Key的遞歸,Combiner具有類似本地的Reduce功能。如果不用Combiner,那么所有的結果都是Reduce完成,效率會相對低下,使用Combiner先完成的Map會在本地聚合,提升速度。

        注意:Combiner的輸出時Reduce的輸入,Combiner決不能改變最終的計算結果,所以從我的想法來看,Combiner只應該用于那種Reduce的輸入key/value與輸出key/value類型完成一致,且不影響最終結果的場景。比如累加,最大值等。

        為什么使用Combiner

                          集群上的可用寬帶限制了MapReduce作業的數量,因此最重要的一點是盡量避免Map任務和Reduce任務之間的數據傳輸。

                          Hadoop允許用戶針對Map任務的輸出指定一個合并函數(Combiner)——————合并函數的輸出作為Reduce函數的輸入。

                            由于合并函數是一個優化方案,所以Hadoop無法確定針對Map任務輸出中任一條記錄需要調用多少次合并函數。換而言之,不管調用合并函數多少次,Reduce的輸出結構都是一致的。

例子:
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;

/**
 * 計算單詞
 * @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    從哪里讀取數據
        FileInputFormat.setInputPaths(job, INPUT_PATH);
        //把輸入文本中的每一行解析成一個個鍵值對
        job.setInputFormatClass(TextInputFormat.class);
        
        //1.2    設置自定義map函數
        job.setMapperClass(MyMapper.class);
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(LongWritable.class);
        
        //1.3    分區
        job.setPartitionerClass(HashPartitioner.class);
        job.setNumReduceTasks(1);
        
        //1.4    TODO    排序分組
        //1.5    規約
        job.setCombinerClass(MyReducer.class);
        
        //2.1    是框架做的,不需要程序員手工干預。
        //2.2    自定義reducer函數
        job.setReducerClass(MyReducer.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(LongWritable.class);
        
        //2.3    寫入到HDFS中
        FileOutputFormat.setOutputPath(job, new Path(OUTPUT_PATH));
        //格式化類
        job.setOutputFormatClass(TextOutputFormat.class);
        
        //提交給JobTracker去執行
        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);
        }
    }
}

感謝你能夠認真閱讀完這篇文章,希望小編分享的“Hadoop中使用Combiner有什么好處”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女