2016-03-08 45 views
2

我是Spark.I新手,使用HiveContext发现我们可以连接到hive并运行HiveQL s。我运行它,它的工作。spark的HiveContext如何在内部工作?

我的疑问是Spark是否做它通过spark jobs。那就是,它仅使用HiveContext从HDFS

或者

它在内部调用蜂巢执行查询访问相应的蜂巢表文件?

回答

7

不,Spark不会调用配置单元来执行查询。 Spark仅从配置单元中读取元数据并在Spark引擎中执行查询。 Spark拥有自己的SQL执行引擎,其中包含催化剂,钨等组件以优化查询并提供更快的结果。它使用Spark的配置单元和执行引擎的元数据来运行查询。

Hive的最大优点之一是它是Metastore。它作为hadoop eco系统中许多组件的单一元存储。

回答您的问题,当您使用HiveContext时,它将访问Metastore数据库和您的所有Hive元数据,这些数据可以清楚地说明您拥有什么类型的数据,数据,序列化和反序列化,压缩编解码器,列,数据类型以及字面上关于表和数据的每一个细节。这足以让spark了解数据。总体而言,Spark只需要Metastore提供底层数据的完整详细信息,一旦它具有元数据,它就会执行您在执行引擎上请求的查询。 Hive比Spark更慢,因为它使用MapReduce。所以,回到蜂巢并要求在蜂巢中运行是没有意义的。

让我知道它是否回答你的问题。

+0

你能为此添加一些文档参考吗?谢谢 – Jorge

+0

谢谢你的回答!我还提到了对于小型表的SQL查询在HiveContext中的工作时间比在Tez上直接在Hive上执行时间要快。在完全看到源代码或文档的链接时,它清楚地表明HiveContext使用Spark引擎而不是在Hive中执行查询。 – metamaker