- 系统调优
- 避免执行MR
设置hive.fetch.task.conversion = more 简单查询不走mr
设置hive.fetch.task.conversion = none 所有查询都走MR
- 本地模式执行
Hive 在集群上查询时,默认是在集群上 N 台机器上运行, 需要多个机器进行协调运行,这 个方式很好地解决了大数据量的查询问题。但是当 Hive 查询处理的数据量比较小时,其实没有必要启动分布式模式去执行,因为以分布式方式执行就涉及到跨网络传输、多节点协调 等,并且消耗资源。这个时间可以只使用本地模式来执行 mapreduce job,只在一台机器上执行,速度会很快。启动本地模式涉及到三个参数:
-
-
- set hive.exec.mode.local.auto=true; #开启本地mr
- set hive.exec.mode.local.auto.inputbytes.max=50000000; #设置local mr的最大输入数据量,当输入数据量小于这个值时采用local mr的方式,默认为134217728,即128M
- set hive.exec.mode.local.auto.input.files.max=10; #设置local mr的最大输入文件个数,当输入文件个数小于这个值时采用local mr的方式,默认为4
-
- 选择合适的存储格式
创建表时,尽量使用 orc、parquet 这些列式存储格式,因为列式存储的表,每一列的数据在物理上是存储在一起的,Hive查询时会只遍历需要列数
版权声明:本文为believe2017slwx原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。