我试图执行使用星火1.6(spark-1.6.0-bin-hadoop2.4.tgz
)地图,减少工作,从读取输入和输出写入S3。星火RDD.saveAsTextFile编写空文件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块文件系统,而不是S3本地文件系统所概述here尝试。但获得相同的结果。我已经开启了对S3存储桶的日志记录,但我似乎无法在那里找到吸烟枪。
有没有其他人经历过这个?或者可以给我一些线索,知道可能会出现什么问题?
通常空输出意味着分区是空的。在saveAsTextFile之前使用'repartition(n)'时,问题是否会持续存在?如果没有,你有你的答案。如果不是,请发布可用于重现问题的代码。参见[关于话题](https://stackoverflow.com/help/on-topic)和[如何创建一个最小的,完整的,并且可验证的示例](https://stackoverflow.com/help/mcve) – zero323
是。结果是答案。我在业务逻辑中筛选出所有记录。现在看来,这似乎是显而易见的。感谢您的回应。 –