MapReduce 数据倾斜以及解决思路

数据倾斜常见原因和解决办法 数据倾斜在MapReduce编程模型中十分常见,多个节点并行计算,如果分配的不均,就会导致长尾问题(大部分节点都完成了任务,一直等待剩下的节点完成任务),本文梳理了常见的发生倾斜的原因以及相应的解决办法。 1.map端发生数据倾斜 产生原因: 读取数据时,上游文件大小分布不均,存在大量小文件。导致在读入数据时读小文件的maptask很快结束了,而读大文件的maptask进度可能进度才刚开始。 map端做聚合的时候,由于数据存在大量的count distinct,我们通过combin.. 阅读详情

MapReduce 数据倾斜以及解决思路

1.小背景

  1. 在mapreduce的分布式解决框架中,数据处理主要分为2个步骤,map阶段和reduce阶段
  2. map阶段主要是数据转换,也就是按照预期把输入的数据进行转换,变为中间数据
  3. 中间数据再分发给reduce阶段作为输入数据源进行处理。
  4. 在这个过程中,由于数据本身按照设计的key规则划分时就不均匀,再加上使用默认的分区规则进行对key进行计算时,也有产生数据倾斜的可能(key.hashcode() % numberOfReduceTasks)

2.大背景

  1. 为了解决传统计算机处理数据受限于单台计算机性能上限的问题,新的数据处理思路,分布式计算被提出来。
  2. 单台计算机处理,提升处理效率主要就是从硬件和软件上提升。硬件提升如单CPU多核心、多CPU多核心、内存容量增加例如部分服务器主板可以加内存到521GB甚至1TB、硬盘改为高速硬盘甚至固态硬盘,硬盘Raid技术等等。
  3. 分布式计算则换一种思路,打破单台计算机处理性能上限的问题。程序=数据+逻辑(算法/代码),如果能够让数据做切分,让代码也做切分,让后把切分后的数据和代码同时让多台计算机处理,这样就可以做到以往一台计算机需要处理十小时的任务,使用100台计算机可能几分钟就出结果的效果。
  4. 但分布式计算有一个大前提,需要针对分布式计算的特点,对程序要处理的数据和程序执行代码做处理,方便让程序和数据分发到计算机集群中进行并行执行。

3.MapReduce简介

  1. Hadoop的mapreduce处理框架,结合hadoop自带的hdfs,就可以做到数据分布式存储,程序分布式计算的目标。
  2. mapreduce是一种编程框架,也可以看作是一种编程思路。就是把问题分成2个大的步骤,第一步,map阶段,就是把输入数据进行转换。转换后的数据称之为中间数据。第二步,reduce阶段,就是把map阶段产生的中间数据进行聚合处理,最后得出结果。
  3. 这里面有几个关键点,hdfs可以把数据进行分布式存储,例如一个200MB文件,默认就会分为0–128MB,128MB–200MB 2个数据块存储到hdfs文件系统中。每个数据块会有3个备份来保证数据安全性。这样就隐形带来一个好处,数据被切块了。
  4. map task处理任务,如果能够让集群中计算机分别处理一个文件的不同数据块,这样就可做到集群分布式并行计算。hdfs已经做到让数据分布式存储。剩下的就是怎样让程序分别处理不同的数据块。
  5. 其实很简单,就是安排一个协调者,指定某台计算机就只处理分布式文件系统中的某一块数据即可。
  6. map task阶段结束后,也会产生中间结果数据,这个数据没错,也是会存到分布式文件系统中的。这时候执行reduce task的计算机,也一样,处理对应数据块的数据即可。最后进行结果汇总就是最后的结果。

4.数据倾斜

  1. 简单示意图如下:
    在这里插入图片描述
  2. 如图所示,数据倾斜主要就是在中间数据阶段,由于对数据分区处理不均匀,导致有些文件中数据量会非常大,有些文件数据量会少很多。这样一来,后续进行reduce task的计算机节点的任务量就会有很大差异。旱涝不同,雨露不均。

5.解决思路

  1. 加内存和提升CPU性能,数据倾斜导致最明显一个问题就是个别或者部分计算机节点数据量处理过大,导致整体处理速度变慢。提升集群中计算机硬件水平,可以缓解这个问题,就是比较费钱。。。
  2. 提升并行度,可以看到,我们如果让中间数据文件数量增多,这样数据就会分不到更多文件,对于单个文件数据量过大问题就能得到较好缓解。hadoop中的中间文件数量默认和reduce task数量一致,所以增加reduce task数量可以缓解数据倾斜问题。不过增加并行度其实也受限于集群中计算机节点数量,除非愿意增加计算机物理节点数,这又回到费钱的方式上
  3. 既然数据倾斜是由中间数据分区导致的,那就干脆不执行reduce阶段,直接把数据输出到文件中,这样就不需要进行中间的数据分区操作。实际业务场景就是,启动一个mapreduce,但只是利用map阶段针对数据做清洗和转换。
  4. 既然中间文件数量受限于reduce task任务数,如果设置为1,文件就一个,也不存在数据倾斜问题,数据都写入到一个文件中去了。但这样不符合分布式计算的准则,会极大降低处理效率。
  5. 既然分区是由针对key的处理而产生的,我让key变得均匀散布,也就是把key打散。常见操作就是加一个随机数前缀或者后缀,这样一来,以往相同的key,由于新增了随机数前后缀,变得不一样,中间数据分区时,自然而然就会分到不同文件中去,数据倾斜就被很大缓解了。不过带来另外一个问题,需要对key打散后reduce聚合后数据再做一次mapreduce操作来得到最后数据。这时候可能还会有数据倾斜,但由于已经聚合过一次,数据量会降低很多,数据倾斜也会由较大缓解。
  6. 自定义shuffle分区算法,也就是换一种算法。既然默认的分区算法有问题,那我换一个算法来对数据分区即可。生活中类比来看就是,如果某方面大家都一样,那我就换一个标准和角度来重新划分,一定可以把物品相对均匀的分成相同多份。

6.代码演示

6.1输入数据源:

a b a b a c hu jn jgh op a a a a b  c c c c a a a a a a a c c c c c c c c c c c a a a a 
a b a b a c hu jn jgh op a a a a b  c c c c a a a a a a a c c c c c c c c c c c a a a a 
a b a b a c hu jn jgh op a a a a b  c c c c a a a a a a a c c c c c c c c c c c a a a a 
a b a b a c hu jn jgh op a a a a b  c c c c a a a a a a a c c c c c c c c c c c a a a a 
a b a b a c hu jn jgh op a a a a b  c c c c a a a a a a a c c c c c c c c c c c a a a a 
a b a b a c hu jn jgh op a a a a b  c c c c a a a a a a a c c c c c c c c c c c a a a a 
a b a b a c hu jn jgh op a a a a b  c c c c a a a a a a a c c c c c c c c c c c a a a a 
a b a b a c hu jn jgh op a a a a b  c c c c a a a a a a a c c c c c c c c c c c a a a a 
a b a b a c hu jn jgh op a a a a b  c c c c a a a a a a a c c c c c c c c c c c a a a a 
a b a b a c hu jn jgh op a a a a b  c c c c a a a a a a a c c c c c c c c c c c a a a a 
a b a b a c hu jn jgh op a a a a b  c c c c a a a a a a a c c c c c c c c c c c a a a a 
a b a b a c hu jn jgh op a a a a b  c c c c a a a a a a a c c c c c c c c c c c a a a a 
a b a b a c hu jn jgh op a a a a b  c c c c a a a a a a a c c c c c c c c c c c a a a a 
a b a b a c hu jn jgh op a a a a b  c c c c a a a a a a a c c c c c c c c c c c a a a a 
a b a b a c hu jn jgh op a a a a b  c c c c a a a a a a a c c c c c c c c c c c a a a a 
a b a b a c hu jn jgh op a a a a b  c c c c a a a a a a a c c c c c c c c c c c a a a a 
a b a b a c hu jn jgh op a a a a b  c c c c a a a a a a a c c c c c c c c c c c a a a a 
a b a b a c hu jn jgh op a a a a b  c c c c a a a a a a a c c c c c c c c c c c a a a a 
a b a b a c hu jn jgh op a a a a b  c c c c a a a a a a a c c c c c c c c c c c a a a a 
a b a b a c hu jn jgh op a a a a b  c c c c a a a a a a a c c c c c c c c c c c a a a a 
a b a b a c hu jn jgh op a a a a b  c c c c a a a a a a a c c c c c c c c c c c a a a a 
a b a b a c hu jn jgh op a a a a b  c c c c a a a a a a a c c c c c c c c c c c a a a a 
a b a b a c hu jn jgh op a a a a b  c c c c a a a a a a a c c c c c c c c c c c a a a a 
a b a b a c hu jn jgh op a a a a b  c c c c a a a a a a a c c c c c c c c c c c a a a a 
a b a b a c hu jn jgh op a a a a b  c c c c a a a a a a a c c c c c c c c c c c a a a a 
a b a b a c hu jn jgh op a a a a b  c c c c a a a a a a a c c c c c c c c c c c a a a a 
a b a b a c hu jn jgh op a a a a b  c c c c a a a a a a a c c c c c c c c c c c a a a a 
a b a b a c hu jn jgh op a a a a b  c c c c a a a a a a a c c c c c c c c c c c a a a a 
a b a b a c hu jn jgh op a a a a b  c c c c a a a a a a a c c c c c c c c c c c a a a a 
a b a b a c hu jn jgh op a a a a b  c c c c a a a a a a a c c c c c c c c c c c a a a a 
a b a b a c hu jn jgh op a a a a b  c c c c a a a a a a a c c c c c c c c c c c a a a a 
a b a b a c hu jn jgh op a a a a b  c c c c a a a a a a a c c c c c c c c c c c a a a a 
a b a b a c hu jn jgh op a a a a b  c c c c a a a a a a a c c c c c c c c c c c a a a a 
a b a b a c hu jn jgh op a a a a b  c c c c a a a a a a a c c c c c c c c c c c a a a a 
a b a b a c hu jn jgh op a a a a b  c c c c a a a a a a a c c c c c c c c c c c a a a a 
a b a b a c hu jn jgh op a a a a b  c c c c a a a a a a a c c c c c c c c c c c a a a a 
a b a b a c hu jn jgh op a a a a b  c c c c a a a a a a a c c c c c c c c c c c a a a a 
a b a b a c hu jn jgh op a a a a b  c c c c a a a a a a a c c c c c c c c c c c a a a a 
a b a b a c hu jn jgh op a a a a b  c c c c a a a a a a a c c c c c c c c c c c a a a a 
a b a b a c hu jn jgh op a a a a b  c c c c a a a a a a a c c c c c c c c c c c a a a a 
a b a b a c hu jn jgh op a a a a b  c c c c a a a a a a a c c c c c c c c c c c a a a a 
a b a b a c hu jn jgh op a a a a b  c c c c a a a a a a a c c c c c c c c c c c a a a a 
a b a b a c hu jn jgh op a a a a b  c c c c a a a a a a a c c c c c c c c c c c a a a a 

6.2不做key打散的mapreduce代码

  1. 代码
package com.doit.hadoop.skew;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import java.io.IOException;

/**
 * @author hulc
 * @slogan: just do it
 * @date 2020/8/20 22:48
 */

public class DataSkewDriver {
    public static void main(String[] args) {

        // 配置文件
        Configuration conf = new Configuration();
        conf.set("mapreduce.framework.name", "local");

        // job  注意由于引入了配置文件,需要设置为local模式运行
        try {
            Job skew = Job.getInstance(conf, "skew");

            // mapper 和reducer类
            skew.setMapperClass(SkewMapper.class);
            skew.setReducerClass(SkewReducer.class);

            // map输出的key value
            skew.setMapOutputKeyClass(Text.class);
            skew.setMapOutputValueClass(IntWritable.class);

            // reduce 输出的key 和value
            skew.setOutputKeyClass(Text.class);
            skew.setOutputValueClass(IntWritable.class);

            // 输入和输出数据源  E:\DOITLearning\8.Hadoop\mrdata\flow\input\dataskew.txt
            FileInputFormat.setInputPaths(skew, new Path("E:\\DOITLearning\\8.Hadoop\\mrdata\\flow\\input\\dataskew.txt"));
            FileOutputFormat.setOutputPath(skew, new Path("E:\\DOITLearning\\8.Hadoop\\mrdata\\flow\\skew_output1"));

            // reduce 任务数
            skew.setNumReduceTasks(2);

            // 启动任务
            boolean b = skew.waitForCompletion(true);

            if(b) {
                System.out.println("success");
            } else {
                System.out.println("failed");
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

class SkewMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
    IntWritable mapValue = new IntWritable(1);
    Text mapKey = new Text();

    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {

        // 简单的统计单词个数
        String line = value.toString();

        String[] split = line.split("\\s+");

        for (String s : split) {
            mapKey.set(s);
            context.write(mapKey, mapValue);
        }
    }
}

class SkewReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
    IntWritable reduceValue = new IntWritable();

    @Override
    protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
        // 聚合统计单词个数
        int count = 0;
        for (IntWritable value : values) {
            count ++;
        }
        reduceValue.set(count);

        context.write(key, reduceValue);
    }
}
  1. 输出结果
    从结果看,数据倾斜其实比较严重,单词a和c数量过多,这样依赖,处理这些数据的reduce task的节点任务就比另外一个要重一些。主要看单词数据量对比,是7 -8倍的处理数据量的差距
    在这里插入图片描述

6.3 增加reduce task并行度的结果

  1. 代码
package com.doit.hadoop.skew;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import java.io.IOException;

/**
 * @author hulc
 * @slogan: just do it
 * @date 2020/8/20 22:48
 */

public class DataSkewDriver {
    public static void main(String[] args) {

        // 配置文件
        Configuration conf = new Configuration();
        conf.set("mapreduce.framework.name", "local");

        // job  注意由于引入了配置文件,需要设置为local模式运行
        try {
            Job skew = Job.getInstance(conf, "skew");

            // mapper 和reducer类
            skew.setMapperClass(SkewMapper.class);
            skew.setReducerClass(SkewReducer.class);

            // map输出的key value
            skew.setMapOutputKeyClass(Text.class);
            skew.setMapOutputValueClass(IntWritable.class);

            // reduce 输出的key 和value
            skew.setOutputKeyClass(Text.class);
            skew.setOutputValueClass(IntWritable.class);

            // 输入和输出数据源  E:\DOITLearning\8.Hadoop\mrdata\flow\input\dataskew.txt
            FileInputFormat.setInputPaths(skew, new Path("E:\\DOITLearning\\8.Hadoop\\mrdata\\flow\\input\\dataskew.txt"));
            FileOutputFormat.setOutputPath(skew, new Path("E:\\DOITLearning\\8.Hadoop\\mrdata\\flow\\skew_output2"));

            // reduce 任务数
            skew.setNumReduceTasks(5);

            // 启动任务
            boolean b = skew.waitForCompletion(true);

            if(b) {
                System.out.println("success");
            } else {
                System.out.println("failed");
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

class SkewMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
    IntWritable mapValue = new IntWritable(1);
    Text mapKey = new Text();

    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {

        // 简单的统计单词个数
        String line = value.toString();

        String[] split = line.split("\\s+");

        for (String s : split) {
            mapKey.set(s);
            context.write(mapKey, mapValue);
        }
    }
}

class SkewReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
    IntWritable reduceValue = new IntWritable();

    @Override
    protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
        // 聚合统计单词个数
        int count = 0;
        for (IntWritable value : values) {
            count ++;
        }
        reduceValue.set(count);

        context.write(key, reduceValue);
    }
}

  1. 运行结果
    注意这里有一个文件是空的,还记得之前说的,中间数据分区时,是根据reducetask任务数。key.hashcode() % 5,如果这时候这些key的hashcode模除5没有等于1的,中间文件对应1这个文件夹就是空的,自然而然,reduce task处理这个文件得出的结果也会是空的。
    在这里插入图片描述

6.3 对key进行打散处理(随机数)

  1. 代码,这里的reducetask设置为2,和初始时的代码一样,注意并没有设置为5,单一变量,方便做对比实验。
package com.doit.hadoop.skew;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import java.io.IOException;
import java.util.Random;

/**
 * @author hulc
 * @slogan: just do it
 * @date 2020/8/20 22:48
 */

public class DataSkewDriver {
    public static void main(String[] args) {

        // 配置文件
        Configuration conf = new Configuration();
        conf.set("mapreduce.framework.name", "local");

        // job  注意由于引入了配置文件,需要设置为local模式运行
        try {
            Job skew = Job.getInstance(conf, "skew");

            // mapper 和reducer类
            skew.setMapperClass(SkewMapper.class);
            skew.setReducerClass(SkewReducer.class);

            // map输出的key value
            skew.setMapOutputKeyClass(Text.class);
            skew.setMapOutputValueClass(IntWritable.class);

            // reduce 输出的key 和value
            skew.setOutputKeyClass(Text.class);
            skew.setOutputValueClass(IntWritable.class);

            // 输入和输出数据源  E:\DOITLearning\8.Hadoop\mrdata\flow\input\dataskew.txt
            FileInputFormat.setInputPaths(skew, new Path("E:\\DOITLearning\\8.Hadoop\\mrdata\\flow\\input\\dataskew.txt"));
            FileOutputFormat.setOutputPath(skew, new Path("E:\\DOITLearning\\8.Hadoop\\mrdata\\flow\\skew_output3"));

            // reduce 任务数
            skew.setNumReduceTasks(2);

            // 启动任务
            boolean b = skew.waitForCompletion(true);

            if(b) {
                System.out.println("success");
            } else {
                System.out.println("failed");
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

class SkewMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
    IntWritable mapValue = new IntWritable(1);
    Text mapKey = new Text();

    Random random = new Random();

    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {

        // 简单的统计单词个数
        String line = value.toString();

        String[] split = line.split("\\s+");

        for (String s : split) {
            // 打散key时,为了让数据更加均匀,一般都是取reducetask的倍数进行随机数生成并拼接。这样打散后数据分配到各个区中的概率会相对平均一些
            mapKey.set(s+random.nextInt(4));
            context.write(mapKey, mapValue);
        }
    }
}

class SkewReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
    IntWritable reduceValue = new IntWritable();

    @Override
    protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
        // 聚合统计单词个数
        int count = 0;
        for (IntWritable value : values) {
            count ++;
        }
        reduceValue.set(count);

        context.write(key, reduceValue);
    }
}

  1. 数据结果,注意这里来看,单词a作为key,加了随机数后缀后,确实被打散到了不同的文件中去,2个输出结果文件现在的数量看起来要均匀很多。
    在这里插入图片描述
  2. 注意key打散之后,需要对打散后的数据做二次mapreduce聚合处理,但这个时候数据倾斜已经有了较大缓解了。

总而言之,数据倾斜的来源是为了方便分布式计算而对中间数据做切分,但切分代码并不是所有场景下都能相对均匀切分,这时候就会出现多分数据,但有些数据多,有些数据少。这样后续的计算几点处理数据时,运行负载就会有差异,所以需要想办法进行重新划分,其实就是负载均衡的一种体现

MapReduce的分片规则及其数据倾斜的解决思路 今天重新学习了Hadoop中MapReduce计算框架的相关内容,又有了一些新的体会,因此想将学习的一些心得记录下来。 首先,我们通过官方图解来了解一下MapReduce的整体流程: 下面我们来了解一下MapReduce计算框架运行的几个阶段,总体来说可以分为四个基本阶段: 第一、原始数据的输入和切分(split) 在这个阶段我们需要明白数据是如何进行切分的,及其分片规则 阅读详情

相关推荐

大数据篇--数据倾斜

文章目录一、什么是数据倾斜 一、什么是数据倾斜   简单的讲,数据倾斜就是我们在计算数据的时候,数据的分散度不够,导致大量的数据集中到了一台或者几台机器上计算,造成数据热点问题(数据倾斜的另一种说法),这些数据的计算速度远远低于平均计算速度,导致整个计算过程过慢。 现象: 大部分的task都非常快速的处理完成,只有极少数的task处理的非常慢,这种状况很可能就是数据倾斜了。对于Spark可以在WEB-UI的job=>stage=>task里看,你可以把task处理的数据量排序一下。 上面场景下

小强签名设计 的博客 5218

MapReduce数据倾斜产生的原因及其解决方案

例如select a,sum(1) from (select a, b from t group by a,b) group by a;countdistinct、group by、join等操作,触发了shuffle动作,导致全部相同key的值聚集在一个或几个节点上,很容易发生单点问题。对分布不均匀的数据,进行单独计算,首先对key做一层hash,把数据打散,让它的并行度变大,之后进行汇集数据预处理。数据倾斜就是数据的key的分化严重不均,造成一部分数据很多,一部分数据很少的局面。业务数据自带的特性;

运维仙人 1652

大数据领域Hive的数据倾斜问题解决思路

在大数据的世界里,“快"往往是我们的追求——快速处理数据、快速得到结果。但当Hive查询突然从"闪电侠"变成"蜗牛”,甚至直接"罢工"时,十有八九是遇到了"数据倾斜"这个"拦路虎"。帮你彻底搞懂数据倾斜到底是什么(用小学生都能懂的话解释)学会如何快速识别数据倾斜(就像医生诊断病情一样)掌握8种核心解决思路(从"应急处理"到"根治方案")通过实战案例演练如何落地这些方法(手把手教你操作)

大数据洞察的博客 404

如何解决 MapReduce 数据倾斜的问题?

前言 本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见1000个问题搞定大数据技术体系 正文 什么是数据倾斜? 数据倾斜是数据中的常见情况。 数据中不可避免地会出现离群值(outlier),并导致数据倾斜。 这些离群值会显著地拖慢 MapReduce 的执行。 常见的数据倾斜有以下几类 数据频率倾斜——某一个区域的数据量要远远大于其他区域。 数据大小倾斜——部分记录的大小远远大于平均值。 Ma

Shockang的博客 3万+

大数据处理实践探索 ---- 笔试面试考点(基础知识)

解释MapReduce中的Partition和Shuffle? 在MapReduce过程中需要将任务进行分片,Shuffle:是描述数据从map端输入到reduce的过程,在hadoop中,大部分map task和reducetask是在不同的node执行,重要开销是网络开销和磁盘IO开销,因此,shuffle的作用主要是:完整的从map task端传输到reduce端;跨节点传输数据时,尽可

shiter编写程序的艺术 1471

HFSS15 win10_64位破解

HFSS15 win10_64位破解 找到的别人的软件,但在首次安装时失败了,并不能patched。寻找了几种方法,已成功安装。在此写下安装经验,供大家参考。 软件安装包以及破解软件: 链接:https://pan.baidu.com/s/1MMjV_31maU5QD6fmI4zfIA 提取码:yj4q 在安装之前,建议关闭杀毒软件。 Step1:进入HFSS150Win64安装包,点击au...

玉笙寒 4万+

[MapReduce数据倾斜如何解决?]

碧云天,黄叶地,秋色连波,波上寒烟翠。山映斜阳天接水,芳草无情,更在斜阳外。黯乡魂,追旅思,夜夜除非,好梦留人睡。明月高楼休独倚,酒入愁肠,化作相思雨。

汤圆的博客 1030

光纤接口类型与应用场景全解析

本文全面解析了光纤接口的类型与应用场景,详细介绍了SC、LC、FC和ST等主流光纤接口的特点及适用环境。从数据中心的高密度布线到工业环境的极端条件,提供了专业的接口选型指南和实战经验,帮助读者根据具体需求选择最合适的光纤接口方案。

weixin_29289821的博客 411

MapReduce中数据倾斜的产生和解决办法详解

说明:关于数据倾斜的产生原因我将结合 map 和 reduce 阶段中的 shuffle 来讲解,若是对 shuffle 有所忘记需要温故的请到MapReduce:详解Shuffle(copy,sort,merge)过程进行相关了解。另本人能力有限,仅根据自己所了解的知识回答,若有误处或不足之处望不吝指出。 一、什么是数据倾斜以及数据倾斜是怎么产生的? 简单来说数据倾斜就是数...

优质后端技术知识记录 1470

加密视频如何破解 如何解除机器码绑定的视频

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 如何破解加密...

Q-980767270的博客 5万+

浅析ArcGis中的软件——ArcMap、ArcScene、 ArcGlobe、ArcCatalog

ArcMap:是集空间数据显示、矢量数据编辑、冲突数据检查(拓扑检查)、查询检索(地理编码)、统计(字段属性表)、报表生成、空间分析(ArcGIS Spatial Analyst)和高级制图(制图表达)等众多功能干一体的桌面应用平台软件。而且提供所见即所得的符号编辑器,令用户可以随心所欲地生成任意复杂的点、线、面符号。所支持的空间数据格式包括Arclnfo coverages、ESRI shapefiles、ArcSDE lavers、DXF、DWG、DGN、常见的图像格式、GRIDs、TINs等。

lxlmycsdnfree的博客 6565

mapreduce解决数据倾斜的思路

mapreduce解决数据倾斜的思路

freefish_yzx的博客 526

Scratch离线版部署指南:解决资源缺失与页面显示异常问题

本文提供了一份详尽的Scratch离线版部署指南,旨在解决网络依赖导致的资源缺失与页面显示异常问题。通过从基础文件获取、自动化资源抓取到生产环境部署的完整流程,帮助教育工作者和开发者在无网络环境下搭建功能完整的本地Scratch编辑器,确保编程教学的顺利进行。

wine的专栏 1263

MapReduce性能优化之小文件问题和数据倾斜问题解决方案

MapReduce性能优化之小文件问题和数据倾斜问题解决方案

qq_40905284的博客 1443

MuMu模拟器过检测实战:从硬件伪装到API欺骗的完整避坑指南

本文详细介绍了MuMu模拟器过检测的实战技术,从硬件伪装到API欺骗的全方位解决方案。通过修改CPU/GPU信息、内存分布、系统属性和行为模拟等关键技术,帮助用户有效绕过现代应用的模拟器检测机制,提升模拟器的隐蔽性和稳定性。

xxx12的博客 1393

Avalonia 超级详细学习指南

什么是 Avalonia?Avalonia 是一个开源的、跨平台的 GUI 框架,允许开发者使用 XAML 和 C# 构建现代化、高性能的桌面应用程序。与其他框架相比,Avalonia 具有强大的跨平台能力和灵活的界面设计。} }()Avalonia 的特点和优势跨平台性:Avalonia 可以在 Windows、Linux、macOS 等多个平台上运行,开发者可以编写一套代码,然后在不同的操作系统上运行相同的应用程序。

仰望星空的博客 1万+

hive解决数据倾斜问题_数据倾斜原因和解决方法

数据分布正常的数据分布理论上都是倾斜的,就是我们所说的20-80原理:80%的财富集中在20%的人手中, 80%的用户只使用20%的功能 , 20%的用户贡献了80%的访问量 , 不同的数据字段可能的数据倾斜一般有两种情况:一种是唯一值非常少,极少数值有非常多的记录值(唯一值少于几千)一种是唯一值比较多,这个字段的某些值有远远多于其他值的记录数,但是它的占比也小于百分之一或千分之一数据倾斜数据倾斜...

weixin_42131316的博客 816

手把手教你用 Cursor 写一个完整的 Web 应用(含前后端 + 部署)

本文介绍如何利用Cursor AI工具从零开发一个完整的全栈待办事项Web应用。文章针对开发者常见痛点——无法独立完成项目闭环,提供了一套AI驱动的全栈开发范式。通过Vue3+Node.js+MySQL技术栈,全程由Cursor自动生成项目架构、前后端代码、数据库设计,并解决联调、部署等关键问题。重点展示了如何用AI完成:项目规划与架构设计、后端接口开发、前端页面实现、跨域联调、打包优化及云端部署全流程。该方法将传统需要3-5天的开发工作压缩至1小时内完成,产出规范可上线的项目,特别适合想突破"碎

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 637

oledbdataadapter 取不到数据 plsql能取到 date_30分钟掌握 Hive SQL 优化(解决数据倾斜)...

Hive SQL 几乎是每一位互联网分析师的必备技能,相信每一位面试过大厂的童鞋都有被面试官问到 Hive 优化问题的经历。所以掌握扎实的 HQL 基础尤为重要,既能帮分析师在日常工作中“如鱼得水”提高效率,也能在跳槽时获得一份更好的工作 offer。继上一篇 Hive 入门篇 之后,本篇为进阶版的 Hive 优化篇(解决数据倾斜)。说到 SQL 优化,不论任何场景,第一要义都是先从数据找原因,尽...

weixin_39638057的博客 668

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

mapreduce任务优化

当SQL中包含Join/GroupBy/PartitionBy/DistributedBy等操作时,通过对上述操作所用到的列进行统计,通常就能够找到造成数据倾斜的热点key1.过滤掉不符合预期的热点key,例如由于日志信息丢失导致某个字段产生大量空值 2.加入随机因素,打散热点key 3.使用map join解决小表关联大表造成的数据倾斜问题 map join是指将做连接的小表全量数据分发到作业的map端进行join,从而避免reduce task产生数据倾斜; hive.auto.convert.join

草样涂荼 817

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

大数据相关面试题(第一期)

大数据相关面试题每日五问

qq_74907064的博客 1461

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

在用map reduce时候遇到的问题

1.DistributedCacha不能用了: 一开始以为是mapreduce的版本不对或者hadoop的版本跟公司的平台不兼容,后来发现是 公司给禁了。。 解决办法:每个mapper/reducer都读从hdfs上面读一遍文件,缺点显而易见;将文件读好,然后用conf.set() 放在configuration中,缺点:数据量大的话肯定会出问题。 2.排序慢。 需求:需求中的一部...

跳币上山岭的博客 1181

饿了么大数据开发凉经

1)map数量由处理的数据分成的block数量决定default_num = total_size / split_size;2)reduce数量为job.setNumReduceTasks(x)中x 的大小。不设置的话默认为 1。

My Struggle 2717

2020年大数据开发面试题汇总(持续更新)

笔试题汇总 20190422: 在linux里找文件 sql题 mapreduce原理,排序算法 大数据处理积累的经验----例如数据倾斜 高效构建大数据仓库的认识和理解

一行玩python 1万+

第2节 mapreduce深入学习:15、reduce端的join算法的实现

reduce端的join算法: 例子: 商品表数据 product:pidp0001,小米5,1000,2000p0002,锤子T1,1000,3000 订单表数据order:        pid1001,20150710,p0001,21002,20150710,p0002,31002,20150710,p0003,3 mapReduce可以实现sql语句的功能:...

weixin_30622107的博客 76
上一篇: MapReduce 集群程序之本地windows运行
下一篇: Maven安装教程以及Maven思想和Java以及Linux类比
闻香识代码
博客等级 码龄12年 314粉丝 223原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值