大数据数据仓库技术Hive
文章平均质量分 91
本课程是一个系列基础教程,目的是系统性的讲解大数据数据仓库Hive技术,并辅助实战内容,助力开发者快速入门大数据Hive开发。教程主要技术路线以Hive为导向,分为5部分内容:Hive基础知识、Hive SQL、运维&监控、性能优化、底层引擎&功能集成。
桥路丶
这个作者很懒,什么都没留下…
展开
-
课程介绍&学习指南
课程介绍&学习指南写在前面的话你好,我是李鹏程,高级数据工程师、大数据讲师。这次给大家带来的是《大数据数据仓库技术Hive》课程。2013年被称为大数据元年,随着互联网的快速发展和信息爆炸式增长,带来了数据存储、运算方式的革命。一种全新的,完全依附于分布式架构的技术解决方案,被称为大数据。虽然在分布式架构下,数据存储的延迟会较高,数据处理时的调度耗时也较大;但它也带来了极强的扩展性,而且在海量数据规模下吞吐量极大,处理速度非常快(海量数据规模下,调度时间远远小于处理时间),解决了大数据规模下原创 2021-08-18 05:58:45 · 158 阅读 · 0 评论 -
大数据数据仓库技术
大数据数据仓库技术Hive基本概念诞生背景在已经存在分布式计算引擎MapReduce的情况下,为什么会诞生Hive这样的产品?其实主要还是因为易用性问题。虽然MapReduce提供了分布式开发的能力,但它毕竟是一个通用计算引擎,在特定且相对成熟的垂直场景中,易用性就比较差了。而在传统数据分析中,最常见的还是结构化数据,这个场景有它成熟的分析工具——SQL。数据量达到某个量级之后,单机或MPP数据库无法承受其负载,势必要转向大数据平台;但数据迁移完成后,因为大数据有自己的计算引擎(如Mapreduce原创 2021-08-18 06:00:22 · 852 阅读 · 0 评论 -
环境搭建与基本配置
环境搭建&基本配置环境规划操作系统及组件版本各组件版本如下,学习环境尽量保持一致,避免版本不一致带来的操作问题。CentOSHadoopHiveTezMysql版本7.22.7.72.3.70.9.15.7.28集群规划使用3台虚拟机来进行搭建集群,分别为Node01、Node02、Node03。集群的规划如下:HadoopHive&TezMysqlnode01√node02√√node0原创 2021-08-18 06:03:12 · 189 阅读 · 0 评论 -
表存储格式&数据类型
表存储格式&数据类型Hive表的存储格式Hive支持的表类型,或者称为存储格式有:TextFile、SequenceFile、RCFile、ORC、Parquet、AVRO。TextFile其中TextFile是文本格式的表,它是Hive默认的表结构;在存储时使用行式存储,并且默认不进行压缩,所以TextFile默认是以明文的文本方式进行保存的,但可以手动开启Hive的压缩功能进行数据压缩。但开启压缩后,压缩后的文件在处理时无法进行split,所以并发度并不高;因为一个压缩文件在计算时原创 2021-08-18 06:07:46 · 2040 阅读 · 0 评论 -
SQL DDL:基本操作
SQL DDL基本操作概述&Client启动基本概述Hive DDL根据操作对象的不同可分为:数据库操作、表的基本操作、表的高级操作、函数操作。对数据库的操作包含:对数据库的创建、删除、修改、查看元信息、切换、展示所有数据库。表的基本操作:对表的创建、删除、修改、清空、查看元信息、查看所有表。表的高级操作主要是分区、分桶。函数的操作包含:创建、删除、查看元信息、查看所有函数。客户端启动执行Hive SQL时,可以使用beeline,也可以使用Hive Cli,但前提是启动HiveS原创 2021-08-18 06:08:23 · 189 阅读 · 0 评论 -
SQL DDL:存储格式&压缩
SQL DDL:存储格式&压缩表存储格式的指定内置存储格式Hive创建表时默认使用的格式为TextFile,当然内置的存储格式除了TextFile,还有sequencefile、rcfile、ORC、Parquet、Avro。可以使用stored as inputformat、outputformat为表指定不同的存储格式,首先TextFile存储格式为: STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInp原创 2021-08-18 06:08:54 · 414 阅读 · 0 评论 -
表的高级操作:分区
表的高级操作Hive分区表创建分区表表在存储时,可以进行分区操作,将数据按分区键的列值存储在表目录的子目录中,子目录名=“分区键=键值”。比如创建了一张表psn,它有两个字段name、level,这里对level这列进行分区,那么level就是表的分区键。当前level字段中,存放的值有A、B、C。于是会在表的存放目录下创建level=A,level=B,level=C这3个子目录,即以“分区键=键值”的方式命名。之后,便将数据根据level值的不同,分别存放到对应的子目录中。这样将数据切分到不原创 2021-08-18 06:11:09 · 176 阅读 · 0 评论 -
表的高级操作:分桶
表的高级操作:分桶什么是分桶?和分区一样,分桶也是一种通过改变表的存储模式,从而完成对表优化的一种调优方式。但和分区不同的是,分区是将表拆分到不同的子目录中进行存储,而分桶是将表拆分到不同文件中进行存储。那什么是分桶呢?它按分桶键哈希取模的方式,将表中数据随机、均匀地分发到若干桶文件中。比如,对表的ID字段进行分桶,那ID字段被称为分桶键。ID字段存储的数据假设是1-10,执行分桶操作时,需要确定要分几个桶,这里定为3个;那么便会对分桶键中的值,按照桶的数量进行哈希取模,这里即对桶数3进行取余。原创 2021-08-18 06:11:57 · 1253 阅读 · 0 评论 -
表的高级操作:倾斜表&事务表
表的高级操作:倾斜表&事务表Hive倾斜表(Skewed Tables)什么是倾斜表?对于一列或多列中出现倾斜值的表,可以创建倾斜表(Skewed Tables)来提升性能。比如,表中的key字段所包含的数据中,有50%为字符串”1“,那么这种就属于明显的倾斜现象;于是在对key字段进行处理时,倾斜数据会消耗较多的时间。此时可以创建Skewed Tables,对倾斜数据在元数据中进行标注,从而优化查询和join性能。例如,创建倾斜表skewed_single,包含两个字段key、value原创 2021-08-18 06:12:27 · 781 阅读 · 0 评论 -
SQL DQL:数据查询
SQL DQL:数据查询Select操作类型使用Select进行查询时,根据查询需求不同,可以分为过滤、排序、分桶与聚合、连接,这4类型查询操作。过滤操作包含:Where、Case When Then、Having关键词;排序是Order By、Sort By;分桶与聚合为:Distribute By、Cluster By、Group By;连接操作:Join。Select语句的详细语法为:SELECT [ALL | DISTINCT] <select_expression>, <原创 2021-08-18 06:13:01 · 178 阅读 · 0 评论 -
Java开发环境准备
Java开发环境准备为了之后Hive用户自定义函数(UDF)的学习,首先需要配置下Java环境,然后安装IDE工具。语言环境安装首先是Java语言环境的安装。安装流程Windows环境和Linux环境的安装步骤不同。对于Windows环境,步骤如下:1. JDK1.8下载安装2. 配置环境变量3. 验证是否安装成功但现在windows版的JDK安装好后,自动会配置环境变量,所以可以省略第2步。对于Linux环境,步骤如下:1. JDK1.8下载、解压2. 配置环境变量3原创 2021-08-18 06:15:23 · 150 阅读 · 0 评论 -
用户自定义函数UDF
SQL DDL:用户自定义函数UDF什么是UDF?Hive支持的函数除了内置函数,允许编写用户自定义函数(User Define Function)来扩充函数的功能。用户自定义函数需要使用Java语言进行编写,完成的UDF可以打包成Jar加载到Hive中使用。UDF根据功能不同,可以分为UDF、UDAF、UDTF。UDF对每一行数据进行处理,输出相同行数的结果,是一对一的处理方式,比如将每一行字符串转换为大写形式。UDAF(用户自定义聚合函数),对多行进行处理,输出单个结果,是一对多的处理方式。原创 2021-08-18 06:15:58 · 1994 阅读 · 0 评论 -
用户自定义函数UDAF
SQL DDL:用户自定义函数UDAFUDAF的创建与实现Hive UDAF有两种实现方式,可以继承UDAF或者AbstractGenericUDAFResolver类,也可以实现GenericUDAFResolver2接口。其中直接继承UDAF类,功能实现较为简单,但在运行时使用Hive反射机制,导致性能有损失。在较新版本中org.apache.hadoop.hive.ql.exec.UDAF类已经废弃,但因为其实现方便,在很多开发者中较为流行。通过AbstractGenericUDAFReso原创 2021-08-18 06:17:41 · 339 阅读 · 0 评论 -
用户自定义函数UDTF
SQL DDL:用户自定义函数UDTFUDTF开发要点Hive UDTF只有一种实现方式,需要继承org.apache.hadoop.hive.ql.udf.generic.GenericUDTF类,并重写initialize, process, close三个方法。这三个方法的具体描述为:接口方法返回类型描述initializeStructObjectInspector初始化,一般用于检查参数个数和类型,初始化解析器,定义返回值类型processvoid实现具体原创 2021-08-18 06:18:12 · 219 阅读 · 0 评论 -
常见内置函数
常见内置函数Hive支持的函数有:普通内置函数、内置聚合函数(UDAF)、内置表生成函数(UDTF)。接下来,会对这些函数进行讲解。可以使用SQL命令查看支持的所有函数。SHOW FUNCTIONS;使用DESC命令可以查看函数的具体描述信息。DESC FUNCTION EXTENDED concat;普通内置函数普通内置函数,在对数据处理时,进行一对一的数据转换。对每一行数据处理后,生成新的一行数据。普通内置函数包含:数学运算函数、集合函数、类型转换函数、日期函数、条件函数、字符串函数原创 2021-08-18 06:19:39 · 198 阅读 · 0 评论 -
Hive窗口函数
窗口函数什么是窗口函数?Hive的窗口函数over( ),可以更加灵活的对一定范围内的数据进行操作和分析。它和Group By不同,Group By对分组范围内的数据进行聚合统计,得到当前分组的一条结果,而窗口函数则是对每条数据进行处理时,都会展开一个窗口范围,分析后(聚合、筛选)得到一条对应结果。所以Group By结果数等于分组数,而窗口函数结果数等于数据总数。如图所示,对省份进行Group By操作,每个省份下会有多条记录,然后对当前省份分组下的薪水做求和操作,得到的是3条结果。而对相同原创 2021-08-18 06:20:29 · 526 阅读 · 0 评论 -
SQL DML:数据导入&导出
SQL DML:数据导入&导出数据导入数据预处理将文件导入到Hive中,需要文件编码格式为UTF-8,\n为换行符,否则就需要进行预处理。处理过程分为两部分:编码格式、换行符。编码格式处理对于中文字符,如果是ASCii码,或者其它编码,则在Hive表中无法正确显示。首先可以使用file命令提前查看文件编码类型和换行符情况。file $filename如果编码不是UTF-8,则需要进行编码转换。转换方式可以在建表前,提前对文件进行转码处理;也可以不对文件进行处理,在表中指定文件编码格原创 2021-08-18 06:24:46 · 190 阅读 · 0 评论 -
运维与监控
运维与监控Hive配置配置方式Hive可以通过三种方式进行参数配置,但它们的作用范围不同。set命令配置方式,可以在CLI或beeline客户端中直接使用set命令进行配置,仅在当前Session有效。 --配置Hive临时缓存目录 set hive.exec.scratchdir=/tmp/mydir; --查看某个配置项 set hive.exec.scratchdir; --查看所有配置项 set;hiveconf配置方式,在CLI或hivese原创 2021-08-18 06:25:37 · 199 阅读 · 0 评论 -
Hive权限管控
权限管控基本概述Hive可以通过四种方式配置用户权限。在元数据服务中基于存储的授权:这种方式直接对存储在HDFS上的文件、MetaStore中的元数据进行权限控制,但粒度较粗。HiveServer2中基于标准SQL的授权:这种授权方式,兼容标准SQL,授权粒度较细,在SQL执行时可以对权限有一个精准的把控。基于Apache Ranger & Sentry的组件授权:需要依赖第三方组件实现。基于旧版模式的授权:与SQL授权相似,但并不完善,访问控制不完整,有漏洞尚未解决。一般而言,会原创 2021-08-18 06:26:22 · 652 阅读 · 0 评论 -
Hive性能优化
性能优化作业调优严格模式Hive在执行SQL命令时,可以设置严格模式,防止用户执行一些对性能影响很大的查询。set hive.mapred.mode=strict;在Hive 2.x之前默认为nonstrict,之后默认是strict。严格模式禁止对分区表进行全表扫描,查询时在where语句中必须包含分区字段限制范围。对使用了Order By的查询,必须使用limit语句限制数据量,防止单任务运行时间过长。严格模式下,会限制笛卡尔积的查询。在企业,可以进行灵活设置,但严格模式的开启,可能会原创 2021-08-18 06:27:22 · 279 阅读 · 0 评论 -
执行&查询引擎
执行&查询引擎Hive On Spark基本概述Hive支持使用Spark作为底层执行引擎,以获得比MapReduce更快的处理性能。set hive.execution.engine=spark;但要注意的是,Hive与Spark整合时,只有特定的Spark版本做过兼容度测试。Hive 版本Spark 版本master2.3.03.0.x2.3.02.3.x2.0.02.2.x1.6.02.1.x1.6.02.0.x1原创 2021-08-18 06:27:53 · 151 阅读 · 0 评论 -
功能扩展&集成
功能扩展&集成HPL/SQL基本概述HPL/SQL是一个帮助Hive、Spark SQL、Impala、其它SQL-On-Hadoop实现PL/SQL支持的开源工具。它兼容Oracle PL/SQL, ANSI/ISO标准的存储过程(IBM DB2, MySQL, Teradata等), PostgreSQL PL/pgSQL (Netezza), Transact-SQL (Microsoft SQL Server、Sybase) 语法。使现有的SQL业务,可以更好的迁移到Hadoop中。原创 2021-08-18 06:28:24 · 164 阅读 · 0 评论 -
课程总结&结束语
课程总结先聊聊学习首先,恭喜大家完成Hive专栏的学习,能看到这里实属不易。这个专栏写了很长时间,是我所有专栏中持续时间最长的,因为Hive中有很多功能网络上的资料并不完整,官网也存在很多纰漏,所以花费了很多精力与时间。专栏内容上,基本已经覆盖了Hive大部分功能和内容,其它一些功能细节,可以到官网文档中一探究竟。希望这个专栏,可以让大家减少学习的梯度,真正意义上让大家扎实基础,且带一些进阶成分。Hive中遇到的很多问题已经帮大家验证过,并且整个专栏最终Review也持续了一周的时间,流程和代码都可以原创 2021-08-18 06:29:16 · 552 阅读 · 0 评论