Hive数据组织方式介绍

4 篇文章 0 订阅
3 篇文章 0 订阅

Hive和普通DB的异同

 

Hive将元数据存储在RDBMS中,一般使用的数据库有mysql和derby。

默认的情况下hive将元数据保存在内嵌的derby数据库中,但是只能允许一个会话连接,只适合做简单的测试。这种部署当时在实际生产环境中不适用。为了支持多用户会话,需要一个独立的元数据存储数据库,使用mysql可以满足这个需求,并且hive内部对mysql提供了很好的支持。

实际数据存储

hive没有专门的数据存储格式,也没有为数据建立索引,用户可以非常自由的组织hive中的表,只需要在创建表的时候告诉hive数据中的行列分隔符即可,hive就可以解析数据。

hive中的数据都存储在HDFS中,其中包括以下几种数据类型。

1.TABLE

Hive中table的结构和数据库是一样的,每一个 Table 在 Hive 中都有一个相应的hdfs目录存储数据。例如,一个表 test,它在 HDFS 中的路径为:/ warehouse /test,内部表的存储路径都在hive-site.xml 中由 ${hive.metastore.warehouse.dir} 

安装hive后,会在hdfs上创建如/user/hive/warehouse/这样的的属于hive的文件夹;如果我们在hive中创建数据库,则会在warehouse下产生一个子目录,形如/user/hive/warehouse/xxx.db;如果接着在该数据库中创建一个表,则会继续产生子目录,形如/user/hive/warehouse/xxx.db/yyyyyy

2.External Table

和table的区别就是可以随意指定目录存储表中的数据,往往是现有数据,然后建立hive进行查询,在删除hive表之后hdfs上的数据并不会被删除,这通常是在hdfs数据被多个数据处理工具共同使用时的一种建表方式,大家各自计算但都不会影响数据。

3.Partition 

对应于数据库中的Partition 列的密集索引,但是 Hive 中 Partition 的组织方式和数据库中的很不相同。在 Hive 中,表中的一个 Partition 对应于表下的一个目录,所有的 Partition 的数据都存储在对应的目录中。例如:test表中包含dt 和 city 两个 Partition,则对应于 dt = 20180203, ctry = US 的 HDFS 子目录为:/ warehouse /test/dt=20100801/ctry=US;对应于 dt = 20100801, ctry = CA 的 HDFS 子目录为;/ warehouse /app/dt=20100801/ctry=CA

hive的分区方式可以有效的减少集群的计算量,例如一张1000个分区的表,而我们的查询只需要针对其中某几个分区,那么对全表搜索和针对几个分区搜索,集群读取和计算的数据量是不同的。hive可以根据sql的分区条件选择只读取指定分区,而分区字段在表结构上和普通字段没有什么区别。

 

4.Buckets 

对指定列计算hash,根据 hash 值切分数据,目的是为了并行,每一个 Bucket 对应一个文件。将 user 列分散至 32 个 bucket,首先对 user 列的值计算 hash,对应 hash 值为 0 的HDFS 目录为:/ warehouse /test/dt =20100801/ctry=US/part-00000;hash 值为 20 的 H

DFS 目录为:/ warehouse /test/dt =20100801/ctry=US/part-00020

如果指定Buckets,则date=20180521不是文件,而是文件名,然后再它的下级会产生以某一列值的hash 值为区分的文件,形如/user/hive/warehouse/xxx.db/yyyyyy/date=20180521/part-00000,文件中即保存着相关的内容

External Table 指向已经在 HDFS 中存在的数据,可以创建 Partition。它和 Table 在元数据的组

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值