我是Spark的新手。我发现使用HiveContext
我们可以连接到hive
并运行HiveQL
。我运行它,它工作。
我怀疑Spark
是否通过spark jobs
执行此操作。也就是说,它仅使用HiveContext
从HDFS访问相应的配置单元表文件
或
它在内部调用hive来执行查询?
答案 0 :(得分:10)
不,Spark不会调用hive来执行查询。 Spark仅从配置单元读取元数据并在Spark引擎中执行查询。 Spark拥有自己的SQL执行引擎,其中包括催化剂,钨等组件,以优化查询并提供更快的结果。它使用来自hive的元数据和spark的执行引擎来运行查询。
Hive的最大优势之一是它的Metastore。它作为hadoop生态系统中许多组件的单个元存储。
提出您的问题,当您使用HiveContext时,它将访问Metastore数据库和您的所有Hive元数据,这可以清楚地解释您拥有的数据类型,您在哪里获得数据,序列化和反序列化,压缩编解码器,列,数据类型以及关于表及其数据的每个细节。这足以让人们了解数据。
总的来说,Spark只需要Metastore,它提供底层数据的完整细节,一旦有了元数据,它就会通过其执行引擎执行你要求的查询。 Hive比Spark慢,因为它使用MapReduce。因此,回到蜂巢并要求在蜂巢中运行它是毫无意义的。
让我知道它是否回答你的问题。