十大Hive调优技巧.pdf
《十大Hive调优技巧.pdf》由会员分享,可在线阅读,更多相关《十大Hive调优技巧.pdf(8页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、十大 Hive 调优技巧最佳实践 Apache Hive 是建立在 Apache Hadoop 之上的数据仓库软件项目,用于提供数据查询和分析。Hive 是 Hadoop 在 HDFS 上的 SQL 接口,它提供了类似于SQL 的接口来查询存储在与 Hadoop 集成的各种数据库和文件系统中的数据。可以说从事数据开发工作,无论是在平时的工作中,还是在面试中,Hive 具有举足轻重的地位,尤其是 Hive 的性能调优方面,不仅能够在工作中提升效率而且还可以在面试中脱颖而出。在本文中,我将分享十个性能优化技术,全文如下。1.多次 INSERT单次扫描表 默认情况下,Hive 会执行多次表扫描。因此
2、,如果要在某张 hive 表中执行多个操作,建议使用一次扫描并使用该扫描来执行多个操作。比如将一张表的数据多次查询出来装载到另外一张表中。如下面的示例,表my_table 是一个分区表,分区字段为 dt,如果需要在表中查询 2 个特定的分区日期数据,并将记录装载到 2 个不同的表中。INSERT INTO temp_table_20201115 SELECT*FROM my_table WHERE dt=2020-11-15;INSERT INTO temp_table_20201116 SELECT*FROM my_table WHERE dt=2020-11-16;在以上查询中,Hive
3、将扫描表 2 次,为了避免这种情况,我们可以使用下面的方式:FROM my_table INSERT INTO temp_table_20201115 SELECT*WHERE dt=2020-11-15 INSERT INTO temp_table_20201116 SELECT*WHERE dt=2020-11-16 这样可以确保只对 my_table 表执行一次扫描,从而可以大大减少执行的时间和资源。2.分区表 对于一张比较大的表,将其设计成分区表可以提升查询的性能,对于一个特定分区的查询,只会加载对应分区路径的文件数据,因此,当用户使用特定分区列值执行选择查询时,将仅针对该特定分区执行
4、查询,由于将针对较少的数据量进行扫描,所以可以提供更好的性能。值得注意的是,分区字段的选择是影响查询性能的重要因素,尽量避免层级较深的分区,这样会造成太多的子文件夹。现在问题来了,该使用哪些列进行分区呢?一条基本的法则是:选择低基数属性作为“分区键”,比如“地区”或“日期”等。一些常见的分区字段可以是:日期或者时间 比如 year、month、day 或者 hour,当表中存在时间或者日期字段时,可以使用些字段。地理位置 比如国家、省份、城市等 业务逻辑 比如部门、销售区域、客户等等 CREATE TABLE table_name(col1 data_type,col2 data_type)P
5、ARTITIONED BY(partition1 data_type,partition2 data_type,.);3.分桶表 通常,当很难在列上创建分区时,我们会使用分桶,比如某个经常被筛选的字段,如果将其作为分区字段,会造成大量的分区。在Hive 中,会对分桶字段进行哈希,从而提供了中额外的数据结构,进行提升查询效率。与分区表类似,分桶表的组织方式是将 HDFS 上的文件分割成多个文件。分桶可以加快数据采样,也可以提升 join 的性能(join 的字段是分桶字段),因为分桶可以确保某个 key 对应的数据在一个特定的桶内(文件),所以巧妙地选择分桶字段可以大幅度提升 join 的性能。
6、通常情况下,分桶字段可以选择经常用在过滤操作或者 join 操作的字段。我们可以使用 set.hive.enforce.bucketing=true 启用分桶设置。当使用分桶表时,最好将 bucketmapjoin 标志设置为 true,具体配置参数为:SET hive.optimize.bucketmapjoin=true CREATE TABLE table_name PARTITIONED BY(partition1 data_type,partition2 data_type,.)CLUSTERED BY(column_name1,column_name2,)SORTED BY(col
7、umn_name ASC|DESC,)INTO num_buckets BUCKETS;4.对中间数据启用压缩 复杂的 Hive 查询通常会转换为一系列多阶段的 MapReduce 作业,并且这些作业将由 Hive 引擎链接起来以完成整个查询。因此,此处的“中间输出”是指上一个 MapReduce 作业的输出,它将用作下一个 MapReduce 作业的输入数据。压缩可以显著减少中间数据量,从而在内部减少了 Map 和 Reduce 之间的数据传输量。我们可以使用以下属性在中间输出上启用压缩。set press.intermediate=true;set pression.codec=press
8、.SnappyCodec;set pression.type=BLOCK;为了将最终输出到 HDFS 的数据进行压缩,可以使用以下属性:set press.output=true;下面是一些可以使用的压缩编解码器 press.DefaultCodec press.GzipCodec press.BZip2Codec pression.lzo.LzopCodec press.Lz4Codec press.SnappyCodec map 端 join 适用于当一张表很小(可以存在内存中)的情况,即可以将小表加载至内存。Hive 从 0.7 开始支持自动转为 map 端 join,具体配置如下:SE
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Hive 技巧
限制150内