Quels sont les avantages D'Apache Beam over Spark/Flink pour le traitement par lots?
Apache Beam prend en charge plusieurs pistes arrière, y compris Apache Spark et Flink. Je connais Spark / Flink et j'essaie de voir les avantages et les inconvénients de Beam pour le traitement par lots.
en regardant le exemple de compte de mots de faisceau , il se sent très similaire aux équivalents Spark/Flink natifs, peut-être avec une syntaxe un peu plus verbeuse.
Je ne vois actuellement pas un grand avantage de choisir Faisceau sur L'étincelle / scintillement pour une telle tâche. Les seules observations que je puisse faire jusqu'à présent:
- Pro: Abstraction au-dessus d'exécution différents backends.
- Con: cette abstraction vient au prix d'avoir moins de contrôle sur ce qui est exécuté exactement en Spark/Flink.
y a-t-il de meilleurs exemples qui mettent en évidence d'autres avantages/inconvénients du modèle Beam? Est-il des informations sur la façon de la perte de contrôle affecte la performance?
notez que je ne demande pas de différences dans les aspects de streaming, qui sont en partie couverts dans cette question et résumé dans cet article (périmé en raison de Spark 1.X).
1 réponses
il y a quelques choses que Beam ajoute sur beaucoup de moteurs existants.
-
unifier la fournée et le streaming. de nombreux systèmes peuvent gérer à la fois la diffusion par lots et la diffusion en continu, mais ils le font souvent au moyen d'API distinctes. Mais dans le faisceau, La Fournée et le streaming ne sont que deux points sur un spectre de latence, l'exhaustivité, et le coût. Il n'y a pas de cliff apprentissage/réécriture de la fournée à la diffusion en continu. Donc, si vous écrivez un pipeline de fournée aujourd'hui, mais demain votre latence a besoin de changement, c'est incroyablement facile à ajuster. Vous pouvez voir ce genre de voyage dans le Jeu Mobile "exemples d'151980920" .
-
APIs qui élèvent le niveau d'abstraction : APIs De Beam se concentrent sur la capture des propriétés de vos données et de votre logique, au lieu de laisser filtrer les détails de l'exécution sous-jacente. Ceci est à la fois la clé pour la portabilité (voir paragraphe suivant) et peut également donner des durées d'exécution beaucoup de souplesse dans la façon dont ils exécutent. Quelque chose comme ParDo fusion (aka fonction composition) est une optimisation assez basique que la grande majorité des coureurs font déjà. D'autres optimisations sont encore en cours d'implémentation pour certains coureurs. Par exemple, les APIs sources de Beam sont construits spécifiquement pour éviter la sur-spécification du découpage dans un pipeline. Au lieu de cela, ils donnent aux coureurs les bons crochets pour rééquilibrer dynamiquement le travail à travers les machines disponibles. Cela peut faire une énorme différence dans la performance en éliminant essentiellement les éclats traînants. En général, plus nous serons intelligents, mieux nous serons. Même le réglage manuel le plus minutieux échouera au fur et à mesure que les données, le code et les environnements changent.
-
Portabilité sur les durées de fonctionnement. : parce que les formes de données et les exigences de temps d'exécution sont soigneusement séparées, le même pipeline peut être utilisé de plusieurs façons. Et cela signifie que vous n'avez pas finissez par réécrire le code quand vous devez passer de on-prem au cloud ou d'un système éprouvé à quelque chose à la pointe. Vous pouvez très facilement comparer les options pour trouver le mélange d'environnement et de performance qui fonctionne le mieux pour vos besoins actuels. Et cela pourrait être un mélange de choses -- le traitement de données sensibles sur site avec un coureur open source et le traitement d'autres données sur un service géré dans le nuage.
concevoir la poutre modèle utile d'abstraction plus nombreux, différents moteurs est délicate. Faisceau n'est ni l'intersection de la fonctionnalité de tous les moteurs (trop limité!), ni l'union (trop d'un évier de cuisine!). Au lieu de cela, Beam essaie d'être à l'avant-garde du traitement des données, poussant la fonctionnalité dans les moteurs de course et en tirant des modèles hors des moteurs de course.
- "Keyed State est un grand exemple de fonctionnalité qui existait en divers moteurs et a permis des cas d'utilisation intéressants et communs, mais n'a pas été à l'origine expressible en faisceau. Nous avons récemment étendu le modèle Beam pour inclure une version de cette fonctionnalité selon les de Beam "principes de conception .
- et vice versa, nous espérons que le faisceau influencera également les cartes routières de divers moteurs. Par exemple, la sémantique des faisceaux de données de Flink était influencé par le modèle Beam (née Dataflow).
- cela signifie également que les capacités ne seront pas toujours exactement les mêmes à travers différents faisceaux à un moment donné. C'est pourquoi nous utilisons "capability matrix pour essayer de communiquer clairement l'état des choses.