Hive的优化和压缩

本文介绍了Hive的多种优化策略,包括大表拆小表、SQL语句优化、合理设置Map和Reduce任务数量、开启并行执行、JVM重用等。此外,还讨论了Hive的数据倾斜问题及其解决方案,并详细讲解了Hadoop和Hive的数据压缩,包括压缩的重要性、压缩的可分割性以及如何在MR和Hive中设置压缩选项。最后,对比了不同存储格式如TextFile、Parquet和ORC的压缩效果和查询效率。
摘要由CSDN通过智能技术生成

使用之前的数据库

Hive的优化和压缩

 

执行语句

explain select count(*) from emp;

explain可以帮助我们看到有多少个任务

会出现下面的信息根标签,操作语法树等信息

Hive的优化和压缩

 

根标签

Hive的优化和压缩

 

操作语法树

Hive的优化和压缩

 

之前在做日志分析的时候,创建表的语句,也有很多信息

Hive的优化和压缩

 

依赖,是会构成有向无环图的, 根据有向无环图会按照顺序执行job。这样也会造成执行时间比较长,我们就需要做优化

Hive的优化和压缩

 

优化一:大表拆小表

比如临时表、分区表、外部表。其中分区表:加载的表会更少,会直接加载到某个数据,不需要加载所有数据,提高检索速度。

优化二:sql语句

将复杂的语句,比如子查询简化拆分成多个简单的语句。

join和filter的使用,先过滤再join

优化三:合理设置map和reduce个数

reduce数目:可以通过参数设置,默认是一个

** hive中:set mapreduce.job.reduces=

** mapreduce编码中:job.setNumReduceTasks(tasks);

map的数目: 一个分片就是一个块,一个maptask,不可以通过参数去设置

在源码中有个计算方式,大体是:

** Math.max(minSize, Math.min(maxSize, blockSize));

minSize默认参数值是0M

maxSize默认参数值是256M

blockSize默认参数值128M

可以打开FileInputFormat类中的computeSplitSize的方法

修改块的大小是不可行的,因为集群投入生产,格式化后就不能再修改了,可以通过代码指定

** FileInputFormat.setMaxInputSplitSize(job, size);

** FileInputFormat.setMinInputSplitSize(job, size);

通过split的最大最小值来改变map任务数

优化四:开启并行执行

有多个job之间无依赖关系可以一起执行,充分利用资源,在工作中都会把它打开

hive.exec.parallel

设置同时运行的线程数,根据集群资源设置,默认是8

hive.exec.parallel.thread.number

优化五:jvm重用

mapreduce.job.jvm.numtasks默认是1,运行一个job会启动一个jvm上运行

用完就销毁,可以设置重用,节省资源,可以按照比例调整数目,会影响map任务,shuffer会有小幅度的下降

reduce影响不大,一般可以设置为3或5

还有一个推测执行(不建议使用,了解为主):

比如:运行十个map,十个reduce,等map结束后,等了一段时间后,九个执行reduce完毕,有一个还没结束,分布的数据量都是差不多的。推测执行:mapreduce会再重新开启一个跟这个一模一样的任务,,两个相同的任务完成同一件事,谁先完成,就会把另一个kill。缺点:会消耗更多的资源,一般不建议开启,有可能数据会重复写入,造成异常。

优化六:hive本地模式(了解为主)

hive的本地模式:hive.exec.mode.local.auto默认flase

hive底层运用的是hadoop集群,本地模式不会在集群所有机器上运行,会选择一台作为本地运行,一般处理小数据量级的

速度会很快

限制:job的输入数据不能大于128MB,map的个数不能超过4个,reduce的个数不能超过1个

优化七:

hive数据倾斜:在MR程序中由于某个key值分布不均匀,导致某个reduce运行

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值