2017-06-06 1 views
0

J'ai la séquence de travail Spark connecté via Luigi et fonctionnant sur S3 sur un cluster de 30 machines (15 Go de RAM chacune) qui pendent régulièrement sur différentes étapes. Aujourd'hui c'était lors du traitement de 5 Go de données. L'étape prend déjà 3,5hdébogage application Spark fonctionnant sur EMR

Cette étape qui se bloque est simplement le traitement des données et plus tard groupByKey sur l'ensemble de données de paires (ID utilisateur, 1L) et reduceGroups pour obtenir les comptes d'événements utilisateur. Même si un utilisateur a des événements de 1m (ce qui est peu probable parce que précédemment, après le filtrage des bots max était de 300K), il ne devrait pas y avoir 7 partitions sur un seul nœud prenant 3 heures lorsque le repos est terminé.

Une idée? Peut-être que le problème est que nous utilisons des ensembles de données qui sont encore expérimentaux? Comment pouvons-nous le déboguer? Thread dump from the executor taking 3 hours

Répondre

0

Apprenez à comprendre l'interface utilisateur de Spark. Cette section de livre peut vous aider à démarrer: https://jaceklaskowski.gitbooks.io/mastering-apache-spark/spark-webui.html

De l'interface utilisateur Spark vous devriez être en mesure de voir la quantité de données (en percentiles) a été traité par étape/partition/nœud/etc récent de l'interface utilisateur Spark (à partir de la version 2.0) affiche des informations encore plus granulaires sous l'onglet SQL. Cela vous aide à trouver l'asymétrie de données si elle existe. Il existe de nombreuses options pour lutter contre un biais de données, et la plupart d'entre elles sont spécifiques à votre application. Par exemple, voir comment traite Facebook avec des données biaiser avec le partitionnement adaptatif: https://www.slideshare.net/SparkSummit/handling-data-skew-adaptively-in-spark-using-dynamic-repartitioning

Il y a une possibilité que vous ne disposez pas d'un biais de données, mais l'un des nœuds du cluster est « cassé ». C'est le cas si vous voyez que c'est le même nœud qui est plus lent que les autres. Nous avons vu une telle anomalie dans l'environnement AWS. Après avoir tué le nœud et en avoir démarré un nouveau, tout a commencé à fonctionner correctement.