自用华为ICT云赛道Big Data第三章知识点-Hive分布式数据仓库

110 阅读3分钟

Hive简介

Hive是基于Hadoop的数据仓库软件,可以查询和管理PB级别的分布式数据。

Hive特性:

  • 灵活方便的ETL(extract/transform/load)。
  • 支持Tez、Spark等多种计算引l擎。
  • 可直接访问HDFS文件以及HBase。
  • 易用易编程。

Hive的应用场景

image.png

Hive与传统数据仓库比较

image.png

image.png

Hive的优点

image.png

Hive的架构

image.png

Hive运行流程

  1. Client提交HQL命令。
  2. Tez执行查询。
  3. YARN为群集中的应用程序分配资源,并为YARN队列
  4. 中的Hive作业启用授权。
  5. Hive根据表类型更新HDFS或Hive仓库中的数据。
  6. Hive通过JDBC连接返回查询结果。

image.png

Hive数据存储模型

image.png

Hive分区和分桶

分区:数据表可以按照某个字段的值划分分区。

  • 每个分区是一个目录。
  • 分区数量不固定。
  • 分区下可再有分区或者桶。

桶:数据可以根据桶的方式将不同数据放入不同的桶中。

  • 每个桶是一个文件。
  • 建表时指定桶个数,桶内可排序。
  • 数据按照某个字段的值Hash后放入某个桶中。

Hive数据存储模型-托管表和外部表

Hive可以创建托管表和外部表:

  • 创建Hive表,Hive会将数据移动到数据仓库目录。
  • 如果所有处理都由Hive完成,建议使用托管表。
  • 如果要用Hive和其它工具来处理同一个数据集,建议使用外部表

image.png

Hive支持的函数

Hive内置函数:

  • 数学函数,如round()、floor()、abs()、rand()等
  • 日期函数,如to_date()、month()、day(等
  • 字符串函数,如trim()、length()、substr()等

UDF(User - Defined Funcation)

Hive使用方式

  • Running HiveServer2 and Beeline

    $ $HIVE_HOME/bin/hiveserver2

    $ $HIVE_HOME/bin/beeline -u jdbc:hive2://$HS2_HOST:$HS2_PORT

  • Running Hcatalog

    $ $HIVE_HOME/hcatalog/sbin/hcat_server.sh

  • Running WebHCat(Templeton)

    $ $HIVE_HOME/hcatalog/sbin/webhcat_server.sh

HiveSQL介绍

  • DDL-数据定义语言

    建表,修改表,删表、分区、数据类型。

  • DML-数据管理语言

    数据导入、数据导出。

  • DQL-数据查询语言

    简单查询。

    复杂查询Group by,Order by,Join等。

DDL操作

  • 创建表

    hive> CREATE TABLE pokes (foo INT, bar STRING);

    hive> CREATE TABLE invites (foo INT, bar STRING) PARTITIONED BY (ds STRING);

  • 浏览表

    hive> SHOW TABLES;

  • 描述表

    hive> DESCRIBE invites;

  • 修改表

    hive> ALTER TABLE events RENAME TO 3koobecaf;

    hive> ALTER TABLE pokes ADD COLUMNS (new_col INT);

DML操作

  • 向表里加载数据

    hive> LOAD DATA LOCAL INPATH './examples/files/kv1.txt' OVERWRITE INTO TABLE pokes;

    hive> LOAD DATA LOCAL INPATH './examples/files/kv2.txt' OVERWRITE INTO TABLE invites PARTITION (ds='2008-08-15');

  • 导出数据到HDFS

    EXPORT TABLE invites TO '/department';

DQL操作

  • SELECTS and FILTERS

    hive> SELECT a.foo FROM invites a WHERE a.ds='2008-08-15';

    hive> INSERT OVERWRITE DIRECTORY '/tmp/hdfs_out' SELECT a.* FROM invites a WHERE a.ds='2008-08-15';

  • GROUP BY

    hive> FROM invites a INSERT OVERWRITE TABLE events SELECT a.bar, count(*) WHERE a.foo > 0 GROUP BY a.bar;

    hive> INSERT OVERWRITE TABLE events SELECT a.bar, count(*) FROM invites a WHERE a.foo > 0 GROUP BY a.bar;

  • MULTITABLE INSERT

    FROM src INSERT OVERWRITE TABLE dest1 SELECT src.* WHERE src.key < 100 INSERT OVERWRITE TABLE dest2 SELECT src.key, src.value WHERE src.key >= 100 and src.key < 20O;

  • JOIN

    hive> FROM pokes t1 JOIN invites t2 ON (t1.bar = t2.bar) INSERT OVERWRITE TABLE events SELECT t1.bar, t1.foo, t2.foo;

  • STREAMING

    hive> FROM invites a INSERT OVERWRITE TABLE events SELECT TRANSFORM(a.foo, a.bar) AS (oof, rab) USING '/bin/cat' WHERE a.ds > '2008-08-09';

总结

  • Hive是分布式数据仓库,本章介绍了Hive的应用场景、基本原理、架构和运行流程以及常用的Hive SQL语句。

缩率语

image.png