Hive 如何存储数据(从 HDFS 加载)?

2023-12-21

我对 Hadoop(HDFS 和 Hbase)和 Hadoop 生态系统(Hive、Pig、Impala 等)相当陌生。我对 Hadoop 组件(例如 NamedNode、DataNode、Job Tracker、Task Tracker)以及它们如何协同工作以高效地存储数据有了很好的了解。

在尝试了解 Hive 等数据访问层的基础知识时,我需要了解表的数据(在 Hive 中创建)到底存储在哪里?我们可以在 Hive 中创建外部表和内部表。由于外部表可以位于 HDFS 或任何其他文件系统中,因此 Hive 不会在仓库中存储此类表的数据。那么内表呢?该表将作为 Hadoop 集群上的数据节点之一上的目录创建。一旦我们从本地或 HDFS 文件系统加载这些表中的数据,是否还会创建更多文件来存储在 Hive 中创建的表中的数据?

举例来说:

  1. 名为 test_emp_feedback.csv 的示例文件已从本地文件系统转移到 HDFS。
  2. 在 Hive 中创建了一个表(emp_feedback),其结构类似于 csv 文件结构。这会导致在 Hadoop 集群中创建一个目录,例如 /users/big_data/hive/emp_feedback
  3. 现在,一旦我创建表并从 test_emp_feedback.csv 加载 emp_feedback 表中的数据

Hive 是否会在 emp_feedback 目录中创建文件的副本?会不会造成数据冗余?


创建托管表会在Hive仓库目录下创建一个与表名同名的目录(通常在/用户/配置单元/仓库/数据库名/表名)。表结构(Hive 元数据)也是在元存储(RDBMS/HCat)中创建的。

在将数据加载到表上之前,该目录(与hive仓库下的表名同名)是空的。

可能有两种可能的情况。

  1. 如果表是外部的,则数据根本不会复制到仓库目录。

  2. 如果表是托管的(不是外部的),当您将数据加载到表中时,它会被移动(未复制)从当前HDFS位置到Hive仓库目录9/user/hive/warehouse//)。所以这不会复制数据。

注意:除非数据仅由 hive 使用,否则始终建议创建外部表。删除托管表会从 HDFS(HIVE 仓库)中删除数据。

HadoopGig https://hadoopgig.blogspot.ie/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hive 如何存储数据(从 HDFS 加载)? 的相关文章

随机推荐