大数据学习

Hive数据仓库

2020-03-03  本文已影响0人  TZX_0710

Hive是一个构建在Hadoop之上的数据仓库,它可以将结构化的数据文件映射成表,并提供类SQL查询功能,用户查询的SQL语句会被转化为MapReduce作业,然后提交到Hadoop上云运行。

  • 特点:
    简单、容易上手,精通sql编程的人而已很好的进行大数据分析
    灵活性高,可以自定义用户函数和存储格式。
    为超大的数据集设计的计算和存储能力,集群扩展容易
    统一的元数据管理,可与presto/impala/sparksql等共享数据
    执行延迟高,不适合做数据的实时处理,但适合做海量数据的离线处理

Hive的体系结构


1.command-line & thrift/JDBC
command-line shell :通过hive命令行方式操作数据
通过thrift协议的按照标准的jdbc的方式操作数据

  1. Metastore
    在Hive中,表名、表结构、字段名、字段类型、表的分隔符等统一被成为元数据。所有的元数据默认存储在Hive内置的derby数据库中。但由于derby只能有一个实例,也就是说不能有多个命令行客户端同时访问,所以在实际生产环境中通常使用Mysql代替derby
    Hive进行的是统一的元数据管理,就是说在Hive上创建了一张表,然后在sparksql、presto、impala中都可以直接使用,它们会在MetaStore中获取统一的元数据信息,同样的在sparksql等创建一张表,Hive也可以直接使用。
  2. HQL的执行流程
    Hive在执行一条HQL的时候,会经过以下步骤
    (1)语法解析:Antlr定义SQL的语法细则,完成SQL词法,语法解析,将SQL转换为抽象树AST Tree
    (2) 语义解析:遍历AST Tree,抽象出查询的基本组成单元QueryBlock
    (3) 生成逻辑执行计划:遍历QueryBlock,翻译为执行操作树OperatorTree。
    (4) 优化逻辑执行计划: 逻辑层优化器进行OperatorTree变换,合并不必要的ReduceSinkOperator,减少shuffle数据量。
    (5) 生成物理执行计划:遍历OperatorTree,翻译为Mapreduce任务
    (6) 优化物理执行计划: 物理层优化器进行MapReduce任务的变换,生成最终的执行计划。

Hive的基本数据类型

  1. Integers 整型 TINYINT-SMALLINT-INT-BIGINT
  2. Boolean 布尔型 BOOLEAN=TRUE/FALSE
  3. Floating point numbers(浮点型)FLOAT-DOUBLE
  4. Fixed point numbers (定点数) DECIMAL
  5. String types(字符串)STRING-VARCHAR-CHAR
  6. Date and Time types(日期时间类型)TIMESTAMP-DATE-TIMESTAMP WITH LOCAL TIME ZONE
    TIMESTAMP WITH LOCAL TIME ZONE:用户提交时间给数据库时,会被转换成数据库所在的时区来保存。查询时则按照查询客户端的不同,转换为查询客户端所在时区的时间。 TIMESTAMP :提交什么时间就保存什么时间,查询时也不做任何转换。
  7. Binary types (二进制类型)BINARY

隐式转换

Hive中基本数据按照以下类型进行转换,子类型到祖先类型允许隐式转换。


复杂类型

struct 类似于对象,是字段的集合,字段的类型可以不同,可以使用名称.字段名方式进行访问
map键值对的集合,可以使用名称[key]的方式访问对应的值
Array 数组是一组具有相同类型和名称变量的集合可以使用名称[index]访问对应的值

内容格式

Hive 默认使用了几个平时很少出现的字符,这些字符一般不会作为内容出现在文件中。Hive 默认的行和列分隔符如下表所示
\n 对于文本文件来说,每行是一条记录,所以可以使用换行符来分割记录
^A (Ctrl+A) 分割字段 (列),在 CREATE TABLE 语句中也可以使用八进制编码 \001 来表示
^B 用于分割 ARRAY 或者 STRUCT 中的元素,或者用于 MAP 中键值对之间的分割,
在 CREATE TABLE 语句中也可以使用八进制编码 \002 表示
^C 用于 MAP 中键和值之间的分割,在 CREATE TABLE 语句中也可以使用八进制编码 \003 表示

存储格式

Hive会在HDFS为每个数据库上创建一个目录,数据库中的表是该目录的子目录,表中的数据会以文件的形式存储在对应的目录下。Hive支持以下几种文件存储格式

  1. TextFile 存储为纯文本文件。 这是 Hive 默认的文件存储格式。这种存储方式数据不做压缩,磁盘开销大,数据解析开销大。
  2. SequenceFile Hadoop API提供的一种二进制文件,它将数据以key,value形式序列化到文件中。
  3. RCFILE 文件格式是 FaceBook 开源的一种 Hive 的文件存储格式,首先将表分为几个行组,对每个行组内的数据按列存储,每一列的数据都是分开存储
  4. ORCFILE ORC 是在一定程度上扩展了 RCFile,是对 RCFile 的优化。
  5. Avro 是一个数据序列化系统,设计用于支持大批量数据交换的应用。
  6. Parquet 是基于 Dremel 的数据模型和算法实现的,面向分析型业务的列式存储格式。

指定存储格式

1.通常在创建表的时候使用STORED AS参数指定

CREATE TABLE page_view(viewTime INT, userid BIGINT)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\001'
 COLLECTION ITEMS TERMINATED BY '\002'
 MAP KEYS TERMINATED BY '\003'
STORED AS SEQUENCEFILE;    --TEXTFILE  SEQUENCE FILE /OCRFILE /OCRFILE ORC/AVRO/PARQUET

内部表和外部表

内部表又叫做管理表,创建表时不做任何指定,默认创建的就是内部表。想要创建外部表,则需要使用External进行修饰。
内部表数据存储的位置由: hive.metastore.warehouse.dir 参数指定,默认情况下表的数据存储在 HDFS 的 /user/hive/warehouse/数据库名.db/表名/ 目录下
内部表导入数据:在导入数据到内部表,内部表将数据移动到自己的数据仓库目录下,数据的生命周期由 Hive 来进行管理。
内部表删除表: 删除元数据(metadata)和文件
外部表存储位置由创建表时Location参数指定
外部表不会移动到自己的仓库目录下,只是元数据中存储了位置
外部表删除表:只删除元数据

上一篇下一篇

猜你喜欢

热点阅读