Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Cuáles son las diferencias arquitectónicas entre Spark SQL y Shark? ¿Se fusionarán en el futuro?

¿Cuáles son las diferencias arquitectónicas entre Spark SQL y Shark? ¿Se fusionarán en el futuro?

Para lograr compatibilidad con Hive, Shark reutiliza el análisis HQL de Hive, la conversión del plan de ejecución lógica, la optimización del plan de ejecución y otros aspectos lógicos. Se puede estimar que simplemente reemplaza el plan de ejecución físico del trabajo MR al trabajo Spark (complementado por la columna de memoria). almacenamiento, etc. Optimización que tiene poco que ver con Hive); pero también se basa en Hive Metastore y Hive SerDe (para ser compatible con varios formatos de almacenamiento de Hive existentes). Esta estrategia ha generado dos problemas: en primer lugar, la optimización del plan de ejecución depende completamente de Hive y es inconveniente agregar nuevas estrategias de optimización. En segundo lugar, MR es paralelo a nivel de proceso y se presta poca atención a la seguridad de los subprocesos al escribir. código, lo que hace que Shark falle. No utilice otro conjunto de ramas fuente de Hive parcheadas y mantenidas de forma independiente (en cuanto a por qué los cambios relevantes no se fusionaron en la línea principal de Hive, no tengo idea).

Además de la rama fuente de Hive, Shark también necesita usar otro conjunto de ramas fuente de parches de Hive mantenidas de forma independiente (en cuanto a por qué los cambios relevantes no se fusionaron en la línea principal de Hive, no lo sé) .

Además de la compatibilidad con HQL y el análisis de consultas acelerado de los datos existentes de Hive, Spark SQL admite consultas relacionales directamente en objetos RDD locales. Al mismo tiempo, además de HQL, Spark SQL también tiene un analizador SQL optimizado incorporado y un conjunto de Scala DSL, lo que significa que si solo usa el dialecto SQL incorporado de Spark SQL o Scala DSL para realizar consultas relacionales en objetos RDD locales, entonces no necesita depender de ninguna característica de Hive al desarrollar aplicaciones Spark.

Spark SQL resuelve ambos problemas. En primer lugar, Spark SQL se basa únicamente en los niveles de compatibilidad de Hive del analizador HQL, Hive Metastore y Hive SerDe. Es decir, desde el momento en que HQL se analiza en un árbol de sintaxis abstracta (AST), Spark SQL se hace cargo de todo el trabajo. Catalyst se encarga de la generación y optimización del plan de ejecución. Gracias a la coincidencia de patrones de Scala y otras características funcionales del lenguaje, desarrollar estrategias de optimización del plan de ejecución utilizando Catalyst es mucho más sencillo que utilizar Hive. El autor de Catalyst, Michael Armbrust, dio una breve introducción a Catalyst en la Spark Summit del año pasado: 2013 | Spark Summit (¿me sorprende que no puedas personalizar el texto del enlace?) Primero, Shark es un sistema muy simple y fácil de usar. En segundo lugar, en comparación con Shark, Spark SQL utilizará Spark SQL completamente como motor, no solo para la optimización de consultas, por lo que reduce aún más la dependencia de Hive, por lo que Spark SQL ya no necesita mantener su propia rama de parches de Hive.

La capacidad de realizar consultas relacionales en objetos RDD locales reduce en gran medida el umbral de usuario. Por supuesto, esto se debe en parte a que hay más personas familiarizadas con SQL que con Spark API, y en parte porque hay un motor de optimización de planes de consultas impulsado por catalizador en Spark SQL. Aunque el rendimiento de Spark es varias veces mejor que el de Hadoop MapReduce en muchos aspectos, el modelo de tiempo de ejecución de Spark también es mucho más complejo que MapReduce, lo que dificulta el ajuste del rendimiento de las aplicaciones Spark. Aunque desde la perspectiva del volumen de código, las aplicaciones Spark suelen equivaler a varios minutos de aplicaciones MR, las aplicaciones Spark de alto rendimiento se pueden desarrollar basándose únicamente en la API de Spark. Desarrollar aplicaciones Spark eficientes utilizando la API todavía requiere algo de esfuerzo.

Aquí es donde entra Spark SQL: incluso si los usuarios escriben consultas menos eficientes, Catalyst puede aplicar automáticamente muchas estrategias de optimización comunes.

.