Para lograr compatibilidad con Hive, Shark puede reemplazar aproximadamente solo el plan de ejecución física de los trabajos MR a trabajos Spark (complementado con almacenamiento de columnas en memoria) en términos de reutilización de HQL, análisis de HQL de Hive, conversión del plan de ejecución lógica y optimización del plan de ejecución. y otros aspectos lógicos y otras optimizaciones que tienen poco que ver con Hive); pero también se basa en Hive Metastore y Hive SerDe (para compatibilidad con varios formatos de almacenamiento de Hive existentes). Esta estrategia conduce a dos problemas: primero, la optimización del plan de ejecución depende completamente de Hive, lo que hace que sea inconveniente agregar nuevas estrategias de optimización; segundo, MR es paralelo a nivel de proceso y se presta poca atención a la seguridad de los subprocesos al escribir código. provocando que Shark falle. No utilice otra rama fuente de Hive parcheada y mantenida 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 es necesario confiar en ninguna característica de Hive al desarrollar aplicaciones Spark.