Hive优化技巧总结:参数设置、Join操作、MapJoin、列裁剪等

4星 · 超过85%的资源 需积分: 50 51 下载量 100 浏览量 更新于2024-09-16 收藏 25KB DOCX 举报
Hive 优化总结 Hive 优化是指在使用 Hive 进行数据处理时,如何提高查询效率和系统性能。下面是 Hive 优化的一些重要知识点: 1. 修改 Hive 配置文件:在 Hive 执行 Join 操作时,如果出现内存溢出,可以修改 Hive 的配置文件 hive-site.xml,增大内存。例如,修改 mapred.child.java.opts-Xmx1024m,可以增大内存到 1024m。 2. 配置默认仓库路径:Hive 默认建表时的路径可以在 hive-site.xml 里配置。例如,hive.metastore.warehouse.dir=value>/user/hive/warehouse 表示将默认仓库路径设置到 /user/hive/warehouse。 3. Join 操作优化:在执行 Join 操作时,尽量把小表放前面,大表放后面。这样可以避免内存溢出错误。 4. 分区表操作优化:对分区表进行操作需要对分区进行过滤(如:ds=$yday)。特别是在 Join 操作的时候,分区过滤需要放到 ON 语句或子查询里面。不能放到 ON 后面的 WHERE 里,这样会扫描所有表,最后才判断分区。 5. Join 操作优化:在 Join 操作中,后面被连续 Join 且同一字段,只会执行一个 MapReduce 操作。例如,SELECT * FROM a LEFT OUTER JOIN b ON a.t=b.t LEFT OUTER JOIN c ON a.t=c.t; 可以优化为 SELECT * FROM a LEFT OUTER JOIN b ON a.t=b.t LEFT OUTER JOIN c ON b.t=c.t;。 6. MapJoin 操作:当一个大表和一个很小的表进行 Join 操作的时候,使用 MapJoin 操作,可以把小表读入内存进行 Join,只需要一个 Map 操作 JOIN 就完成了。例如,select /*+ mapjoin(a) */ a.c1, b.c2, b.c3 from a join b on a.c4=b.c4;。 7. 关闭 Hive 优化:通过设置 hive.merge.mapfiles,可以关闭 Hive 对于扫描表的优化,但有时候会提高效率。默认值为 true。可以视情况设置:只含有 SELECT 的语句或 MapJoin 推荐使用。 8. ALTERTABLE 语句:ALTERTABLE a SET SERDEPROPERTIES('serialization.null.format'=''); 可以使结果表不出现 \N 字符串,而用空串代替。 9. 列裁剪:在读数据的时候,只读取查询中需要用到的列,而忽略其他列。例如,对于查询 SELECT a, b FROM T WHERE e<10; 其中,T 包含 5 个列(a, b, c, d, e),只读取 a, b 两个列。 Hive 优化需要从多方面入手,包括修改配置文件、优化 Join 操作、使用 MapJoin、关闭 Hive 优化等。只有通过合理的优化,才能提高 Hive 的查询效率和系统性能。