MapJoin(默认是开启的)(小表join大表时使用,可以有效提高效率) 内存足够大可以把阈值调大(默认25M以下认为是小表) set hive.mapjoin.smalltable.filesize = ?; MapJoin工作机制:join机制在map阶段完成,把小表全部加载到内存在map端进行join,避免reduce处理。
Group By (1) (默认情况,map阶段同一key数据分发给一个reduce,当一个key数据过大时就会发生数据倾斜) (2) 并不是聚合操作都要在reduce完成,也可以开启map端进行预聚合(combiner)(默认是开启的) (3)在发现有数据倾斜的时候可以打开负载均衡(默认是false) hive.groupby.skewindata = true;(确定存在数据倾斜时打开) 开启后会生出两个MRJob,第一个job中,map的输出结果会随机分布到reduce中,每个reduce做部分聚合,并输出结果;第二个Job再根据预处理的结果按照group by key分布到reduce中,最后完成最终聚合。
count(distinct) 去重统计(尽量不用,用groupby来代替) 先group by 再count,避免oom或者数据倾斜 只有一个reducer在进行count(distinct)的计算
1、CAS底层原理?
自旋锁(cas思想)unsafe类,保证原子性靠的是unsafe类
1.首先可以看到:
atomicInteger.getAndIncrement();getAndIncrement()的底层是 public final int getAndIncrement() {return unsafe.getAndAddInt(this, valueOffset,…
与CountDownLatch相反,CyclicBarrier是做加法
public class CyclicBarrierextends Object一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必…