我正在尝试使用Apache Spark SQL将S3中的json日志数据同步到Parquet文件中.我的代码基本上是:
import org.apache.spark._
val sqlContext = sql.SQLContext(sc)
val data = sqlContext.jsonFile("s3n://...", 10e-6)
data.saveAsParquetFile("s3n://...")
Run Code Online (Sandbox Code Playgroud)
当我有多达2000个分区并且5000或更高失败时,无论数据量如何,此代码都有效.通常情况下,人们可以将分区合并到一个可接受的数字,但这是一个非常大的数据集,在2000个分区我遇到了这个问题所描述的问题
14/10/10 00:34:32 INFO scheduler.DAGScheduler: Stage 1 (runJob at ParquetTableOperations.scala:318) finished in 759.274 s
14/10/10 00:34:32 INFO scheduler.TaskSchedulerImpl: Removed TaskSet 1.0, whose tasks have all completed, from pool
14/10/10 00:34:32 INFO spark.SparkContext: Job finished: runJob at ParquetTableOperations.scala:318, took 759.469302077 s
14/10/10 00:34:34 WARN hadoop.ParquetOutputCommitter: could not write summary file for ...
java.io.IOException: Could not read footer: java.lang.NullPointerException
at parquet.hadoop.ParquetFileReader.readAllFootersInParallel(ParquetFileReader.java:190)
at parquet.hadoop.ParquetFileReader.readAllFootersInParallel(ParquetFileReader.java:203)
at parquet.hadoop.ParquetOutputCommitter.commitJob(ParquetOutputCommitter.java:49)
at …Run Code Online (Sandbox Code Playgroud) 将数据保存到Amazon S3时,如何使Apache Spark使用分段上传。Spark使用RDD.saveAs...File方法写入数据。当目标开始时,s3n://Spark会自动使用JetS3Tt进行上传,但是对于大于5G的文件,此操作将失败。大型文件需要使用分段上传功能上载到S3,这对于较小的文件也同样有利。使用的JetS3Tt支持分段上传MultipartUtils,但Spark在默认配置中不使用此功能。有没有办法使它使用此功能。