Apache spark 在HDFS中处理多个总大小为100GB的小文件
在我的项目中,我需要使用PySpark处理多个.txt消息文件。文件从本地目录移动到HDFS路径(hdfs://messageDir/..)使用批处理和每个批处理,我可以看到几千个.txt文件,它们的总大小约为100GB。几乎所有的文件都小于1MB 我可以知道HDFS如何存储这些文件并执行拆分吗?因为每个文件都小于1 MB(小于64/128MB的HDFS块大小),所以我认为不会发生任何拆分,但文件将被复制并存储在3个不同的数据节点中 当我使用Spark读取HDFS目录中的所有文件时(hdfs://messageDir/..)使用通配符匹配,如*.txt,如下所示:-Apache spark 在HDFS中处理多个总大小为100GB的小文件,apache-spark,hdfs,Apache Spark,Hdfs,在我的项目中,我需要使用PySpark处理多个.txt消息文件。文件从本地目录移动到HDFS路径(hdfs://messageDir/..)使用批处理和每个批处理,我可以看到几千个.txt文件,它们的总大小约为100GB。几乎所有的文件都小于1MB 我可以知道HDFS如何存储这些文件并执行拆分吗?因为每个文件都小于1 MB(小于64/128MB的HDFS块大小),所以我认为不会发生任何拆分,但文件将被复制并存储在3个不同的数据节点中 当我使用Spark读取HDFS目录中的所有文件时(hdfs:/
rdd = sc.textFile('hdfs://messageDir/*.txt')
Spark如何读取文件并执行分区,因为HDFS没有用于这些小文件的任何分区
如果我的文件大小在一段时间内增加,并且每批获得1TB的小文件,该怎么办?有人能告诉我怎么处理吗 我觉得你把事情弄混了
下面是关于SparkContext.textFile()如何在HDFS上处理分区和拆分的一个很好的解释:我认为您有点混淆了
下面是SparkContext.textFile()如何在HDFS上处理分区和拆分的一个很好的解释:即使文件很小,也可以从spark读取。问题是HDFS。通常HDFS块的大小非常大(64MB、128MB或更大),所以许多小文件会造成名称节点开销 如果你想制作更大的文件,你需要优化reducer。写入文件的数量由reducer将写入的数量决定。您可以使用合并或重新分区方法来控制它 另一种方法是多做一步合并文件。我编写了合并的spark应用程序代码。我把每个文件的目标记录大小,应用程序得到记录的总数,然后估计合并的数量
您可以使用Hive或其他方式。即使文件很小,您也可以从spark读取。问题是HDFS。通常HDFS块的大小非常大(64MB、128MB或更大),所以许多小文件会造成名称节点开销 如果你想制作更大的文件,你需要优化reducer。写入文件的数量由reducer将写入的数量决定。您可以使用合并或重新分区方法来控制它 另一种方法是多做一步合并文件。我编写了合并的spark应用程序代码。我把每个文件的目标记录大小,应用程序得到记录的总数,然后估计合并的数量
您可以使用Hive或其他方式。好消息,您已经在那里了!块大小是最小文件大小,因此每个1MB文件至少需要64-128MB!然后我们添加复制品!你在上传到HDFS之前没有压缩文件有什么原因吗?@cricket_007,是的,这是一个选项,但我想知道当有大量小文本文件时Spark的行为。它显然会慢得多。每个文件都需要一个namenode请求,但我假设所有文本文件都将作为一个RDD读取,然后进行分区。。我想更多地了解一大块文件的RDD是如何在这种情况下执行分区的好消息,你已经做到了!块大小是最小文件大小,因此每个1MB文件至少需要64-128MB!然后我们添加复制品!你在上传到HDFS之前没有压缩文件有什么原因吗?@cricket_007,是的,这是一个选项,但我想知道当有大量小文本文件时Spark的行为。它显然会慢得多。每个文件都需要一个namenode请求,但我假设所有文本文件都将作为一个RDD读取,然后进行分区。。我想了解更多关于大块文件的RDD是如何在引擎盖下执行分区的