iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >大数据开发中hive有什么用
  • 904
分享到

大数据开发中hive有什么用

2023-06-02 15:06:03 904人浏览 泡泡鱼
摘要

这篇文章给大家分享的是有关大数据开发中Hive有什么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。引语大数据开发之路漫漫其修远兮,吾将上下而求索。很多入门大数据的小伙伴,可能第一个接触到的,就是一只可爱的“小象

这篇文章给大家分享的是有关大数据开发Hive有什么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

引语

大数据开发之路漫漫其修远兮,吾将上下而求索。很多入门大数据的小伙伴,可能第一个接触到的,就是一只可爱的“小象”,也就是我们的大数据领域的数据仓库工具hive。

大数据开发中hive有什么用

这只小象给我们提供了方便类sql查询语言HQL来操纵数据,使得我们一开始不用编写复杂的代码,就可以轻松的探索数据。Hive对于熟悉传统数据库的同学来说,算是很友好的一个入门工具。

对大数据以及人工智能概念都是模糊不清的,该按照什么线路去学习,学完往哪方面发展,想深入了解,想学习的同学欢迎加入大数据学习qq群:458345782,有大量干货(零基础以及进阶的经典实战)分享给大家,让大家了解到目前国内最完整的大数据高端实战实用学习流程体系 。从java和linux入手,其后逐步的深入到hadoop-hive-oozie-WEB-flume-python-HBase-kafka-Scala-spark等相关知识一一分享!

原理

在大数据生态中,hive一般作为数据仓库来使用。什么是数据仓库呢?简单来说就像一个大粮仓,里边堆着各种各样的粮食,比如小麦、玉米、土豆、大米等等。数据仓库里是一个数据集合体,把不同数据源按照一定的形式集合统一起来。 Hive本身是不做数据存储的,它是构建在分布式存储系统hdfs之上,我们平常看到的表数据其实本质上来说还是HDFS的文件。Hive把这些HDFS数据文件,通过元数据规则映射为数据库的表,并且可以提供SQL操作的功能。 Hive总体结构比较简单,下方是整体的hive架构图,我们可以看到,总体有三个组件:用户接口、元数据系统、驱动器。

大数据开发中hive有什么用

用户通过用户接口来输入操作指令。一般接口有三种形式:

CLI端:一般在linux服务器直接输入hive即可进入;

WEB模式:通过命令bin/hive --service hwi启动,默认访问9999端口;

远程模式:一般是JDBC之类的编程接口;

Hive的核心在于驱动器,一般驱动器接收到用户接口传递的一条SQL之后,会进行下面的一系列操作:

驱动器开始进行语法和语义分析

生成逻辑计划并且逻辑优化

生成物理计划

发送计划到执行引擎(常用引擎有mapredue和sprk)执行

结果返回

而元数据系统一般传统数据库来承载,主要记录了包括hive表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。

常用hive语法

了解了hive的基础原理之后呢,我们这里结合工作中一些需求,来介绍下开发同学常用的hive操作。

分组统计

作为一名SQL仔,经常会要去统计一些奇奇怪怪的指标,比如不同年龄段的UV,下单数的小时分布之类的。一般常用的分组就是group by了,然后配合上一些窗口函数, SUM、AVG、MIN、MAX、COUNT等,就可以实现我们很多统计需求了。比如下边的统计时间段的独立用户数,查询结果如下图所示:

大数据开发中hive有什么用

关联查询

有时候我们查询的数据存放在不同的表中,那关联查询就派上用场了。所谓关联查询,一般就是通过两张表相同的字段值关联起来,同时查询两张表的记录。Hive中常用关联分内外关联。

我们先建立两张简单的表tab_a和tab_b,用实例来说明关联机制。表结构和表数据如下图所示:

大数据开发中hive有什么用

内关联一般使用关键字Join或inner join,内关联只返回关联上的结果。

大数据开发中hive有什么用

外关联的形式就比较多样化了,又分为:

左外关联:关键字为left [outer] join,以前边的表为主表,返回记录数和主表记录一致,关联不上的字段为null;

右外关联:关键字为right [outer] join,和左外关联相反,则是以后边的表为主表。

全外关联:full [outer] join,返回两个表的去重之和,关联不上的字段为null。

行列转换

有时候我们会遇到这样的需求,需要把多列的数据平铺到一行上输出。比如查询用户的访问轨迹,这时候有两个函数就起上作用了。还是让我们先来看看效果。

大数据开发中hive有什么用

这两个sql的作用都是把每个用户的点击轨迹拼接暂展示出来,其中collect_set和collect_set能够把列数据合并,转为一行。而两个的唯一区别就是collect_set会进行去重。

上述讲的是行转列,还有些需求,希望我们能把列数据拆分成多行,比如数据结构如下,

Page_id StringAd_id Array<int>

A[1,2,3]

B[3,5,6]

C[2,4,5]

要统计每个广告在所有页面出现的次数,这时候,我们可以先把同一列的数据线拆成多行,hive提供了explode展开函数,具体效果如下图:

大数据开发中hive有什么用

Explode一般配合lateral view使用,把字段内容铺开成虚拟视图。接下来我们再这个基础之上,就可以使用统计函数来进行分析。

大数据开发中hive有什么用

取TopN记录

给数据分组排序再取前几条记录,也是我们较为常见的需求。hive提供了row_number函数,可以对排序值进行编号。举个栗子,要取省份的温度最高的城市,数据如下:

省份城市温度

广东佛山34

广东广州30

江西赣州31

江西南昌28

江西萍乡29

湖南长沙26

湖南衡阳25

我们可以使用row_number()组合group by的形式,来进行组内排序,并且返回顺序值rank。

结果如下图所示:

大数据开发中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数据量十分多,导致处理很缓慢。

为了避免数据倾斜,一般从两种方向去解决:

调整hive参数

我们可以设置hive.map.aggr和hive.groupby.skewindata两个参数为true,此时hive会生成两个job任务,第一个job先将key进行随机化处理,第二个job在进行真正的shuffle key。如下流程说明图:

大数据开发中hive有什么用

从上图可以看出,由于多次在map端聚合,使得最终shuffle时的数据量大大减少,从而减轻了数据倾斜的程度。

优化sql

使用mapJoin:我们经常会有大小表join的需求,而这也是数据倾斜的多发区。此时我们可以使用mapJoin的方式,从而避免shuffle。具体实现就是把小表在每一个Map任务内存中保存一份,从而直接在Map就进行join操作。没了reduce过程,自然也避免了数据倾斜。在hive0.11版本之前,需要显示声明启动该优化操作,如下示例SQL所示:Select   .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如下所示:select * from user_flow a left outer join (select 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等或许是更好的选择。

感谢各位的阅读!关于“大数据开发中hive有什么用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: 大数据开发中hive有什么用

本文链接: https://www.lsjlt.com/news/230448.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 大数据开发中hive有什么用
    这篇文章给大家分享的是有关大数据开发中hive有什么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。引语大数据开发之路漫漫其修远兮,吾将上下而求索。很多入门大数据的小伙伴,可能第一个接触到的,就是一只可爱的“小象...
    99+
    2023-06-02
  • hive函数有什么用
    这篇文章将为大家详细讲解有关hive函数有什么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。首先我们要知道hive到底是做什么的。下面这几段文字很好的描述了hive的特...
    99+
    2024-04-02
  • hive内置函数有什么用
    小编给大家分享一下hive内置函数有什么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!hive内置函数:1、用户自定义函数对数据进行处理;2、用来解决输入一行输...
    99+
    2023-06-06
  • Hive中的元数据存储是什么
    Hive中的元数据存储是一个关系型数据库,它用来存储有关Hive表、分区、列、数据类型和其他元数据信息的数据。这些元数据对于Hive...
    99+
    2024-04-02
  • 数据库中触发器有什么用
    这篇文章主要介绍了数据库中触发器有什么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。触发器有两个稳态,可分别表示二进制数码0和1,无外触发...
    99+
    2024-04-02
  • Python IDE 中有哪些适用于大数据开发的工具?
    在大数据开发中,Python 已经成为了一种广泛使用的编程语言。Python 语言简单易学,且具有强大的数据处理能力,因此在数据科学、机器学习、人工智能等领域广受欢迎。随着数据量的不断增加,Python IDE 中的工具也在不断发展,以满...
    99+
    2023-09-09
    ide 大数据 laravel
  • 微信开发中CloudPay.closeOrder()函数有什么用
    这篇文章主要介绍微信开发中CloudPay.closeOrder()函数有什么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!CloudPay.closeOrder()支持端:云函数 2.0.2关闭订单说明以下情况需...
    99+
    2023-06-26
  • 如何使用Hive进行大数据分析
    使用Hive进行大数据分析通常涉及以下步骤: 安装和配置Hive:首先需要安装Hive,并配置与Hadoop集群的连接。Hive...
    99+
    2024-04-02
  • Java大数据开发Hadoop MapReduce
    目录1 MapRedcue的介绍1.1 MapReduce定义1.2 MapReduce的思想1.3 MapReduce优点1.4 MapReduce的缺点1.5 MapReduce...
    99+
    2023-03-01
    Java Hadoop MapReduce Java大数据Hadoop
  • web开发中.removeClass有什么用
    小编给大家分享一下web开发中.removeClass有什么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!   .removeClass( [className ] )   描述: ...
    99+
    2024-04-02
  • 大数据开发中常见的聚类算法有哪些
    小编给大家分享一下大数据开发中常见的聚类算法有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!· 常见的聚类算法 ·K-Means(K均值)聚类 算法...
    99+
    2023-06-19
  • Java大数据开发Hadoop MapReduce的优缺点是什么
    这篇文章主要介绍了Java大数据开发Hadoop MapReduce的优缺点是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java大数据开发Hadoop MapReduce的优缺点是什...
    99+
    2023-07-05
  • hive数据存储格式是什么
    Hive数据存储格式通常是以文本文件的形式存储,常见的格式包括: 文本文件:数据以文本形式存储,通常使用逗号、制表符或其他分隔符将...
    99+
    2024-04-12
    hive
  • hive中explode函数的用法是什么
    在Hive中,explode函数用于将数组或者map类型的列拆分成多行数据。例如,如果某一列中包含一个数组,使用explode函数可...
    99+
    2024-03-05
    hive
  • Hive的元数据存储是什么
    Hive的元数据存储是一个关系型数据库,通常使用MySQL来存储Hive的元数据信息。这个元数据存储包含了Hive表的元数据信息,如...
    99+
    2024-04-09
    Hive
  • PHP商城开发中的大数据分析
    近年来,随着互联网和移动端的不断发展,电商行业获得了巨大的成功,尤其是在亚洲地区的快速发展。跟随着电商行业的发展,PHP商城开发也越来越成为了一种重要的技术架构。与此同时,随着商业的不断升级,商家越来越需要依赖数据分析来指导决策,这也为PH...
    99+
    2023-05-22
    开发 大数据分析 PHP商城
  • 大数据开发中如何画雷达图
    小编给大家分享一下大数据开发中如何画雷达图,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!雷达图,又被称作为蜘蛛网图、戴布拉图、极区图、网图、星形图、星图等,是一种...
    99+
    2023-06-04
  • 大数据之使用Spark全量抽取MySQL的数据到Hive数据库
    文章目录 前言 一、读题分析 二、使用步骤 1.导入配置文件到pom.xml 2.代码部分 三、重难点分析 总结 前言 本题来源于全国职业技能大赛之大数据技术赛项赛题-离线数据处理-数据抽取(其他暂不透露) 题目:编写S...
    99+
    2023-09-17
    hive spark 大数据 数据库 scala
  • mysql数据怎么导入hive中
    在将MySQL数据导入到Hive中之前,需要确保你已经安装了MySQL和Hive,并且配置了正确的连接信息。以下是将MySQL数据导...
    99+
    2024-05-06
    hive mysql
  • 数据类型在Java大数据开发中的重要性?
    Java是一门非常流行的编程语言,尤其是在大数据开发领域中,Java的应用非常广泛。在Java开发中,数据类型是一个非常重要的概念,因为它直接影响着程序的性能和正确性。本文将介绍数据类型在Java大数据开发中的重要性,并演示一些代码。 一、...
    99+
    2023-07-04
    大数据 ide 数据类型
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作