1

DirectFileOutputCommitter n'est plus disponible dans Spark 2.2.0. Cela signifie que l'écriture sur S3 prend énormément de temps (3 heures contre 2 minutes). Je suis en mesure de contourner cela en définissant la version FileOutputCommitter à 2 étincelles coquille en faisant cela,Spark 2.2.0 FileOutputCommitter

spark-shell --conf spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version=2 

même ne fonctionne pas avec étincelle sql

spark-sql --conf spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version=2 

La commande ci-dessus semble être la définition de la version = 2 mais quand la requête est exeucted il montre toujours le comportement de la version 1.

Deux questions,

1) Comment puis-je obtenir la version 2 FileOutputCommitter comportement à allumage commandé sql?

2) Est-ce que je peux toujours utiliser DirectFileOutputCommitter dans spark 2.2.0? [Je suis très bien avec la chance non nulle de données manquantes]

Articles connexes:

Spark 1.6 DirectFileOutputCommitter

Répondre

4

Je suis frappé ma question. Spark décourage l'utilisation de DirectFileOutputCommitter, car cela pourrait entraîner une perte de données en cas de course. L'algorithme version 2 n'aide pas beaucoup.

J'ai essayé d'utiliser le gzip pour enregistrer les données dans s3 au lieu de la compression instantanée qui a donné un certain avantage.

Le véritable problème ici est que l'étincelle écrit dans le s3: /// _ temporaire/0 d'abord puis copie les données de temporaire à la sortie. Ce processus est assez lent en s3, (généralement 6MBPS) Donc, si vous obtenez beaucoup de données, vous aurez un ralentissement considérable.

L'alternative est d'écrire d'abord dans HDFS, puis d'utiliser distcp/s3distcp pour copier les données vers s3. En outre, vous pouvez rechercher une solution netflix fournie: https://github.com/rdblue/s3committer. Je n'ai pas évalué cela.