【发布时间】:2020-01-01 12:39:27
【问题描述】:
一方面,他们在 HDFS 文档中说:
HDFS 旨在支持非常大的文件。应用程序是 与 HDFS 兼容的是那些处理大型数据集的。这些 应用程序只写入一次数据,但读取一次或多次 次,并要求以流传输速度满足这些读取。 HDFS 支持文件上的一次写入多次读取语义。一个典型的块 HDFS 使用的大小为 64 MB。因此,一个 HDFS 文件被分割成 64 MB 块,如果可能,每个块将驻留在不同的 数据节点。
意味着每个文件都将在节点之间拆分。
另一方面,当我使用 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 块大小为 128 MB。
所以我很困惑。我不明白是city=Barcelonav/2019-08-28.parquet整体只保存在一个节点上(甚至连同city=Barcelona/2019-08-27.parquet一起),还是每个文件分布在8个节点之间。
如果每个文件都是分布式的,那么分区的好处是什么?
如果数据是按照我定义的分区分布的,那么 HDFS 怎么知道这样做呢?它是否会查找名称格式为key=value 的文件夹并确保它们完好无损地保存?
【问题讨论】:
标签: apache-spark hadoop hive hdfs bigdata