web-dev-qa-db-fra.com

Google Dataflow vs Apache Spark

J'étudie Google Dataflow et Apache Spark pour décider laquelle est la solution la plus appropriée pour nos besoins d'analyse de bigdata.

J'ai trouvé qu'il y a Spark SQL et MLlib dans la plate-forme spark pour effectuer des requêtes de données structurées et l'apprentissage automatique.

Je me demande s'il existe une solution correspondante dans la plate-forme Google Dataflow?

24
Browny Lin

Il serait utile que vous développiez un peu votre ou vos cas d'utilisation spécifiques. Qu'essayez-vous d'accomplir par rapport à "l'analyse Bigdata"? La réponse courte ... cela dépend :-)

Voici quelques points architecturaux clés à prendre en compte en relation avec Google Cloud Dataflow v. Spark et Hadoop MR.

  • Gestion des ressources: Cloud Dataflow est un environnement d'exécution entièrement à la demande. Plus précisément - lorsque vous exécutez un travail dans Dataflow, les ressources sont allouées à la demande pour ce travail uniquement. Il n'y a pas de partage/conflit de ressources entre les emplois. Par rapport à un cluster Spark ou MapReduce, vous déployez généralement un cluster de nœuds X, puis soumettez des travaux, puis réglez les ressources du nœud sur plusieurs travaux. Bien sûr, vous pouvez créer et détruire ces clusters, mais le modèle Dataflow est orienté vers les opérations de développement mains libres en relation avec la gestion des ressources. Si vous souhaitez optimiser l'utilisation des ressources en fonction des demandes, Dataflow est un modèle solide pour contrôler les coûts et presque oublier le réglage des ressources. Si vous préférez un cluster de type multi-tenant, je vous suggère de regarder Google Cloud Dataproc car il fournit les aspects de gestion de cluster à la demande comme Dataflow, mais axé sur les charges de travail Hadoop de classe comme MR, Spark, Pig, ...

  • Interactivité: actuellement Cloud Dataflow ne fournit pas de mode interactif. Cela signifie qu'une fois que vous soumettez un travail, les ressources de travail sont liées au graphique qui a été soumis ET la majorité des données sont chargées dans les ressources selon les besoins. Spark peut être un meilleur modèle si vous souhaitez charger des données dans le cluster via des RDD en mémoire, puis exécuter dynamiquement des requêtes. Le défi est qu'à mesure que la taille de vos données et la complexité des requêtes augmentent, vous devrez gérer les devOps. Maintenant, si la plupart de vos requêtes peuvent être exprimées en syntaxe SQL, vous voudrez peut-être regarder BigQuery. BigQuery fournit les aspects "à la demande" de Dataflow et vous permet d'exécuter de manière interactive des requêtes sur des quantités massives de données, par exemple des pétaoctets. Le plus grand avantage à mon avis de BigQuery est que vous n'avez pas à vous soucier de l'allocation matérielle pour gérer la taille de vos données. Ce qui signifie que lorsque la taille de vos données augmente, vous n'avez pas à penser à la configuration matérielle (mémoire et taille du disque).

  • Modèle de programmation: Le modèle de programmation de Dataflow est fonctionnellement biaisé par rapport à un modèle MapReduce classique. Il existe de nombreuses similitudes entre Spark et Dataflow en termes de primitives API. Points à considérer: 1) Le langage de programmation principal de Dataflow est Java. Un SDK Python est en préparation. Le SDK Dataflow Java en open source et a été porté sur Scala. Aujourd'hui, Spark a plus de choix de surface SDK avec GraphX, Streaming, Spark SQL et ML. 2) Dataflow est un modèle de programmation unifié pour le développement de DAG basé sur batch et streaming. L'objectif était de supprimer la complexité et la commutation des coûts lors du passage entre les modèles batch et streaming. Le même graphique peut fonctionner en toute transparence dans l'un ou l'autre mode. 3) Aujourd'hui, Cloud Dataflow ne prend pas en charge l'exécution de graphiques basée sur la convergence/itérative. Si vous avez besoin de la puissance de quelque chose comme MLib, alors Spark est la solution. Gardez à l'esprit que c'est la situation actuelle.

  • Streaming et fenêtrage: Dataflow (s'appuyant sur le modèle de programmation unifié) a été conçu pour être un environnement d'exécution hautement fiable, durable et évolutif pour le streaming. L'une des principales différences entre Dataflow et Spark est que Dataflow vous permet de traiter facilement les données en fonction de leur heure d'événement réel par rapport à leur traitement uniquement à leur heure d'arrivée dans le graphique. Vous pouvez fenêtrer les données dans des fenêtres fixes, coulissantes, de session ou personnalisées en fonction de l'heure de l'événement ou de l'heure d'arrivée. Dataflow fournit également des déclencheurs (appliqués à Windows) qui vous permettent de contrôler la façon dont vous souhaitez gérer les données en retard. Net-net vous composez le niveau de contrôle d'exactitude pour répondre aux besoins de votre analyse. Par exemple, supposons que vous ayez un jeu mobile qui interagit avec 100 nœuds Edge. Ces nœuds créent les événements de 10000 secondes liés au jeu. Supposons qu'un groupe de nœuds ne puisse pas communiquer avec votre système d'analyse de streaming back-end. Dans le cas de Dataflow - une fois que ces données arrivent - vous pouvez contrôler la façon dont vous souhaitez gérer les données par rapport à vos besoins de correction des requêtes. Dataflow offre également la possibilité de mettre à niveau vos travaux de streaming lorsqu'ils sont en vol. Par exemple, disons que vous découvrez un bogue logique dans une transformation. Vous pouvez mettre à niveau votre travail en vol sans perdre votre état fenêtré existant. Net-net vous permet de faire fonctionner votre entreprise.

Net-net: - si vous effectuez vraiment principalement un travail de style ETL (filtrage, mise en forme, jointure, ...) ou un traitement par lots, MapReduce Dataflow est un excellent chemin si vous voulez un minimum de devOps.
- si vous avez besoin d'implémenter des graphes de style ML, allez sur le chemin Spark et essayez Dataproc - si vous faites ML et vous devez d'abord faire ETL pour nettoyer vos données d'entraînement implémentez un hybride avec Dataflow et Dataproc - si vous avez besoin d'interactivité Spark est un choix solide, mais BigQuery l'est aussi si vous êtes/pouvez exprimer vos requêtes en SQL - si vous devez traiter vos travaux ETL et/ou MR sur des flux, Dataflow est un choix solide.


Alors ... quels sont vos scénarios?

39
Eric Schmidt

J'ai essayé les deux:

Le flux de données est encore très jeune, il n'y a pas de solution "prête à l'emploi" pour faire du ML avec lui (même si vous pouvez implémenter des algorithmes dans les transformations), vous pouvez sortir les données des processus vers le stockage cloud et les lire plus tard avec un autre outil.

Spark serait recommandé mais vous devrez gérer votre cluster vous-même. Cependant, il existe une bonne alternative: Google Dataproc

Vous pouvez développer des outils d'analyse avec spark et les déployer avec une seule commande sur votre cluster, dataproc gérera le cluster lui-même sans avoir à modifier la configuration.

3
Paul K.

J'ai construit du code en utilisant spark, DataFlow. Permettez-moi de vous faire part de mes réflexions.

Spark/DataProc: J'ai beaucoup utilisé spark (Pyspark) pour ETL. Vous pouvez utiliser SQL et n'importe quel langage de programmation de votre choix. Beaucoup de fonctions sont disponibles (y compris les fonctions Window). Construisez votre dataframe et écrivez votre transformation et cela peut être super rapide. Une fois les données mises en cache, toute opération sur le Dataframe sera rapide.

Vous pouvez simplement créer une table externe Hive sur le GCS. Ensuite, vous pouvez utiliser Spark pour ETL et charger les données dans Big Query. C'est pour le traitement par lots.

Pour le streaming, vous pouvez utiliser spark Streaming et charger des données dans Big query.

Maintenant, si vous avez déjà un cluster, vous devez penser à passer à Google Cloud ou non. J'ai trouvé que l'offre de Data proc (Google Cloud Hadoop/Spark) est meilleure car vous n'avez pas à vous soucier de la gestion de nombreux clusters.

DataFlow: Il est connu sous le nom de faisceau Apache. Ici, vous pouvez écrire votre code en Java/Python ou tout autre langage. Vous pouvez exécuter le code dans n'importe quel framework (Spark/MR/Flink). Il s'agit d'un modèle unifié. Ici, vous pouvez effectuer à la fois le traitement par lots et le traitement des données en continu.

2
user3858193

google propose désormais à la fois des modèles de programmation: mapreduce et spark. Cloud DataFlow et Cloud DataProc ils sont respectivement

1
Vahees