【发布时间】:2017-01-08 18:53:13
【问题描述】:
我正在尝试使用 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/)
当我的输入非常小(part-NNNNN 文件,其中一些文件的字节数为0,其余的小于1 KB。抽查非空文件显示格式正确的 map-reduce 输出。当我移动到稍大的输入(约 500 条记录)时,我看到相同数量的 part-NNNNN 文件(我的分区数对于这些实验是恒定的),但每个都是空的。
当我尝试使用更大的数据集(数百万条记录)时,我的想法是我超出了导致此问题的一些 S3 限制。但是,500 条记录(压缩后约为 65 KB)仍然是很小的数据量,我认为 Spark 和 S3 应该可以轻松处理。
我已尝试使用 S3 块文件系统,而不是 here 概述的 S3 本机文件系统。但得到相同的结果。我已经为我的 S3 存储桶开启了日志记录,但我似乎无法在那里找到确凿证据。
有其他人经历过吗?或者可以以其他方式告诉我可能出了什么问题?
【问题讨论】:
-
典型的空输出意味着分区是空的。在
saveAsTextFile之前使用repartition(n)时问题是否仍然存在?如果没有,你有你的答案。如果不是,请发布可用于重现问题的代码。见on-topic 和How to create a Minimal, Complete, and Verifiable example -
是的。原来这就是答案。我正在过滤掉业务逻辑中的所有记录。现在想想,这似乎很明显。感谢您的回复。