2016-01-26 42 views
2

我试图执行使用星火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存储桶的日志记录,但我似乎无法在那里找到吸烟枪。

有没有其他人经历过这个?或者可以给我一些线索,知道可能会出现什么问题?

+2

通常空输出意味着分区是空的。在saveAsTextFile之前使用'repartition(n)'时,问题是否会持续存在?如果没有,你有你的答案。如果不是,请发布可用于重现问题的代码。参见[关于话题](https://stackoverflow.com/help/on-topic)和[如何创建一个最小的,完整的,并且可验证的示例](https://stackoverflow.com/help/mcve) – zero323

+0

是。结果是答案。我在业务逻辑中筛选出所有记录。现在看来,这似乎是显而易见的。感谢您的回应。 –

回答

-3

你应该saveAsTextFile

之前使用​​3210从spark programming guide

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/) 
+1

Thanks @ Urban48,我实际上最初合并,但已删除它,以尝试消除变量。答案的结果是,我在“saveAsTextFile”甚至运行之前过滤掉了我的所有结果。现在我已经解决了这个问题,我已经加入了'coalesce',一切似乎都在顺利进行。 –

+0

我想加入火花编程公会.... –

0

原来我上晚班在这为时已晚。今天早上,我退后一步,在我的map-reduce中发现了一个bug,它有效地过滤了所有的结果。

相关问题