3. Hive分布式数据仓库华为HCIA-BigData
Posted Mengo_x
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3. Hive分布式数据仓库华为HCIA-BigData相关的知识,希望对你有一定的参考价值。
文章目录
3.1 导读
能够通过写SQL语句就可以进行大数据的统计分析?
通过HQL(类似SQL)的语句可以实现
Hive中写HQL语句最终转换成了什么程序?
MapReduce
Hive提供了哪些客户端接口供用户使用?
Hive CLI(Hive Command Line,Hive命令行),客户端可以直接在命令行模式下进行操作。
HWI(Hive Web Interface,Hive Web接口),Hive提供了更直观的Web界面。
Hiveserver,Hive提供了Thrift服务,Thrift客户端目前支持C++/Java/php/Python/Ruby。
3.2 Hive概述
Apache Hive是基于Hadoop的数据仓库软件,可以查询和管理PB级别的分布式数据。数据仓库软件使用SQL读取、写入和管理分布式存储中的大型数据集。可以将表结构投影到已经存储的数据上。提供了命令行工具和DBC驱动程序以将用户连接到Hive。
1. Hive特性与应用场景:
- 灵活方便的ETL (extract/transform/load)。
- 支持Tez, Spark等多种计算引擎。
- 可直接访问HDFS文件以及HBase。
- 易用易编程。
- Hive 构建在基于静态批处理的Hadoop 之上,Hadoop 通常都有较高的延迟并且在作业提交和调度的时候需要大量的开销。
- Hive 并不能够在大规模数据集上实现低延迟快速的查询,例如,Hive 在几百MB 的数据集上执行查询一般有分钟级的时间延迟。因此,Hive 并不适合那些需要低延迟的应用,例如联机事务处理(OLTP)。
- Hive 并非为联机事务处理而设计,Hive 并不提供实时的查询和基于行级的数据更新操作。 Hive 的最佳使用场合是大数据集的批处理作业,例如,网络日志分析。
2. Hive 与传统数据仓库比较
3. Hive 的优点
- HiveServer Hive:对外提供SQL服务的主要进程。
- MetaStore Hive:提供元数据信息的进程,可供HiveServer,SparkSQL,Oozie等组件调用。
- Beeline hive:的命令行客户端。
- JDBC java:统一数据库接口。
- Thrift:一种序列化、通信协议。
- ODBC:基于C/C++的数据库标准接口。
Thrift是一种接口描述语言和二进制通讯协议,它被用来定义和创建跨语言的服务。它被当作一个远程过程调用(RPC)框架来使用,是由Facebook为“大规模跨语言服务开发”而开发的。
3.3 Hive的架构与功能
1. Hive的架构
- MetaStore : 存储表、列和Partition等元数据,通常采用mysql存储。
- Driver : 对上层提交的HQL编译,优化执行序列并执行。管理HiveQL执行的生命周期,并贯穿Hive任务整个执行期间。
- Compiler : 编译HiveQL并将其转化为一系列相互依赖的Map/Reduce任务。
- Optimizer : 优化器,分为逻辑优化器和物理优化器,分别对HiveQL生成的执行计划和 MapReduce任务进行优化。
- Executor : 按照任务的依赖关系分别执行Map/Reduce任务。
- ThriftServer : 提供thrift接口,作为JDBC和ODBC的服务端,并将Hive和其他应用程序集成起来。
- Clients : 包含命令行接口Beeline 和JDBC/ODBC 接口,为用户访问提供接口。
- Hive的语句最终在Tez、MapReduce、Spark上执行
2. Hive 运行流程
3. Hive 数据存储模型
- 数据库:创建表时如果不指定数据库,则默认为default数据库。
- 表:物理概念,实际对应HDFS上的一个目录。
- 分区:对应所在表所在目录下的一个子目录。
- 桶:对应表或分区所在路径的一个文件。
- 倾斜数据:数据集中于个别字段值的场景,比如按照城市分区时,80%的数据都来自某个 大城市。
- 正常数据:不存在倾斜的数据。
分区与分桶
对于每一个表或者是分区,Hive可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分。
- 分区:数据表可以按照某个字段的值划分分区。
- 每个分区是一个目录。
- 分区数量不固定。
- 分区下可再有分区或者桶。
- 桶:数据可以根据桶的方式将不同数据放入不同的桶中。
- 每个桶是一个文件。
- 建表时指定桶个数,桶内可排序。
- 数据按照某个字段的值Hash后放入某个桶中。
- 当表格数据量较大时,可对表格进行分区处理(Partition),便于局部数据的查询操作,如按时间分区、按地域分区,将具有相同性质的数据存储到同一磁盘块上,从而加快查询效率。
- Hive是针对某一列进行分桶。Hive采用对列值哈希,然后除以桶的个数求余的方式决定该条记录存放在哪个桶中。分桶的好处是可以获得更高的查询处理效率,使取样更高效。
托管表与外部表
Hive可以创建托管表和外部表:
- Hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所 在的路径, 不对数据的位置做任何改变。(外部表为指针)
- 在删除表的时候,内部表的元数据和数据会被一起删除, 而外部表只删除元数据,不删除数据。这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。
- 如果所有处理都由Hive完成,建议使用托管表。
- 如果要用Hive和其它工具来处理同一个数据集,建议使用外部表。
4. Hive 支持的函数
Hive内置函数:
- 数学函数:如四舍五入round( )、向下取整floor( )、绝对值abs( )、随机函数rand( ) 等
- 日期函数:如返回日期to-date( )、返回月month( )、返回天day( ) 等
- 字符串函数:如trim( )、length( )、substr( ) 等
如果内置函数不能满足用户需求时,Hive可支持自定义函数。
3.4 Hive 基本操作
1. 运行Hive服务
2. Hive SQL
- DDL - 数据定义语言
- 建表、修改表、删表、分区、数据类型。
- DML - 数据管理语言
- 数据导入、数据导出。
- DQL - 数据查询语言
- 简单查询。
- 复杂查询Group by、Order by、Join等。
DDL
DDL即数据定义语言,DDL操作都是对元数据的操作。主要包含如下操作:
- Create/Drop/Alter Database;
- Create/Drop/Truncate Table;
- Alter Table/Partition/Column;
- Create/Drop/Alter View;
- Create/Drop Index;
- Create/Drop Function;
- Show;
- Describe。
DML
DQL
3.5 课后习题
思考题:
-
Hive的使用场景有哪些?
数据挖掘(用户行为分析,兴趣分析,区域展示)
数据汇总(每天/每周用户点击数,点击排行)
非实时分析(日志分析,统计分析)
-
以下关于Hive SQL基本操作描述正确的是?
A. 创建外部表使用external关键字,创建普通表需要指定internal关键字
创建普通表不需要指定internal关键字
B. 创建外部表必须要指定location信息
不是必须的
C. 加载数据到Hive时源数据必须是HDFS的一个路径
可以是本地也可以是HDFS加local是从本地复制过去,不加local是从HDFS上剪切过去
D. 创建表时可以指定列分隔符
- √
以上是关于3. Hive分布式数据仓库华为HCIA-BigData的主要内容,如果未能解决你的问题,请参考以下文章