Hive入门之基础知识(三)之分区与优化的简单介绍

本文介绍了Hive数据分区的重要性,强调合理分区可以提高查询效率,但分区过多可能导致问题。讨论了JVM重用的优缺点,limit语句优化,Join策略,以及并行执行和严格模式等优化手段,最后提到了调整reducer个数对性能的影响。
摘要由CSDN通过智能技术生成

为什么要对数据进行分区

在实际生产中,每天的数据量都是以亿为单位的,如果我们不对数据进行分区,直接对全部数据进行统计,则会大大增加时间开销,浪费大量资源。当我们做了合理分区后,例如按天进行分区,当查找某一天的数据时,Hive不会读取全部文件,只会读取HDFS中该天对应的目录,大大提高了执行效率。

分区是不是越多越好

多数情况下,对数据可以按天进行分区,如果数据量还是太大,可以考虑再按小时进行分区,或者取另一个维度作为分区条件,在此基础上,还可以按分钟,秒进行分区,但是进行过多的分区并不一定会加快查询执
行效率。

使用过多的分区可能导致创建了很多非必须的Hadoop文件和文件夹,一个分区对应着一个包含了多个文件的文件夹。如果对表进行过多分区,又存储了跨度很久的数据,最后就会超出NameNode对系统的管理能力,因为NameNode必须保存文件系统的元数据信息,当小文件过多时,会限制HDFS所能管理的文件总数上限。

另外,MR会将一个job转化为多个task,默认情况下,每个task都是一个新的JVM实例,而JVM的开启和销毁都是需要时间开销的,对于每个小文件产生的task,JVM创建和销毁的开销可能会大于对文件内容本身进行处理的开销。

此外,默认情况下,Hive还会限制动态分区可以创建的最大分区数。

对数据进行分桶

分桶是将数据集分解为更容易管理的若干部分的另一种方法。

以下将创建一个按时间分区,使用user_id作为分桶字段的测试表,us

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值