理论教育 Hive中的数据存储方式及数据模型解析

Hive中的数据存储方式及数据模型解析

时间:2023-06-14 理论教育 版权反馈
【摘要】:Hive 中所有的数据都存储在HDFS 中,共包含4 种数据模型:Table(表)、ExternalTable(外部表)、Partition(分区)和Bucket(桶)。Hive 表在逻辑上有两部分组成,第一部分是真实数据,第二部分为描述表格中数据形式的元数据。在物理实现上,Hive 的每个表的数据将存储在一个HDFS 文件目录下,而描述表数据形式的元数据,Hive 将其存储在关系型数据库中。

Hive中的数据存储方式及数据模型解析

Hive 中所有的数据都存储在HDFS 中,共包含4 种数据模型:Table(表)、ExternalTable(外部表)、Partition(分区)和Bucket(桶)。

1. Table

类似于传统数据库中的表,在Hive 中对于数据的管理与维护是利用表的形式实现的。Hive 表在逻辑上有两部分组成,第一部分是真实数据,第二部分为描述表格中数据形式的元数据。在物理实现上,Hive 的每个表的数据将存储在一个HDFS 文件目录下,而描述表数据形式的元数据,Hive 将其存储在关系型数据库中。

Hive 数据表中的类型可以是int、float、String、Data、Boolean 等基础类型,也可以是list,map 等复合类型。Hive 表在HDFS 中有固定的位置,通常被放置在HDFS的/user/hive/warehouse 目录下。例如,有一个表students,那么在HDFS 中会创建/user/hive/warehouse/students 目录,并在该目录下存放数据。

2. ExternalTable

指向一个已经存储在HDFS 文件中、并具有一定格式的数据,是在实际生产环境下最常用的一种方式,优点是不用重复加载数据。Hive 中的外部表和表很类似,但是其数据不是放在Hive 指定的目录中,而是存放在别处。如果要删除外部表,该外部表所指向的数据不会被删除,只会删除外部表对应的元数据;而如果要删除表,该表中的数据和元数据都会被删除。(www.daowen.com)

3. Partition

类似于传统数据库中划分列的索引。在Hive 中,表中的一个Partition 对应于表下的一个子目录,所有的Partition 数据都存储在对应的子目录中。例如:students表中包含department 和professional 两个Partition, 则对应于department=software,professional=database 的HDFS 子目录为:/user/hive/warehouse/students/department=software/professional=database,所有属于这个分区的数据都存放在这个子目录中。

4. Bucket

对指定的列计算其hash,然后除以桶的个数求余的方式决定该条记录存放在哪个桶当中,每一个Bucket 对应一个子目录。如将students 列分数至4 个Bucket 上,首先对department 列的值计算hash,比如,对应hash=0 的目录为:/user/hive/warehouse/students/department =software/professional=database/part-00000;对应hash=4 的目录为:/user/hive/warehouse/ students/department=software/professional=database/part-00004。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈