gpt4 book ai didi

hadoop - Hive 数据和 Metastore 是如何相互通信和集成的?

转载 作者:可可西里 更新时间:2023-11-01 16:27:47 26 4
gpt4 key购买 nike

我是 hive/hadoop 的新手。我阅读/观看了与 hive、hdfs、hadoop 如何在内部工作相关的文档和视频。但是我仍然无法立即理解一些事情。 w.k.t Hive 数据作为文件存储在 hdfs 中,表结构(模式)存储在 Metastore 中。

  1. 因为,在查询执行期间,配置单元是只读模式,数据和模式相互集成并产生结果。请确认我对这个说法的理解是否正确?

  2. 正如陈述 1 告诉我们的整合,整合是如何发生的?就像存储在 hdfs 中的文件(实际数据)没有模式权限。 mapreduce/hadoop/hive 如何知道“存储在文件中的特定数据”属于“表的特定列”。不会有数据不匹配吗?

我认为配置单元数据文件看起来像,

students.txt
-------------
1 abc m@gmail.com
-------------------
2 xyz@ymail.com
---------------

上述文件不存储架构。因此,对于 s_id 为 2 的学生,不会存储姓名。那些东西是怎么捕获的?什么时候执行查询?我认为 xyz@gmail.com 不会集成到 student_name 字段下。但仍然想知道集成是如何发生的?

最佳答案

您对“Hive 数据作为文件存储在 hdfs 中,表结构(模式)存储在 Metastore 中”的理解。是正确的。但除了模式之外,Metastore 还具有存储表数据的 HDFS 目录详细信息。此 HDFS 路径信息由查询在执行时使用。

你的理解和我的验证/答案:

  1. 因为,在查询执行期间,配置单元是只读模式,数据和模式相互集成并产生结果。请确认我对这个说法的理解是否正确?

回答:正确

  1. 正如陈述 1 告诉我们的整合,整合是如何发生的?就像存储在 hdfs 中的文件(实际数据)没有模式权限。 mapreduce/hadoop/hive 如何知道“存储在文件中的特定数据”属于“表的特定列”。不会有数据不匹配吗?

回答:

存储在 HDFS 上的文本文件等文件是表的一部分,其中没有结构或列名,只有数据。但是,当创建表时,我们必须清楚地提及列以及它们如何存储在文本文件中。假设 2 列和逗号分隔的数据将有如下查询,

create table default.column_test 
(name string,
email string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','

因此数据文件,即存在于 HDFS 路径中的文本文件应具有以下格式的数据。

alpha,alpha@email.com
beta,beta@email.com

当使用 SELECT 查询从该表中查询数据时,查询将首先被编译,并且将对从 Hive Metastore 派生的 HDFS 路径中的数据执行。

SELECT * FROM column_test;

column_test.name column_test.email

1 Alpha alpha@email.com
2 Beta beta@email.com

如果文件中的数据没有列名的值,(如下所示)

alpha@email.com
beta,beta@email.com

然后 SELECT 查询会将“alpha@email.com”视为“name”列的值,并将返回 NULL 作为第一个记录的“email”列的值。输出将如下所示,

SELECT * FROM column_test;

column_test.name column_test.email

1 alpha@email.com NULL
2 Beta beta@email.com

希望对您有所帮助!

关于hadoop - Hive 数据和 Metastore 是如何相互通信和集成的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55452857/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com