1.fetch抓取 hive.fetch.task.conversion=more 在某些情况下不必要使用MR计算。 hive默认是minimal,该属性修改为more以后,在全局查找、字段查找、limit查找等都不走mapreduce。
2.本地模式
hive在进行集群作业时多台机器上协调运行,解决了大数据量查询的问题。但当数据量比较小时,没必要使用分布式查询,可以使用本地模式来执行mr job,只在单台机器上执行效率高很多。
set hive.exec.mode.local.auto=true 是自动判断是否打开集群模式的开关,但是打开这个参数并不能保证启动本地模式,要当 map 任务数不超过
hive.exec.mode.local.auto.input.files.max 的个数并且 map 输入文件大小不超过hive.exec.mode.local.auto.inputbytes.max 所指定的大小时,才能启动本地模式。
hive.exec.mode.local.auto.input.files.max=500000;设置local mr处理的最大数据量,当小于此值时,采用本地mr处理。
hive.exec.mode.local.auto.inputbytes.max=10;设置local mr的最大输入文件个数,当输入文件小于此值时,采用本地mr处理。
3.压缩存储
在进行hive建表时,尽量采用parquet,orc等列式存储格式,因为列式存储的表,列值在物理上是存储在一起的,hive查询时只需要遍历列数据,从而大大减少了处理的数据量。
hive操作最终要转为mapreducer计算,mr的瓶颈往往在于网络io和磁盘io,要解决性能问题,最主要是减少计算的数据