0%

Hive基础

一、 Hive介绍

Hive是为了解决海量结构化日志的数据统计框架,他是一个基于Hadoop的数据仓库工具,可以将结构化的数据映射为一张表,并提供类SQL的查询功能。本质就是将HQL转化成MR程序
简化流程可以理解成:

  1. 编写SQL。
  2. Hive匹配出相对应的MR模板并将将SQL转化成MR程序。
  3. 运行MR程序,生成相应的分析结果。
  4. 将结果写入持久化存储。

Hive优点:

  1. 类SQL语句,简单易上手。
  2. 自动转化成MR程序,减少开发人员学习成本。
  3. Hive支持自定义函数,用户可以根据自己需求来实现自己的函数。

Hive缺点:

  1. 效率低,自动生成的MR程序通常情况下不够智能,并且调优比较困难。
  2. HQL表达能力有限。
  3. 只适合实时性要求不高的场合。

二、 Hive架构

a11d648f4c81611b4ccc929be282dba6.jpeg

  1. Hive提供了三种用户接口
    CLI(Hive shell): CLI启动的时候,会同时启动一个Hive副本,CLI会连接到client是Hive的客户端会连接到Hive Server。在启动Client模式的时候,需要指出Hive Server所在节点,并且在该节点启动Hive Server。
    JDBC/ODBC:使用Java访问Hive。
    WUI:通过浏览器访问Hive。

  2. 元数据Metastore
    Hive将元数据存储在数据库中,如mysql、derby。Hive中的元数据包括表的名字,表所属的数据库(默认是 default),表的拥有者,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。

  3. Hadoop
    Hive使用HDFS进行存储,使用MR进行计算。

  4. 驱动器:Driver
    解析器(SQL Parser):将SQL字符串转换成抽象语法树AST,这一步一般都用第三方工具库完成,比如antlr;对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误。
    编译器(Physical Plan):将AST编译生成逻辑执行计划。
    优化器(Query Optimizer):对逻辑执行计划进行优化。
    执行器(Execution):把逻辑执行计划转换成可以运行的物理计划。对于Hive来说,就是将其转化成MR/Spark。

三、 Hive与数据库进行比较

查询语言: SQL被广泛应用在数据仓库中,因此专门针对Hive的提醒设计了类SQL的查询语句HQL。熟悉SQL的开发者可以很方便的使用Hive进行开发。
数据存储位: Hive是数据Hadoop生态下的一个数据仓库工具,显然,Hive中的数据是存放在HDFS中的。而数据库一般则是将数据保存在块设备或者本地文件系统中。
数据更新:Hive是针对数据仓库应用设计的,而数据仓库的内容一般是读多写少。因此Hive中不建议对数据进行改写。所有数据应当在加载时就确认好。而数据库中的数据通常是需要经常进行修改的,所以使用INSERT,UPDATE比较常见。
索引:Hive在加载数据的过程中不会对数据进行任何的处理,甚至不会对数据进行扫描,因此也没有对数据中的某些Key创建索引。Hive想要访问满足条件的特定值的时候,需要使用暴力扫描,因此访问数据的延迟比较大。也正因为延迟大,所以Hive不适合在线数据查询。因为引入了MR,Hive可以进行并行访问数据,所以即使没有索引,在遇到大数据量的访问时,Hive仍然可以体现出优势。数据库中,通常会对常用的列创建一个或者多个索引,因此可以有较高的效率以及较小的延迟。
执行: Hive中对的大多数查询的执行都是通过MR来实现的。而数据库通常是存在自己的执行引擎的。
执行延迟: Hive由于没有索引,需要扫描整个表,因此延迟较高。并且由于MR自身的延迟就较高,所以在使用MR执行Hive查询的时候,也会有较高的延迟。所以在数据量小的时候数据库的执行能力更好,但是当数据规模比较大,达到超过了数据库的数据处理能力的时候,Hive并行查询能力的优势显然能体现出来了。
可扩展性: 由Hive是建立在Hadoop之上的,因此Hive的可扩展性适合Hadoop的可扩展性一致的。数据库由于ACID的严格限制,扩展行非常有限。目前最先进的并行数据库Oracle在理论上的扩展能力也只有100台左右。
数据规模: Hive是建立在集群上的,可以利用MR进行并行计算,因此可以执行很大规模的数据。对应的数据库可以支持的数据规模较小。

四、 Hive常见操作

在操作Hive之前,我们需要部署好Hive,这部分可以参考Hive初识中的介绍。
并且由于Hive默认的Metastore为derby的性能限制,建议将Metastore改成MYSQL,详细更改方式同样参考Hive初识
启动Hive 进行Hive文件夹下对的bin目录,我们可以执行./hive启动hive客户端

查看数据库

1
hive> show databases;

打开默认数据库

1
hive> use default;

显示 default 数据库中的表

1
hive> show tables;

创建一张表

1
hive> create table student(id int, name string);

显示数据库中有几张表

1
hive> show tables;

查看表的结构

1
hive> desc student;

向表中插入数据

1
hive> insert into student values(1000,"ss");

查询表中数据

1
hive> select * from student;

退出

1
hive hive> quit;