HDFS 什么是HIVE的处理存储?

1mrurvl1  于 2022-12-09  发布在  HDFS
关注(0)|答案(2)|浏览(243)

我是新来的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中的何处,对吗?

任何人都可以分享对上述理解的反馈吗?
谢谢

gblwokeq

gblwokeq1#

配置单元使用MySQLMariaDBPostgreSQLOracleDerbyDB等关系数据库(仅适用于嵌入式部署)来存储元数据(数据库、表定义、统计信息、赠款等)。请参阅部署模式和database requirements无论是内部表还是外部表,元数据都存储在关系数据库中。
是的,数据存储在HDFS中,但Hive也支持使用JDBC storage handler与外部数据库集成。此类表看起来像普通Hive表,但数据存储在某个数据库中,您的查询在数据库中执行, predicate 下推工作正常,您可以在单个查询中使用hive原生表和存储处理程序表。此外,HBase storage handlerKafka storage handler等也可用。您可以编写自己存储处理程序。
取决于您的配置单元版本/供应商It is possible to create many tables (both managed and external at the same time) on top of the same location in HDFS。虽然Cloudera更喜欢将托管表放在专用的HDFS位置,但请参阅https://stackoverflow.com/a/67073849/2700344,并且默认情况下不允许为仓库根目录之外的托管表指定位置。阅读托管表和外部表here之间的区别。

mccptt67

mccptt672#

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

相关问题