Hadoop HDFS:Read/Write 并行度?

Hadoop HDFS: Read/Write parallelism?

在互联网上找不到足够的信息,所以在这里提问:

假设我正在将一个巨大的文件写入磁盘,数百 TB,这是 mapreduce(或 spark 或其他)的结果。 mapreduce 如何将这样的文件有效地(可能是并行的?)写入 HDFS,以后也可以以并行方式读取它?

我的理解是 HDFS 只是基于块的(例如 128MB)。因此,为了写入第二个块,您必须已经写入了第一个块(或者至少确定哪些内容将进入块 1)。假设它是一个 CSV 文件,文件中的一行很可能会跨越两个块——我们如何将这样的 CSV 读取到 mapreduce 中的不同映射器?是否必须执行一些智能逻辑来读取两个块、连接它们并读取正确的行?

Hadoop 使用 RecordReaders 和 InputFormats 作为读取和理解块内字节的两个接口。

默认情况下,在 Hadoop MapReduce 中,每条记录都以 TextInputFormat 换行结束,对于只有一行穿过块末尾的情况,必须读取下一个块,即使它只是字面上的 \r\n 个字符

写入数据是从 reduce 任务或 Spark 执行器等完成的,因为每个任务只负责写入整个输出的一个子集。对于非小型作业,您通常永远不会获得单个文件,这不是问题,因为大多数 Hadoop 处理引擎的输入参数旨在扫描目录,而不是指向单个文件