Hive最初是应Facebook每天产生的海量新兴社会网络数据进行管理和机器学习的需求而产生和发展的
是建立在Hadoop上的数据仓库基础架构
作为Hadoop的一个数据仓库工具,Hive可以将结构化的数据文件映射为一张数据库表,并提供简单的SQL查询功能
Hive作为数据仓库,可用来进行数据提取转化加载(ETL)
Hive构建在基于静态批处理的Hadoop之上,Hadoop通常都有较高的延迟并且在作业提交和调度时需要大量的开销
Hive不适合那些需要低延迟的应用,如联机事务处理(OLTP)
Hive并不提供实时的查询和基于行级的数据更新操作
Hive的最佳使用场合是大数据集的批处理作业
Hive将用户的HQL语句通过解释器转为MapReduce作业提交到Hadoop集群上,Hadoop监控作业执行过程,然后返回作业执行结果给用户。
用户访问接口,用户用来访问Hive数据仓库所使用的工具接口。
CLI (command line interface) 命令行接口
Thrift Server是Facebook开发的一个软件框架,它用来开发可扩展且跨语言的服务,Hive集成了该服务,能让不同编程语言调用Hive的接口
Hive客户端提供了通过网页的方式访问Hive提供的服务,这个接口需要启动HWI(Hive web interface)服务。
Metastore是Hive中的元数据存储
主要存储Hive中表的名称,列和分区及其属性、表的属性(外表?)、表的数据所在目录等。
Metastore和Hive Driver驱动的互联有两种方式,一种是集成模式,一种是远程模式(通过Thrift Interface连接)
驱动编译组件包括编译器、优化器和执行引擎
分别完成HQL的词法分析、语法分析、编译、优化以及查询计划的生成
生成的查询计划存储在HDFS中,并在随后由MapReduce调用执行
Hive的数据模型
tinyint | 1 byte |
smallint | 2 byte |
int | 4 byte |
bigint | 8 byte |
float | 4 byte 单精度 |
double | 8 byte 双精度 |
decimal | 任意精度数字 |
timestamp | yyyy-mm-dd hh:mm:ss |
date | yyyy-mm-dd |
string | |
varchar | 1~65535 |
char | 1~255 |
boolean | |
binary |
此外还有:
ARRAY<data_type>
MAP<key_type, value_type>
STRUCT<col_name1:data_type1, ..., col_namen:data_typen>
UNIONTYPE<data_type1, ..., data_typen>
Hive中没有专门的数据存储格式,也没有为数据建立索引
用户可以非常自由的组织Hive中的表,只需明确列分隔符和行分隔符,Hive就可以解析数据
HIve中的数据存储在HDFS中,有以下数据模型:
表(Table):
存储录由hive-site.xml配置文件中的hive.metastore.warehouse.dir属性配置,默认为/user/hive/warehouse
外部表(External Table):
分区(Partition):每个分区就是表目录下的一个目录
桶(Bucket):根据哈希值对数据进行切分