1 Answer
- Newest
- Most votes
- Most comments
0
【以下的回答经过翻译处理】 s3-dist-cp在特定问题上并不一定比Spark好。这个问题的本质就是一个瓶颈,即多个输入文件可以被多个读者读取,但必须由单个写入者合并成一个输出文件。s3-dist-cp将使用多个mapper来读取输入文件,并使用单个reducer来写入输出文件。Spark也将使用多个执行器来读取输入文件,但最终的合并操作将会在一个执行器/分区中整合所有数据,以写入最终文件。由于中间数据会在内存中,因此Spark理应更快,而s3-dist-cp会将中间文件保存到磁盘中。
当输出被存储到S3中,并且需要写出大量文件时,s3-dist-cp的表现会更好。这是因为Spark在将文件写入到临时S3目录中,最后再将所有文件重命名到主目录中时,会采用更复杂的方式,这些步骤在S3中是非常昂贵的。
在这种情况下,使用Spark和coalesce(1)是最佳选择,而输出文件应该保存到HDFS中。一旦最终文件在HDFS中,如果需要将其复制到S3中,可以使用AWS S3 cli进行复制。Spark可以识别CSV文件中的标题,并且也可以在输出CSV文件中插入标题,因此不需要额外的处理来剥离或添加标题。
Relevant content
- Accepted Answerasked 10 months ago
- asked a year ago
- asked a year ago
- AWS OFFICIALUpdated a year ago
- AWS OFFICIALUpdated a year ago
- AWS OFFICIALUpdated a year ago
- AWS OFFICIALUpdated 3 years ago