我正在尝试使用Spark 1.6(spark-1.6.0-bin-hadoop2.4.tgz
)执行map-reduce作业,该作业从S3读取输入并将输出写入S3。
阅读工作正常:sc.textFile(s3n://bucket/path/to/file/file.gz)
然而,我在使写入工作时遇到了一些麻烦。我使用相同的存储桶输出文件:outputRDD.saveAsTextFile(s3n://bucket/path/to/output/)
当我的输入非常小(<100条记录)时,这似乎工作正常。我看到每个分区写入一个part-NNNNN
文件,其中一些文件有0个字节,其余文件低于1 KB。检查非空文件的时间点显示正确格式化的map-reduce输出。当我移动到稍微大一点的输入(~500条记录)时,我看到相同数量的part-NNNNN
文件(我的分区数量对于这些实验是不变的),但每一个都是空的。
当我尝试更大的数据集(数百万条记录)时,我的想法是我超过了导致此问题的S3限制。然而,500条记录(相当于约65 KB压缩)仍然是一些非常少量的数据,我认为Spark和S3应该很容易处理。
我已尝试使用S3 Block FileSystem而不是概述here的S3 Native FileSystem。但得到相同的结果。我已经为我的S3水桶打开了日志,但我似乎找不到那里的吸烟枪。
还有其他人经历过这个吗?或者可以给我一个可能出错的线索?
答案 0 :(得分:0)
原来我昨晚工作太晚了。今天早上,我退了一步,发现了map-reduce中的一个错误,它有效地过滤了所有结果。
答案 1 :(得分:-3)
您应该在saveAsTextFile之前使用coalesce
Decrease the number of partitions in the RDD to numPartitions. Useful
for running operations more efficiently after filtering down a large
dataset.
例如:
outputRDD.coalesce(100).saveAsTextFile(s3n://bucket/path/to/output/)