2017-09-19 7 views
2

Je connais au moins 2 façons d'obtenir mes dépendances dans un travail Spark EMR. L'une consiste à créer un gros pot et l'autre à spécifier les paquets que vous voulez envoyer dans l'étincelle en utilisant l'option --packages.Spark, Alternative à Fat Jar

Le gros pot prend beaucoup de temps à se fermer. Est-ce normal? ~ 10 minutes. Est-il possible que nous l'ayons configuré de manière incorrecte?

L'option de ligne de commande est correcte, mais elle est sujette aux erreurs.

Y a-t-il des alternatives? Je voudrais qu'il existe (existe déjà) un moyen d'inclure la liste des dépendances dans le pot avec gradle, puis demandez-les de les télécharger. Est-ce possible? Y a-t-il d'autres alternatives?

Mise à jour: Je publie une réponse partielle. Une chose que je n'ai pas clarifiée dans ma question initiale était que je m'intéresse aussi aux conflits de dépendance parce que vous avez le même jar avec des versions différentes.

Répondre

1

Le gros pot prend en effet beaucoup de temps à créer. J'ai été en mesure d'optimiser un peu en supprimant les dépendances qui n'étaient pas requises lors de l'exécution. Mais c'est vraiment une douleur.

0

HubSpot a une solution (partielle): SlimFast. Vous pouvez trouver une explication ici http://product.hubspot.com/blog/the-fault-in-our-jars-why-we-stopped-building-fat-jars et vous pouvez trouver le code ici https://github.com/HubSpot/SlimFast

efficacement il stocke tous les pots qu'il aurez besoin sur s3, alors quand il construit elle le fait sans emballage les pots, mais quand il a besoin de exécutez-le les obtient de s3. Ainsi, vos builds sont rapides et les téléchargements ne sont pas longs.

Je pense que si cela avait aussi la possibilité d'ombrer les chemins du pot sur le téléchargement, afin d'éviter les conflits, alors ce serait une solution parfaite.