3.0 KiB
3.0 KiB
数据仓库——Hive
一、简介二、Hive的体系架构
2.1 command-line shell & thrift/jdbc
2.2 Metastore
2.3 执行流程
一、简介
Hive是一个构建在Hadoop之上的数据仓库,它可以将结构化的数据文件映射成表,并提供类SQL查询功能,用于查询的SQL语句会被转化为MapReduce作业,然后提交到Hadoop上运行。
特点:
- 简单、容易上手(提供了类似sql的查询语言hql),使得精通sql但是不了解Java编程的人也能很好地进行大数据分析;
- 灵活性高,可以自定义用户函数(UDF)和存储格式;
- 为超大的数据集设计的计算和存储能力,集群扩展容易;
- 统一的元数据管理,可与presto/impala/sparksql等共享数据;
- 执行延迟高,不适合做数据的实时处理,但适合做海量数据的离线处理。
二、Hive的体系架构

2.1 command-line shell & thrift/jdbc
可以用command-line shell和thrift/jdbc两种方式来操作数据:
- command-line shell:通过hive命令行的的方式来操作数据;
- thrift/jdbc:通过thrift协议按照标准的JDBC的方式操作数据。
2.2 Metastore
在Hive中,表名、表结构、字段名、字段类型、表的分隔符等统一被称为元数据。所有的元数据默认存储在Hive内置的derby数据库中,但由于derby只能有一个实例,也就是说不能有多个命令行客户端同时访问,所以在实际生产环境中,通常使用MySQL代替derby。
Hive进行的是统一的元数据管理,就是说你在Hive上创建了一张表,然后在presto/impala/sparksql 中都是可以直接使用的,它们会从Metastore中获取统一的元数据信息,同样的你在presto/impala/sparksql中创建一张表,在Hive中也可以直接使用。
2.3 执行流程
- 客户端提交的SQL后首先会通过SQL Parser进行解析,把语句解析成抽象语法树后转换成逻辑性执行计划;
- 接着查询优化工具Query Optimizer会对逻辑性执行计划进行优化,生成物理性执行计划(physical plan);
- 在生成物理执行计划中,还包括一些序列化和反序列化操作(SerDes),以及解析用户自定义函数(User Defined Functions,UTFs)的操作;
- 接着物理执行计划被转换为MapReduce作业,提交到Hadoop上执行;