大数据面试(Hive优化)

Hive优化

  1. MapJoin
    如果不指定MapJoin或者不符合MapJoin的条件,那么Hive解析器会将Join操作转换成Common Join,即:在Reduce阶段完成Join,容易发生数据倾斜,可以用MapReduce把小表全部加载到内存,在map端进行join,避免reduce处理
  2. 行列过滤
    列处理:在select中,只拿需要的列,如果有,尽量使用分区过滤,少用select *
    行处理:在分区剪裁中,当使用外关联时,如果将副表的过滤条件写在where后面,那么就会先全表关联,之后再过滤
  3. 采用分桶技术
  4. 采用分区技术
  5. 设置合理的Map数
    (1)通常情况下,作业会通过input的目录产生一个或多个map任务
    主要的决定因素有:input的文件总个数,input的文件大小,集群设置的文件快大小
    (2)是不是map数越多越好?
    不是。如果一个任务有很多小文件(远远小于块大小128MB),则每个小文件也会被当作一个块,用一个map任务来完成,而一个map任务启动和初始化的时间远远大于逻辑处理的时间,就会造成很大的资源浪费,而且,同时可执行的map数是有限的。
    (3)是不是保证每个map处理接近128MB的文件块,就可以放心了?
    不一定。比如有一个127MB的文件,正常会用一个map取完成,但这个文件只有一个或者两个小字段,却有几千万的记录,如果map处理的逻辑比较复杂,用一个map任务去做,肯定也比较耗时。
    问题2、3的解决方法:减少map数和增加map数
  6. 小文件进行合并
    在map执行前合并小文件,减少Map数:CombineHiveInputFormat具有对小文件进行合并的功能(系统默认的格式)。HiveInputFormat没有对小文件合并的功能。
  7. 合理设置Reduce数
    Reduce个数是不是越多越好?
    (1)过多的启动和初始化Reduce也会消耗时间和资源
    (2)另外,有多少个Reduce,就会有多少个输出文件,如果生成了很多个小文件,那么如果这些小文件作为下一任务的输入,则也会出现小文件过多的问题。
    设置Reduce个数的原则:处理大数据量利用合适的Reduce数;使单个Reduce任务处理数据量大小要合适。
  8. 常用参数
//输出合并小文件
SET   hive.merge.mapfiles=true;//默认true,在map-only任务结束时合并小文件
SET  hive.merge.mapredfiles = true; //默认false,在map-reduce任务结束时合并小文件
SET	 hive.merge.size.per.task = 268435456; // 默认256M
SET   hive.merge.smallfiles.avgsize = 16777216; //当输出文件的平均大小小于该值时,
									//启动一个独立的map-reduce任务进行文件merge

9.Hive推测执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值