什么是 HIVE 的处理存储?



我是hive的新手,也在网上阅读过它。但仍有疑虑,尚未消除。

  • 对于配置单元外部表,配置单元keep table's metadata within HDFS, but not in its warehouse which is also in HDFS。对的

  • 无论是其内部表还是外部表,在这两种情况下,data of table将仅在HDFS中可用而在其他情况下NOWHERE可用。也就是说,数据可以从任何地方获取,但必须加载到HDFS中,因为HIVE使用hadoop的处理引擎来处理数据。对的

  • 内部表table's metadata and table's data都将在HIVE的数据仓库中可用,而这个数据仓库将只在HDFS中。对的

  • 在外部表中,table's metadata and table's dataNOT在HIVE的数据仓库中都可用,但在HDFS中可用。但hive必须保留一些信息,即表的元数据在哪里,数据在HDFS中在哪里,对吗?

有人能分享对上述理解的反馈吗?

THanks

Hive使用关系数据库,如MySQLMariaDBPostgreSQLOracleDerbyDB(仅用于嵌入式部署(来存储元数据(数据库、表定义、统计信息、授权等(。请参阅部署模式和数据库要求无论是内部表还是外部表,元数据都存储在关系数据库中

是的,数据存储在HDFS中,但Hive也支持使用JDBC存储处理程序与外部数据库集成。这样的表看起来像普通的配置单元表,但数据存储在一些数据库中,您的查询在数据库中执行,谓词下推可以工作,您可以在单个查询中使用带有存储处理程序表的配置单元本机表。还有HBase存储处理程序可用,Kafka存储处理程序等,您可以编写自己的存储处理程序。

根据您的配置单元版本/供应商,可以在HDFS中的同一位置上创建许多表(同时包括托管表和外部表(。尽管Cloudera更喜欢将托管表放在专用的HDFS位置,请参阅https://stackoverflow.com/a/67073849/2700344并且默认情况下不允许为仓库根目录之外的托管表指定位置。请在此处阅读托管表和外部表之间的区别。

除了最后一个,一切似乎都是正确的。创建外部表时,元数据将存储在配置单元中,否则无法通过配置单元进行查询。当您创建外部表时,HDFS本身保持对数据的控制。当您创建内部表时,Hive将负责。删除内部表会删除数据和元数据,但删除外部表只会删除配置单元中的元数据。但是您的数据将保留在您的文件系统中。这就是为什么当我们的一些外部连接与我们的配置单元版本不兼容时,我们会大量更改表类型作为一种变通方法。

最新更新