2017-06-08 4 views
1

spark/scalaからhdfsへのパーティションによるパーケットへの単純な書き込みが数秒間で問題になる理由を突き止めることはできません私がs3に書き込む時は分です。spark 2.xパーティションによるパーケットによる書き込みは、非常に遅いhdfsと比較して

def saveDF(df: org.apache.spark.sql.DataFrame) : Unit = { 

     df.write 
     .mode("overwrite") 
     .option("compression", "snappy") 
     .partitionBy("col") 
//  .parquet(s"hdfs://localhost:9000/${fileout}") // this is a few seconds 
     .parquet(s"s3a://${s3bucket}/${s3folder}/${fileout}") // this is a few minutes 
    } 

答えて

1

パフォーマンスを向上させるために、以下の設定を試してみてください

--conf "spark.sql.parquet.enable.summary-metadata=false"\ 
--conf "spark.hadooop.mapreduce.fileoutputcommitter.algorithm.version=2"\ 

ただし、HDFSと同じパフォーマンスを達成することはありません。問題はs3のコミットアルゴリズムとコミットの実装です(s3の_temporaryフォルダからの移動はhdfsのようにO(1)ではなくO(n))

+0

興味深い点 – eliasah

1

これは、HDFSクラスタがAWS EMRを兼ね備えているからですクラスタとs3アクセスでデータセンター間でデータを移動する必要があります。

関連する問題