Hive的优化,
首先是表的优化:
1.当数据量比较大的时候常用的手段就是拆分表,大表拆小表,分区表,临时表,外部表。
2.尽量小表join大表,要把数据量小的表放在join的左边,先进行缓存,这样减少表join的时候内存的消耗量。
好的模型设计事半功倍。
减少job个数。
自己动手写sql解决数据倾斜问题是个不错的选择。set hive.groupby.skwindata=true;
对小文件进行合并,是行至游戏的提高调度效率的方法,假如我们的作业设置合理的文 件数,对云梯的整体调度效率也会产生积极的影响。
优化时把握整体,单个作业最优不如整体最优。
其次是防止数据倾斜:
数据倾斜产生的原因为分区之后某一个reduce运算的数量比较小,而某一个reduce运行的数据量比较大,造成两个reduce处理的数据不平等。
解决方法:
合理设置map数量
影响map的数量的因素都有哪些?
1.在input文件夹中,每一个文件就是一个map,input文件的数量,input的文件大小在MR任务中一个切片就是一个map任务。
设置切片大小:在hadoop中
FileInputFormat.setMaxInputSplitSize(job,size);
FileInputFormat.setMinInputSplitSize(job,size);
设置reduce个数。
set mapreduce.job.reduces
根据业务自定义分区规则。
可以通过以下参数进行设置:
set hive.exec.parallel=true ; // 开启任务并行执行
设置多少个任务可以同时运行
set hive.exec.parallel.thread.number=8; //默认值为8个任务可以同时运行
严格模式:
为防止一些查询出现不好的影响,例如笛卡尔积。在严格模式下是不能运行的。
默认值为:非严格模式 nonstrict
开启严格模式: strict