【发布时间】:2018-10-21 06:12:49
【问题描述】:
我的项目需要使用 PySpark 处理多个 .txt 消息文件。使用批处理将文件从本地目录移动到 HDFS 路径 (hdfs://messageDir/..),对于每个批处理,我可以看到几千个 .txt 文件,它们的总大小约为 100GB。几乎所有文件都小于 1 MB。
我可以知道 HDFS 如何存储这些文件并执行拆分吗?因为每个文件都小于 1 MB(小于 64/128MB 的 HDFS 块大小),我认为不会发生任何拆分,但文件将被复制并存储在 3 个不同的数据节点中。
当我使用 Spark 读取 HDFS 目录 (hdfs://messageDir/..) 中的所有文件时,使用 *.txt 等通配符匹配如下:-
rdd = sc.textFile('hdfs://messageDir/*.txt')
Spark 是如何读取文件并执行 Partition 的,因为 HDFS 没有针对这些小文件的分区。
如果我的文件大小在一段时间内增加并且每批获得 1TB 的小文件量怎么办?有人可以告诉我如何处理吗?
【问题讨论】:
-
好消息,你已经在那儿了!块大小是最小文件大小,因此每个 1 MB 文件至少需要 64-128 MB!然后我们添加副本!
-
上传到 HDFS 之前没有压缩文件的原因是什么?
-
@cricket_007,是的,这是一种选择,但我想知道当有大量小文本文件时 Spark 的行为。
-
显然会慢很多。每个文件都需要一个namenode请求
-
但我假设所有文本文件都将被读取为一个 RDD,然后分区发生.. 我想更多地了解大块文件的 RDD 如何在后台执行分区
标签: apache-spark hdfs