servicios services google dataproc and apache-spark bigdata distributed-computing google-cloud-dataflow google-cloud-ml

apache-spark - services - google cloud saas



Flujo de datos de Google vs Apache Spark (4)

Google ahora ofrece ambos modelos de programación: mapreduce y spark. Cloud DataFlow y Cloud DataProc son respectivamente

Estoy evaluando Google Dataflow y Apache Spark para decidir cuál es la solución más adecuada para nuestras necesidades comerciales de análisis de datos grandes.

Descubrí que hay Spark SQL y MLlib en la plataforma Spark SQL para realizar consultas de datos estructurados y aprendizaje automático.

Me pregunto si hay alguna solución correspondiente en la plataforma de flujo de datos de Google.


He construido código usando chispa, DataFlow. Déjame poner mis pensamientos.

Spark / DataProc: He usado mucho spark (Pyspark) para ETL. Puede utilizar SQL y cualquier lenguaje de programación de su elección. Muchas funciones están disponibles (incluyendo funciones de ventana). Construye tu marco de datos y escribe tu transformación y puede ser súper rápido. Una vez que los datos se almacenan en caché, cualquier operación en el Dataframe será rápida.

Simplemente puede construir una tabla externa de Hive en el GCS. Luego puede usar Spark para ETL y Cargar datos en Big Query. Esto es para el procesamiento por lotes.

Para la transmisión, puede utilizar la transmisión por chispa y cargar datos en la consulta grande.

Ahora, si ya tiene un clúster, debe pensar si debe moverse a la nube de Google o no. Descubrí que la oferta de Data proc (Google Cloud Hadoop / Spark) es mejor, ya que no tiene que preocuparse por la administración de muchos clústeres.

Flujo de datos: se conoce como haz de apache. Aquí puedes escribir tu código en Java / Python o en cualquier otro idioma. Puede ejecutar el código en cualquier marco (Spark / MR / Flink). Este es un modelo unificado. Aquí puede hacer tanto el procesamiento por lotes como el procesamiento de datos en tiempo real.


He intentado ambos:

El flujo de datos aún es muy joven, no existe una solución "lista para usar" para hacer ML con él (aunque podría implementar algoritmos en transformaciones), podría enviar los datos de procesos al almacenamiento en la nube y leerlos más tarde con otro herramienta.

Se recomendaría Spark pero tendría que administrar su clúster usted mismo. Sin embargo hay una buena alternativa: Google Dataproc.

Puede desarrollar herramientas de análisis con chispa e implementarlas con un comando en su clúster, dataproc administrará el clúster en sí sin tener que modificar la configuración.


Le ayudaría si pudiera ampliar un poco sus casos de uso específicos. ¿Qué estás tratando de lograr en relación con el "análisis de Bigdata"? La respuesta corta ... depende :-)

Aquí hay algunos puntos arquitectónicos clave a considerar en relación con Google Cloud Dataflow v. Spark y Hadoop MR.

  • Gestión de recursos: Cloud Dataflow es un entorno de ejecución completamente bajo demanda. Específicamente, cuando ejecuta un trabajo en Dataflow, los recursos se asignan a pedido solo para ese trabajo. No hay intercambio / contención de recursos entre trabajos. En comparación con un clúster Spark o MapReduce, normalmente implementaría un clúster de nodos X y luego enviaría trabajos y luego ajustaría los recursos del nodo entre los trabajos. Por supuesto, puede construir y derribar estos clústeres, pero el modelo Dataflow está orientado hacia dispositivos sin manos libres en relación con la administración de recursos. Si desea optimizar el uso de recursos a las demandas de trabajo, Dataflow es un modelo sólido para controlar los costos y casi olvidarse de la optimización de recursos. Si prefieres un clúster de estilo multiusuario, te sugiero que busques en Google Cloud Dataproc, ya que proporciona aspectos de administración de clústeres bajo demanda como Dataflow, pero enfocado en cargas de trabajo de clase Hadoop como MR, Spark, Pig, ...

  • Interactividad: Actualmente, Cloud Dataflow no proporciona un modo interactivo. Es decir, una vez que envía un trabajo, los recursos de trabajo están vinculados al gráfico que se envió Y la mayoría de los datos se carga en los recursos según sea necesario. Spark puede ser un mejor modelo si desea cargar datos en el clúster a través de RDD de memoria y luego ejecutar consultas de forma dinámica. El desafío es que a medida que aumente el tamaño de los datos y la complejidad de las consultas, tendrá que manejar los devOps. Ahora, si la mayoría de las consultas se pueden expresar en la sintaxis SQL, es posible que desee consultar BigQuery. BigQuery proporciona los aspectos "a pedido" del flujo de datos y le permite ejecutar consultas de forma interactiva sobre grandes cantidades de datos, por ejemplo, petabytes. La mayor ventaja en mi opinión de BigQuery es que no tiene que pensar / preocuparse por la asignación de hardware para tratar con el tamaño de sus datos. Como el tamaño de sus datos aumenta, no tiene que pensar en la configuración del hardware (configuración de memoria y tamaño de disco).

  • Modelo de programación: el modelo de programación de Dataflow está funcionalmente sesgado en comparación con un modelo clásico de MapReduce. Hay muchas similitudes entre Spark y Dataflow en términos de primitivas API. Cosas a considerar: 1) El lenguaje de programación principal de Dataflow es Java. Hay un SDK de Python en las obras. El SDK Java para flujo de datos está en código abierto y se ha portado a Scala. Hoy en día, Spark tiene más opciones de superficie SDK con GraphX, Streaming, Spark SQL y ML. 2) Dataflow es un modelo de programación unificado para el desarrollo de DAG basado en lotes y transmisión. El objetivo era eliminar la complejidad y el cambio de costos al moverse entre los modelos de lotes y de transmisión. El mismo gráfico puede ejecutarse sin problemas en cualquier modo. 3) Hoy en día, Cloud Dataflow no admite la ejecución de gráficos basados ​​en convergencia / iterativa. Si necesitas el poder de algo como MLib, entonces Spark es el camino a seguir. Tenga en cuenta que este es el estado de las cosas hoy en día.

  • Streaming & Windowing: Dataflow (basado en el modelo de programación unificado) fue diseñado para ser un entorno de ejecución altamente confiable, duradero y escalable para streaming. Una de las diferencias clave entre Dataflow y Spark es que Dataflow le permite procesar fácilmente los datos en términos de su verdadero tiempo de evento en lugar de procesarlos únicamente en el momento de su llegada al gráfico. Puede visualizar datos en ventanas fijas, deslizantes, de sesión o personalizadas en función de la hora del evento o la hora de llegada. El flujo de datos también proporciona activadores (aplicados a Windows) que le permiten controlar cómo desea manejar los datos que llegan tarde. Net-net marca el nivel de control de corrección para satisfacer las necesidades de su análisis. Por ejemplo, supongamos que tiene un juego móvil que interactúa con 100 nodos de borde. Estos nodos crean eventos de 10000 en segundo lugar relacionados con el juego. Digamos que un grupo de nodos no puede comunicarse con su sistema de análisis de transmisión de back-end. En el caso de Dataflow, una vez que llegan los datos, puede controlar cómo le gustaría manejar los datos en relación con sus necesidades de corrección de consultas. El flujo de datos también proporciona la capacidad de actualizar sus trabajos de transmisión mientras están en vuelo. Por ejemplo, supongamos que descubre un error lógico en una transformación. Puede actualizar su trabajo en vuelo sin perder su estado actual de Windowed. Net-net puede mantener su negocio funcionando.

Net-net: si realmente está haciendo principalmente el trabajo de estilo ETL (filtrado, modelado, unión, ...) o el flujo de datos MapReduce Data de estilo por lotes es una excelente ruta si desea un mínimo de devOps.
- si necesita implementar gráficos de estilo ML, siga la ruta de Spark y pruebe Dataproc - si está haciendo ML y primero necesita hacer ETL para limpiar sus datos de entrenamiento, implemente un híbrido con Dataflow y Dataproc - si necesita interactividad Spark es una opción sólida, pero también lo es BigQuery si puede / puede expresar sus consultas en SQL. Si necesita procesar sus trabajos ETL y MR a través de secuencias, Dataflow es una opción sólida.

Entonces ... ¿cuáles son tus escenarios?