什么是Hive

Hive到底是什么?它的存在是为了解决什么问题?Hive有什么优缺点?它与传统数据库之间有什么关系?Hive在大数据分析中扮演着什么角色?Let’s explore Hive together.

Hive是什么

简单来说,Hive是一种将SQL语句转换为MapReduce/Tez/Spark程序的工具。有了Hive我们不需要学习如何写MapReduce/Tez/Spark程序来进行数据分析,只需使用我们已经熟悉的SQL语言进行我们需要的数据查询,Hive会将SQL解析并转化为相应的计算程序在HDFS上运行并返回结果。

官方定义

The Apache Hive data warehouse software facilitates reading, writing, and managing large datasets residing in distributed storage using SQL. Built on top of Apache Hadoop, it provides:

  • Tools to enable easy access to data via SQL, thus enabling data warehousing tasks such as extract/transform/load(ETL), reporting, and data analysis
  • A mechanism to impose structure on a variety of data formats
  • Access to files stored either directly in Apache HDFS or in other data storage systems such as Apache HBase
  • Query execution using Apache Hadoop MapReduce, Apache Tez or Apache Spark frameworks.

数据仓库工具Hive致力于使用SQL来简化在分布式存储中的数据读写以及数据集管理问题。基于Apache Hadoop实现,Hive提供了:

  • 通过SQL简化数据访问的工具,即简化数据仓库任务如数据提取、转化、加载、报告和数据分析等。
  • 将各种各样的数据格式转换为特定结构的机制
  • 可以直接访问HDFS或者其他数据存储系统如HBase中的文件
  • 可以指定数据计算框架如MapReduce、Tez或者Spark来执行查询

为什么是基于Hadoop

根据上述定义可以看到:

  1. Hive处理的数据实际上是存放在HDFS或其他存储系统中,它本身不会存储数据
  2. 底层数据计算框架使用MapReduce、Tez或Spark
  3. Hive调度资源使用Yarn框架

所以Hive实际上是一个Hadoop的工具,为了帮助大家更加方便的使用Hadoop来工作,如果没有Hadoop,或许Hive存在的意义也就没有了吧。

Hive的优缺点

优点

  1. 使用简单,用户只需会使用SQL即可
  2. 使数据分析工作变得简单,处理大数据优势明显
  3. 支持用户自定义函数

缺点

  1. 表达能力有限,无法表达迭代式算法(如第一个MapReduce程序的输出作为第二个MapReduce程序的输入)
  2. Hive转换SQL生成的MapReduce程序通常不够有效率
  3. Hive调优困难,粒度较粗

Hive架构组成

  • 两种客户端
    1. CLI(command-line interface)命令行客户端
    2. JDBC客户端
  • 四种驱动
    1. SQL Parser:sql解析器,检查sql语法
    2. Physical Plan:编译器,将sql语句转换为MapReduce或者指定的计算框架程序
    3. Query Optimizer:优化器,优化查询
    4. Execution:执行器,执行计算程序
  • 元数据库Metastore
    1. Metastore是一个数据库,用于存储需要处理的数据的元数据,比如表名,表所属的数据库,表的用户信息,表字段,表数据所在的目录等等,将这些元数据存储在一个关系型数据库中,这个数据库就是Hive的Metastore
    2. Hive自带的Metastore是一个Derby数据库,但因为Derby不支持并发,一遍将Derby替换为Mysql

所以Hive处理过程中会读取两部分数据:存放在HDFS中的结构化数据(要处理的大数据)以及存放在Mysql中的元数据(目标数据信息)。通过读取元数据信息,找到对应的字段;然后把字段映射到结构化数据中,通过映射形成一张虚表,用于Hive数据查询与分析。

Hive的特点

  • Hive是针对数据仓库设计的,主要用于读,所有的数据在加载时已经确定好,适合处理静态数据
  • Hive本身计算的延迟较高
  • Hive基于Hadoop,也具备可扩展性,支持并发运行
  • Hive是一种数仓工具,不是数据库