gpt4 book ai didi

apache-spark - 使用 Hive 时了解 HDFS 中的文件分布和分区

转载 作者:可可西里 更新时间:2023-11-01 15:03:41 27 4
gpt4 key购买 nike

一方面,在 HDFS 文档中他们说:

HDFS is designed to support very large files. Applications that are compatible with HDFS are those that deal with large data sets. These applications write their data only once but they read it one or more times and require these reads to be satisfied at streaming speeds. HDFS supports write-once-read-many semantics on files. A typical block size used by HDFS is 64 MB. Thus, an HDFS file is chopped up into 64 MB chunks, and if possible, each chunk will reside on a different DataNode.

这意味着每个文件都将在节点之间拆分。

另一方面,当我使用Hive或Spark SQL时,我是这样管理分区的,每个分区都有一个文件夹,里面的所有文件都属于这个分区。例如:

/Sales
/country=Spain
/city=Barcelona
/2019-08-28.parquet
/2019-08-27.parquet
/city=Madrid
/2019-08-28.parquet
/2019-08-27.parquet

假设每个文件的大小为 1GB,HDFS block 大小为 128MB。

所以我很困惑。我不明白 city=Barcelonav/2019-08-28.parquet 是否整体只保存在一个节点上(甚至与 city=Barcelona/2019-08-27.parquet 一起)。 parquet),或者每个文件分布在8个节点之间。

如果每个文件都是分布式的,那么分区的好处是什么?

如果数据是按照我定义的分区分布的,HDFS怎么知道要这样做呢?它是否会查找名称格式为 key=value 的文件夹并确保它们将被完整保存?

最佳答案

您对“HDFS 如何存储我们转储到其中的文件”和“Hive/Spark 如何在分区情况下创建不同的目录”感到困惑。

让我尝试为您提供一个视角。HDFS 就像你提到的那样工作。HDFS 根据 block 大小和要存储的文件大小将文件分成 n 个 block 。从某种意义上说,元数据(目录、权限等)是一种抽象,您看到的文件 (2019-08-27.parquet) 确实分布在节点之间。 Namenode 维护元数据。

但是,当我们分区时,它会在 HDFS 上创建不同的目录。当您想要使用分区列上的条件查询数据时,这最终会有所帮助。仅在相关目录中搜索请求的数据。如果您继续查询分区数据并编写 explain 来查看逻辑计划,您会注意到 Partition FiltersFileScan阶段。

分区数据仍然按照您提到的相同方式存储在 HDFS 上。

希望这对您有所帮助!

关于apache-spark - 使用 Hive 时了解 HDFS 中的文件分布和分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57689796/

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