【发布时间】:2016-06-22 11:52:03
【问题描述】:
我是 Spark 的新手。我发现使用 HiveContext 我们可以连接到 hive 并运行 HiveQLs。我运行它并且它起作用了。
我的疑问是Spark 是否通过spark jobs 做到这一点。也就是说,它使用HiveContext 仅用于从HDFS 访问相应的hive 表文件
或者
它内部调用hive来执行查询?
【问题讨论】:
我是 Spark 的新手。我发现使用 HiveContext 我们可以连接到 hive 并运行 HiveQLs。我运行它并且它起作用了。
我的疑问是Spark 是否通过spark jobs 做到这一点。也就是说,它使用HiveContext 仅用于从HDFS 访问相应的hive 表文件
或者
它内部调用hive来执行查询?
【问题讨论】:
不,Spark 不会调用配置单元来执行查询。 Spark 仅从 hive 读取元数据并在 Spark 引擎中执行查询。 Spark 拥有自己的 SQL 执行引擎,其中包括催化剂、钨等组件,可优化查询并提供更快的结果。它使用来自 hive 的元数据和 spark 的执行引擎来运行查询。
Hive 的最大优势之一是它的元存储。它充当 hadoop 生态系统中许多组件的单个元存储。
关于你的问题,当你使用 HiveContext 时,它会访问 metastore db 和你所有的 Hive 元数据,这可以清楚地解释你有什么类型的数据,你在哪里有数据,序列化和反序列化,压缩编解码器、列、数据类型以及有关表及其数据的每个细节。这足以让 spark 理解数据。
总体而言,Spark 只需要提供底层数据完整详细信息的元存储,一旦它拥有元数据,它将通过其执行引擎执行您要求的查询。 Hive 比 Spark 慢,因为它使用 MapReduce。因此,回到 hive 并要求在 hive 中运行它是没有意义的。
如果它回答了你的问题,请告诉我。
【讨论】: