¿Cuáles son las diferencias arquitectónicas entre Spark SQL y Shark? ¿Se fusionarán en el futuro?
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.
.