我对 Hadoop(HDFS 和 Hbase)和 Hadoop 生态系统(Hive、Pig、Impala 等)相当陌生。我对 Hadoop 组件(例如 NamedNode、DataNode、Job Tracker、Task Tracker)以及它们如何协同工作以高效地存储数据有了很好的了解。
在尝试了解 Hive 等数据访问层的基础知识时,我需要了解表的数据(在 Hive 中创建)到底存储在哪里?我们可以在 Hive 中创建外部表和内部表。由于外部表可以位于 HDFS 或任何其他文件系统中,因此 Hive 不会在仓库中存储此类表的数据。那么内表呢?该表将作为 Hadoop 集群上的数据节点之一上的目录创建。一旦我们从本地或 HDFS 文件系统加载这些表中的数据,是否还会创建更多文件来存储在 Hive 中创建的表中的数据?
举例来说:
- 名为 test_emp_feedback.csv 的示例文件已从本地文件系统转移到 HDFS。
- 在 Hive 中创建了一个表(emp_feedback),其结构类似于 csv 文件结构。这会导致在 Hadoop 集群中创建一个目录,例如 /users/big_data/hive/emp_feedback
- 现在,一旦我创建表并从 test_emp_feedback.csv 加载 emp_feedback 表中的数据
Hive 是否会在 emp_feedback 目录中创建文件的副本?会不会造成数据冗余?
创建托管表会在Hive仓库目录下创建一个与表名同名的目录(通常在/用户/配置单元/仓库/数据库名/表名)。表结构(Hive 元数据)也是在元存储(RDBMS/HCat)中创建的。
在将数据加载到表上之前,该目录(与hive仓库下的表名同名)是空的。
可能有两种可能的情况。
如果表是外部的,则数据根本不会复制到仓库目录。
如果表是托管的(不是外部的),当您将数据加载到表中时,它会被移动(未复制)从当前HDFS位置到Hive仓库目录9/user/hive/warehouse//)。所以这不会复制数据。
注意:除非数据仅由 hive 使用,否则始终建议创建外部表。删除托管表会从 HDFS(HIVE 仓库)中删除数据。
HadoopGig https://hadoopgig.blogspot.ie/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)