文档章节

Hive进阶

jhonephone
 jhonephone
发布于 2017/04/28 17:13
字数 928
阅读 58
收藏 0

Hive表模式设计

理想的分区方案不应该导致产生太多的分区和文件夹目录,而且每个分区下包含文件大小分布均匀。对Hive表进行join操作时,需要考虑连接键值是否是表的唯一键。在按天调度的任务中,中间表尽可能采用按天分区的方案。分区表分桶的优点:因为桶的数量是固定的,所以它没有数据波动;如果两个表都是按照user_id分桶,那么两个表可以执行高效的map-side JOIN。

Hive提供了SerDe[序列化和反序列化]抽象,用于从输入中提取数据、输出数据。通过指定的分隔符将行分解成列,SerDe通常是非常宽松的,如果某行的字段个数比预期的要少,那么缺少的字段将返回null;如果要多,那么多出来的字段将被省略。添加新字段只需要一条alter table add column命令。如果有足够多的行,且具有重复数据的列较多、或者查询通常只会使用到一个字段或者很少的一组字段,使用列式存储[RCFile]会使分析表数据执行的更快。Hive可以无缝地使用很多压缩格式,唯一可信的不使用压缩的理由是产生的数据用于外部系统或者非压缩格式是最兼容的。压缩可以降低I/O提高查询执行速度,但是压缩和解压都会消耗CPU资源,而通常MR任务都是I/O密集型。不过对于CPU密集型任务场景,例如一些机器学习算法,压缩实际上可能会占用宝贵的CPU资源,从而降低性能。

Hive性能调优

Hive调优可能涉及到调整配置参数的值,或者启用/禁用某些特定的特性。使用explain和explain extended分析Hive如何将查询转化成MR任务。limit语句在很多情况下还是需要执行整个查询语句,可以通过设置 hive.limit.optimize.enable=true,开启对数据源进行抽样。Map side JOIN优化中需要清楚哪个表是最大的,并将最大的表放置在JOIN语句的最右边,或者直接使用streamable(table_name)语句指出。如果有一个表足够小,是可以载入内存中的,那么这时HIve可以执行一个map-side JOIN,减少reduce过程。有时候即使某些表不适合载入内存也可以使用mapJOIN,因为减少reduce阶段可能比将不太大的表分发到每个map task中会带来更多的好处。

通过hive.mapred.mode=strict设置Hive进入严格模式,禁止以下3种类型的查询:对于分区表必须在where语句中指定分区字段过滤条件;使用了order by语句的查询必须结合使用limit语句,因为order by执行全局排序时会将所有的结果数据分发到同一个reducer中处理;限制笛卡尔积查询。

Hive按照输入数据量的大小来确定reducer个数,属性hive.exec.reducers.bytes.per.reducer默认值是1GB。默认值通常情况下是比较合适的,但是有些情况下查询的map阶段会产生比实际输入数据量要多得多的数据,这时如果根据map阶段输入数据量来确定reducer个数就显得比较少;同理map阶段也有可能会过滤掉数据集中很大一部分数据这时少量reducer就满足计算需求。

© 著作权归作者所有

上一篇: 工作笔记
下一篇: Hive概要
jhonephone
粉丝 5
博文 19
码字总数 24506
作品 0
合肥
高级程序员
私信 提问
hive利器 自定义UDF+重编译hive

用hive也有一段时间里,不过一直没写过相关到日志,因为主要用hive也无非是create table,upload data,CRUD 这几个过程。后来工作中需要用到一些常用到方法,了解到hive中支持UDF(User Defi...

王二铁
2012/06/28
4.1K
3
Apache Spark 系列技术直播 - Spark SQL进阶与实战

Spark SQL进阶与实战 Spark相关组件介绍 Spark及其依赖组件 Hive Metastore介绍 Spark Thrift Server介绍 表与ETL Spark表基本概念 Spark建表最佳实践 Spark ETL最佳实践 动态分区表示例分析...

开源大数据
2018/12/05
0
0
Hadoop 2.X 从入门到精通系列视频课程套餐

购买大数据Hadoop课程套餐,享八五折优惠!! 套餐地址:http://edu.51cto.com/pack/view/id-806.html 赵强老师博客地址:http://collen7788.blog.51cto.com/ Avro是一个通用的序列化数据结构形...

collen7788
2016/08/07
0
0
大数据学习之路(持续更新中...)

在16年8月份至今,一直在努力学习大数据大数据相关的技术,很想了解众多老司机的学习历程。因为大数据涉及的技术很广需要了解的东西也很多,会让很多新手望而却步。所以,我就在自己学习的过...

青夜之衫
2017/12/05
0
0
零基础学习hadoop到上手工作线路指导(中级篇)

此篇是在零基础学习hadoop到上手工作线路指导(初级篇)的基础,一个继续总结。 五一假期:在写点内容,也算是总结。上面我们会了基本的编程,我们需要对hadoop有一个更深的理解: hadoop分为...

一枚Sir
2014/08/07
138
0

没有更多内容

加载失败,请刷新页面

加载更多

哪些情况下适合使用云服务器?

我们一直在说云服务器价格适中,具备弹性扩展机制,适合部署中小规模的网站或应用。那么云服务器到底适用于哪些情况呢?如果您需要经常原始计算能力,那么使用独立服务器就能满足需求,因为他...

云漫网络Ruan
52分钟前
3
0
Kafka 2.3 Producer (0.9以后版本适用)

kafka0.9版本以后用java重新编写了producer,废除了原来scala编写的版本。 这里直接使用最新2.3版本,0.9以后的版本都适用。 注意引用的包为:org.apache.kafka.clients.producer import ja...

实时计算
今天
3
0
Java 中的 String 有没有长度限制

转载: https://juejin.im/post/5d53653f5188257315539f9a String是Java中很重要的一个数据类型,除了基本数据类型以外,String是被使用的最广泛的了,但是,关于String,其实还是有很多东西...

低至一折起
今天
14
0
OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
昨天
11
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部