加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

大数据开发之路:hive篇,你看了吗?

发布时间:2019-05-17 06:36:59 所属栏目:教程 来源:金灿灿
导读:引语 大数据开拓之路漫漫其修远兮,吾将上下而求索。许多入门大数据的小搭档,也许第一个打仗到的,就是一只可爱的小象,也就是我们的大数据规模的数据客栈器材hive。 这只小象给我们提供了利便类SQL查询说话HQL来哄骗数据,使得我们一开始不消编写伟大的

功效如下图所示:

大数据开拓之路:hive篇,你看了吗?

此时,假如要去top1的数据,只需添加rank为1的前提即可。和row_number成果和用法相同的函数尚有rank()和dense_rank(),独一的区别在返回的排序rank值有渺小区别,此处不再赘述。

Hive进阶

数据倾斜

在我们数据洗濯进程中,常常会呈现一种征象,漫衍式使命一样平常会分成多个小使命task,可是呢,有些task处理赏罚的很快,有些task就很慢,偶然辰乃至会卡死导致整个使命失败,这种征象就是恶名远扬的数据倾斜。之以是导致数据倾斜,大部门是join、去重统计(count distinct)可能group by操纵中的key漫衍不匀称。拿最常见的hive查询引擎mapreduce来说,根基就是shuffle阶段,有些reduce使命获取到的key数据量异常多,导致处理赏罚很迟钝。

为了停止数据倾斜,一样平常从两种偏向去办理:

1.调解hive参数

我们可以配置hive.map.aggr和hive.groupby.skewindata两个参数为true,此时hive会天生两个job使命,第一个job先将key举办随机化处理赏罚,第二个job在举办真正的shuffle key。如下贱程声名图:

大数据开拓之路:hive篇,你看了吗?

从上图可以看出,因为多次在map端聚合,使得最终shuffle时的数据量大大镌汰,从而减轻了数据倾斜的水平。

2.优化sql

行使mapJoin:我们常常会有巨细表join的需求,而这也是数据倾斜的多发区。此时我们可以行使mapJoin的方法,从而停止shuffle。详细实现就是把小表在每一个Map使命内存中生涯一份,从而直接在Map就举办join操纵。没了reduce进程,天然也停止了数据倾斜。在hive0.11版本之前,必要表现声明启动该优化操纵,如下示例SQL所示:Select /+ MAPJOIN(small_tab)/ .key,value FROM small_tab JOIN big_tab ON small_tab.key = big_tab.key 而在hive0.11版本之后,hive可以或许自动检测小表,自行举办mapJoin优化。我们可以通过hive.mapjoin.smalltable.filesize参数手动设置小表的阈值(默认值25M)。行使MapJoin有一个弱点在于内存会挥霍,由于每个Map端都有一个副本。以是mapJoin也一样平常只得当巨细表join的环境。

非常值、非凡值手动处理赏罚:许多时辰造成数据倾斜的也许是一些空值可能,字符串导致的。我们可以通过过滤空值可能对空值做随机字符串处理赏罚,由此停止空值的影响。

假如是大表和大表的join发生了数据倾斜,mapJoin这种方法不太吻合,可是在某些场景下,个中一个大表可以被处理赏罚成小表。好比,我们要查询单日访客赏识记录,并必要附加用户信息。这时辰要和用户大表user_info关联,而单日访客记录量user_flow也较量大,并不能直接行使mapjoin的方法。但细心说明,单日访客UV着实并不大,可以先举办简朴去重,转换为小表进而可以行使mapJoin。

详细SQL如下所示:

  1. select /+mapjoin(x)/ from user_flow a left outer join (select /+mapjoin(c)/d. from ( select distinct user_id from user_flow )c join user_info d on c.user_id = d.user_id) x on a.user_id = b.user_id; 

上风和不敷

Hive今朝作为业内行使最为普及的数据客栈器材,天然有着许多利益: 高靠得住、容错性高、扩展性强。

HQL语法和传统SQL相同,且内置大量处理赏罚函数支持的存储名目种类多,兼容性强。用户接口多,支持各类情势的挪用。可是hive也有它自身的一些不敷,好比:

OLTP支持不敷,不支持事宜,今朝只有较量新的版本才可以实现队列级别更新且对名目要求严酷。

因为HDFS特征数据处理赏罚耽误高服从较低。HQL的表达手段和机动性方面有限。基于这些优弱点,hive有它自身善于的规模,好比用作离线数据客栈,批量处理赏罚海量数据。假如要追求及时性可能要高服从处理赏罚小量数据,今朝来看,其他新的技能方案,好比kudu、hbase等或者是更好的选择。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读