web-dev-qa-db-fra.com

Spark 2.0 déconseille l'utilisation de 'DirectParquetOutputCommitter', comment s'en passer?

Récemment, nous avons migré de "EMR sur HDFS" -> "EMR sur S3" (EMRFS avec affichage cohérent activé) et nous avons réalisé que le Spark 'SaveAsTable' (format parquet) écrit sur S3 était environ 4x plus lent que HDFS mais nous avons trouvé Solution de contournement consistant à utiliser DirectParquetOutputCommitter - [1] avec Spark 1.6.

Raison de la lenteur de S3 - Nous avons dû payer la taxe dite Parquet [2] dans laquelle l'auteur de la sortie par défaut écrit dans une table temporaire et la renomme ultérieurement lorsque l'opération de changement de nom dans S3 est très coûteuse.

Nous comprenons également le risque lié à l'utilisation de 'DirectParquetOutputCommitter', qui est la possibilité d'une corruption des données avec des tâches spéculatives activées.

Maintenant, avec Spark 2.0, cette classe est obsolète et nous nous demandons quelles options avons-nous sur la table afin de ne pas supporter les écritures environ 4x plus lentes lorsque nous passons à Spark 2.0. Toutes les pensées/suggestions/recommandations seraient très appréciées.

Une solution de contournement à laquelle nous pouvons penser est la suivante: économiser sur HDFS, puis le copier sur S3 via s3DistCp (aucune idée sur la façon dont cela peut être fait de manière rationnelle alors que notre magasin de métadonnées Hive pointe sur S3?)

On dirait aussi que NetFlix a corrigé cela - [3], une idée du moment où ils prévoient l’ouvrir?

Merci.

[1] - https://github.com/Apache/spark/blob/21d5ca128bf3afd5c2d4c7fcc56240e28443474f/sql/core/src/main/scala/org/Apache/spark/sql/execution/datas

[2] - https://www.appsflyer.com/blog/the-bleeding-Edge-spark-parquet-and-s3/

[3] - https://www.youtube.com/watch?v=85sew9OFaYc&feature=youtu.be&t=8m39shttp://www.slideshare.net/AmazonWebServices/bdt303-running- spark-and-presto-on-the-netflix-big-data-platform

14
anivohra

Vous pouvez utiliser: sparkContext.hadoopConfiguration.set("mapreduce.fileoutputcommitter.algorithm.version", "2")

puisque vous êtes sur EMR, utilisez simplement s3 (pas besoin de s3a)

Nous utilisons Spark 2.0 et écrivons Parquet sur S3 assez rapidement (environ aussi vite que HDFS)

si vous voulez en savoir plus, consultez ce billet jira SPARK-10063

14
Tal Joffe

Je pense que le serveur S3 de Netflix est déjà une source ouverte à: https://github.com/rdblue/s3committer .

0
viirya