Hive数据倾斜之GroupBy

Hive 中分组聚合的常用子句是 Group By;在执行过程中,将 Group By 的字段组合为map的输出key值,利用 MapReduce 的排序,在reduce阶段保存LastKey区分不同的key;如果 Group By 的字段组合出现了数据分布不均匀,就会导致 Hive 数据倾斜;另外 Group By 一般与聚合函数一起使用,比如 SUM() 和 COUNT() 等。

阅读全文

Hive数据倾斜之Join

按照 Kimball 维度模型设计出来的数据表,在开发 ETL 的过程中,不可避免地会使用到多表 Join 关联。在 Join 关联两个表时,每个表 Map 端输出的 key 会带上表别名标识,经过 shuffle 分发到 Reduce 端就有可能会出现数据分布不均匀,从而造成数据倾斜,影响业务的数据质量。然而,相对 count(distinct) 来说,Join 产生数据倾斜的场景会多一些,本文将会介绍几种 Join 典型场景并给出优化实践。

阅读全文

Hive数据倾斜之Distinct

在 Hive 选择 MapReduce 为执行引擎的前提下,由于使用了 distinct,导致在 map 端的 combine 无法合并重复数据;对于这种 count() 全聚合操作时,即使设定了 reduce task 个数,hive 也只会启动一个 reducer。这就造成了所有 map 端传来的数据都在一个 task 中执行,成为了性能瓶颈。

阅读全文

ShuffleError - error in shuffle in fetcher

最近开发的一个 HQL 脚本,扔到集群上跑的时候报 shuffle 阶段出现 OOM 的错误,这个问题之前没有遇到过;于是上网搜了下,发现网友也遇到过类似的问题,详细阅读后再结合 MapReduce 任务的 shuffle 原理,将问题解决的过程记录下来,方便以后查阅。

阅读全文

HQL内存溢出的参数调优

我们在使用 Hive 进行 ETL 开发的过程中,关注更多的是使用 HQL 语言来准确地表达业务逻辑,而很少考虑到 Hive 对 HQL 语句的执行情况。当你辛辛苦苦地码完,将 HQL 语句扔给 Hive 去执行时,就有可能出现各种各样的报错,而其中一种比较常见的错误就是内存溢出(OOM,out of memory),通俗地讲就是内存不够。

阅读全文

Hive自定义函数GenericUDAF

UDAF 是 Hive 中用户自定义的聚合函数,特点是输入多行输出一行,Hive 内置 UDAF 函数包括有 sum() 与 count() 等。UDAF 实现有简单与通用两种方式,简单 UDAF 因为使用 Java 反射导致性能损失,而且有些特性不能使用,已经被弃用了;在本文中我们将关注 Hive 中自定义聚合函数-GenericUDAF,即通用方式。

阅读全文

Hive自定义函数GenericUDTF

之前介绍的 UDF 特点是输入一行输出一行;本文将要介绍的是 UDTF,其特点是输入一行输出多行,而使用的接口是 GenericUDTF,比 UDF 更为复杂。

阅读全文

Hive自定义函数GenericUDF

编写 Apache Hive 用户自定义函数(UDF)有两个不同的接口:一个是非常简单的 UDF,上一篇已经介绍过了;还有一个是 GenericUDF,相对复杂点。两个 API 的区别是:如果函数的参数和返回都是基础数据类型,那么简单 API(UDF)可以胜任;但是,如果你想写一个函数用来操作内嵌数据结构,如 Map、List 和 Set,此时就需要去熟悉复杂 API(GenericUDF)。

阅读全文

Hive自定义函数UDF

Hive 有丰富的内置函数(Built-in Functions),方便数据处理与数据分析等。即便如此,内置函数有时候还是无法满足需求,这时就需要自定义函数(User-Defined Functions , UDF)来扩展 Hive 函数库,实现用户想要的功能。

阅读全文

Java通过JDBC连接Hive

Hive 是大数据技术簇中进行数据仓库应用的基础组件,是其它类似数据仓库应用的对比基准。基础的数据操作可以通过脚本方式以 cli 进行处理;若需要开发应用程序,则需要使用 hive-jdbc 驱动进行连接。

阅读全文