Hive建表后,表的元数据存储在关系型数据库中(如:mysql),表的数据(内容)存储在hdfs中,这些数据是以文本的形式存储在hdfs中(关系型数据库是以二进制形式存储的),既然是存储在hdfs上,那么这些数据本身也是有元数据的(在NameNode中),而数据在DataNode中。这里注意两个元数据的不同。

如下图,建表并导入数据:

hive存储数据格式 hive 数据存储_hive


hive存储数据格式 hive 数据存储_数据存储_02


之后在mysql中会发现:

hive存储数据格式 hive 数据存储_数据存储_03


有一个hive_remote数据库,这里存储的就是hive中表的元数据,比如查看其中一个字段:

hive存储数据格式 hive 数据存储_数据_04


再去查看hdfs中的变化:

hive存储数据格式 hive 数据存储_hive_05


如图,在/user/hive_remote/warehouse/目录下会出现person目录,这就是我们在hive中创建的表,person目录里有一个dt-2018-1-1目录,这个目录里就是我们导入的数据。就是说,这里是按照一个分区一个目录的方式存放的。

再来看我们在hive中的配置文件hive-site.xml:

hive存储数据格式 hive 数据存储_数据存储_06


会发现/user/hive_remote/warehouse/这个目录是我们自己配置的路径(hdfs中的路径,不是本地路径)。

OK,这就是Hive数据的存储方式。