hive原理

什么是Hive

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。

Hive架构图

 

  Jobtrackerhadoop1.x中的组件,它的功能相当于: Resourcemanager+AppMaster

  TaskTracker 相当于:  Nodemanager  +  yarnchild

Hive的特点

1. 可扩展

Hive可以自由的扩展集群的规模,一般情况下不需要重启服务。

2.延展性

Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。

3.容错性

良好的容错性,节点出现问题SQL仍可完成执行。

基本组成

  • 用户接口包括 CLIJDBC/ODBCWebGUI
  • 元数据存储通常是存储在关系数据库如 mysql , derby
  • 解释器、编译器、优化器、执行器

各组件的基本功能

  • 用户接口主要由三个:CLIJDBC/ODBCWebGUI。其中,CLIshell命令行;JDBC/ODBCHiveJAVA实现,与传统数据库JDBC类似;WebGUI是通过浏览器访问Hive
  • 元数据存储Hive 将元数据存储在数据库中。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等
  •  解释器、编译器、优化器完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有 MapReduce 调用执行

HiveHadoop关系 

Hive利用HDFS存储数据,利用MapReduce查询数据

Hive数据类型

- 数据类型   

  • TINYINT   
  • SMALLINT   
  • INT   
  • BIGINT   
  • BOOLEAN   
  • FLOAT   
  • DOUBLE   
  • STRING   
  • BINARY(Hive 0.8.0以上才可用)   
  • TIMESTAMP(Hive 0.8.0以上才可用)

– 复合类型

  • Arrays:ARRAY<data_type>
  • Maps:MAP<primitive_type, data_type>
  • Structs:STRUCT<col_name: data_type[COMMENT col_comment],……>
  • Union:UNIONTYPE<data_type, data_type,……>

hive数据存储

1Hive中所有的数据都存储在 HDFS 没有专门的数据存储格式(可支持TextSequenceFileParquetFileRCFILE等)

2只需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符,Hive 就可以解析数据。

3Hive 中包含以下数据模型:DBTableExternal TablePartitionBucket

  • db:在hdfs中表现为${hive.metastore.warehouse.dir}目录下一个文件夹
  • table:在hdfs中表现所属db目录下一个文件夹(普通表:删除表后, hdfs上的文件都删了
  • external table:外部表, table类似,不过其数据存放位置可以在任意指定路径(External外部表删除后, hdfs上的文件没有删除, 只是把文件删除了
  • partition:在hdfs中表现为table目录下的子目录
  • bucket:桶, hdfs中表现为同一个表目录下根据hash散列之后的多个文件, 会根据不同的文件把数据放到不同的文件中 
原文地址:https://www.cnblogs.com/dummyly/p/10097795.html