管理24 GB S3文件的理想集群大小是多少?



我目前正在处理这个数据集s3://commoncrawl/crawl-001/2008/06/19/1/。它的大小是24GB,我试图分离它只是文本/html请求,并将其保存在我的S3桶。一切都是好的代码,但当我试图保存在我的桶,我有我的记忆问题:

Reason: Container killed by YARN for exceeding memory limits. 11.1 GB of 11 GB physical memory used.

最初,我从一个主节点和两个从节点m5开始。xlarge,后来我试着用m5.2xlarge放主人和奴隶,但不够。

你知道集群处理这个文件的正确大小是多少吗?

我使用内核pyspark并读取此文件作为rdd,我必须将其保存为我的桶中的csv文件:

rdd=sc.wholeTextFiles('s3://commoncrawl/crawl-001/2008/06/19/1/')

处理后,保存在finalRdd:

def toCSVLine(data):
return ','.join(str(d) for d in data)
results = finalRdd.map(toCSVLine)
results.saveAsTextFile(
path="s3://mybucket/folder/results/pages.csv",
compressionCodecClass="org.apache.hadoop.io.compress.GzipCodec"
)

编辑1:增加集群大小的问题是,执行超过一个小时后显示:"Session 's not active"

您当前正在使用wholeTextFiles()方法从S3读取文件。正如Spark的文档中所述,这意味着将文件的所有内容加载到内存中。因此,要读取一个24GB的文件,您将需要实例上超过24GB的内存。

你的udf方法被称为toCSVLine,我猜你不想读你的文件作为一个整体,但每行。为此,您可以使用textFile()方法而不是wholeTextFile()。这样,Spark将逐行读取文件,从而避免内存限制错误。

更多关于使用Spark读取文本文件的详细信息:https://sparkbyexamples.com/spark/spark-read-text-file-rdd-dataframe/

相关内容

  • 没有找到相关文章

最新更新