一、Hive的存储格式
Hive中的数据有真实数据与元数据之分,元数据是表示真实数据与Hive表的映射关系。
1. Hive真实数据的存储格式:
- TEXTFILE,文本文件格式
- SEQUENCEFILE,二进制序列化过的文本存储文件格式
- RCFILE,面向列的数据存储格式
- ORCFILE,对RCFILE的优化格式
2. Hive数据单元介绍:
- Databases,数据库,在HDFS中为hive.metastore。warehouse.dir目录下的一个文件夹
- Tables,表,内部表类似于RDBMS中的表,由Hive管理;外部表指向已经存在HDFS中的数据,外部表的真实数据不被Hive管理。
- 分区,每个表都可以按指定的键分为多个分区,作用是为了提高查询的效率,在HDFS中是表目录的子目录
- 分桶,根据表中某一列的哈希值将数据分为多个桶,在HDFS最终为同一目录下根据哈希散列后的多个文件
3. Hive存储模型
Hive数据在HDFS的典型存储结构表现:
/数据仓库地址/数据库名/表名/数据文件(或分桶文件)
/数据仓库地址/数据库名/表妹/分区键/数据文件(或粪桶文件)
Hive数据存储模型图
4. Hive的基本数据类型(具体的字节数)
- 整型:TINYINT、SMALLINT、INT、BIGINT使用整数面量时,默认是INT,其他整型需要加后缀,TINYINT、SMALLINT、BIGINT后缀为Y、S、L
- 浮点型:FLOAT、DOUBLE、DECIMAL
- 文本类型:STRING、CHAR、VARCHAR
- 布尔及二进制:-BOOLEAN(布尔值型),值为true和false,-BINARY(二进制型)(转化要记住)
- 时间类型:-DATE,存储日期;-TEMESTAMP,存储纳秒级别时间戳;-INTERVAL,存储时间间隔(要记住)
5. Hive的复杂数据类型
- ARRAY :具有相同类型变量的集合,如:["a","b"]
- MAP :一组键值对组合,如:{"a","b","c":"d"}\
- STRUCT :封装了一组有名字的字段,其类型可以是任意基本类型
- UNIONTYPE :类似于Java中的泛型,任一时刻只有其中一种类型生效
6. 总结
- Hive是Hadoop上处理结构化数据的数据仓库基础工具,用来处理储存在Hadoop上的海量数据
- Hive使用HQL替代MapReduce,使传统数据库开发人员更容易使用Hadoop
- Hive依赖Hadoop的HDFS和YARN
- Hive与RDBMS用法相似,但应用场景有显著区别
- CLI、HiveServer2、HWI、Driver、Metastore
- Hive数据存储模型与RDBMS类似,分区和分桶是Hive为了提升查询性能而特有的概念
- Hive元数据释放对真实数据的描述,通常单独存储在MySQL中
- Hive除了两种命令行开发工具(CLI和Beeline)之外还有许多第三方工具(HUE、Ambari、zeppelin)