1013总结

问题

1.数据倾斜怎么解决?

(1)combiner

Combiner只适用于“小数据集的计算结果可以加快在大数据集之上同样的计算”这样的任务类型,比如求和、取最大、最小

但不适用于Avg求平均,可能会得到错误的结果

(2)局部聚合+全局聚合

第一次map:对于导致数据倾斜的key,加上一个随机前缀

例如,1_a,2_a,3_a...

这样的话,本来相同的key是不是也会被分到多个reducer中进行局部聚合

第二次map:去掉key的随机前缀,进行全局聚合

思路:两次MR,第一次将key随机散列到不同的reducer进行处理,达到负载均衡的目的

第二次再根据去掉key的随机前缀,按照原本的key进行reducer处理

(3)增加reducer数,提高并行度

job.setNumReduceTasks(int);

比如本来a,b,c只有三个reduce,现在将reduce数改为30个,相当于处理a的reducer就多了

 

job.setNumReduceTasks(0);

设置成0,reducer就不输出了,直接将map的结果写在输出文件中

(3)实现自定义分区

Partitioner:按照某种规则(可以自定义)对map输出的数据进行分区操作;将Map的输出划分为多个分区。

默认的是HashPartitioner  job.setPartitionerClass (HashPartitioner.class) ;根据key的hash值与reducer的个数取余

顺序:map => partitioner => reduce

根据数据分布情况,自定义散列函数,将key均匀分配到不同的reducer
 

2.如何保证数据质量?

数据质量的话设置几个指标,一般会有空值率、重复率、然后抽检等方式。

也可以用正则匹配方式校验。

3.多线程和多线程的优缺点,以及区别

多线程:指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务。线程是进程的一个执行单元,是进程内科调度实体。比进程更小的独立运行的基本单位。线程也被称为轻量级进程。

进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位。

多进程优点:

(1)每个进程互相独立,不影响主程序的稳定性,子进程崩溃没关系;

(2)通过增加CPU,就可以容易扩充性能;

(3)可以尽量减少线程加锁/解锁的影响,极大提高性能,就算是线程运行的模块算法效率低也没关系;

(4)每个子进程都有2GB地址空间和相关资源,总体能够达到的性能上限非常大;

多进程缺点:

(1)逻辑控制复杂,要和主程序交互;

(2)需要跨进程边界,如果有大数据量传送,就不太好,适合小数据量传送、密集运算;

(3)多进程调度开销比较大;

多线程优点:

(1)无需跨进程边界;

(2)程序逻辑和控制方式简单; 

(3)所有线程可以直接共享内存和变量等;

(4)线程方式消耗的总资源比进程方式好;

多线程缺点:

(1)每个线程与主程序共用地址空间,受限于2GB地址空间;

(2)线程之间的同步和加锁控制此较麻烦;

(3)一个线程的崩溃可能影响到整个程序的稳定性;

(4)到达一定的线程数程度后,即使再增加CPU也无法提高性能,例如Windows Server 2003,大约是1500个左右的线程数就快到极限了(线程堆栈设定为1M),如果设定线程堆栈为2M, 还达不到1500个线程总数;

(5)线程能够提高的总性能有限,而且线程多了之后,线程本身的调度也是一个麻烦事儿, 需要消耗较多的CPU

区别:

1、多进程占用系统资源较多,多线程占用系统资源较少;
2、每个进程拥有独立且完整的用户空间,每个线程自己只占用少量的栈空间,同时依赖所处进程的资源空间;
3、进程因为其独立性,所以进程间通信需要依赖-一个公共的媒介(文件/内存),同进程下的多个线程公用进程资源,不存在通信这一说,但是要防止线程之间相互竞争资源(互斥/同步) ;
4、多个进程间协同工作主要依赖通信及同步机制,多个线程间协同工作主要依赖斥及同步机制(而且进程与线程同步斥的控制方法完全不同);
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值