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 课后习题

思考题:

  1. Hive的使用场景有哪些?

    数据挖掘(用户行为分析,兴趣分析,区域展示)

    数据汇总(每天/每周用户点击数,点击排行)

    非实时分析(日志分析,统计分析)

  2. 以下关于Hive SQL基本操作描述正确的是?

    A. 创建外部表使用external关键字,创建普通表需要指定internal关键字

    创建普通表不需要指定internal关键字

    B. 创建外部表必须要指定location信息

    不是必须的

    C. 加载数据到Hive时源数据必须是HDFS的一个路径

    可以是本地也可以是HDFS加local是从本地复制过去,不加local是从HDFS上剪切过去

    D. 创建表时可以指定列分隔符

以上是关于3. Hive分布式数据仓库华为HCIA-BigData的主要内容,如果未能解决你的问题,请参考以下文章

数据湖:分布式容错数据仓库Hive

数据湖:分布式容错数据仓库Hive

分布式数据仓库-Hive

一个数据仓库时代开始--Hive

HIVE---基于Hadoop的数据仓库工具讲解

华为发布新一代企业级分布式数据仓库FusionInsight LibrA