Ant*_*cue 4 hive hiveql apache-spark apache-spark-sql
我的问题很简单,但是以某种方式我无法通过阅读文档找到明确的答案。
我在CDH 5.10群集上运行了Spark2。还有Hive和Metastore。
我在Spark程序中创建一个会话,如下所示:
SparkSession spark = SparkSession.builder().appName("MyApp").enableHiveSupport().getOrCreate()
Run Code Online (Sandbox Code Playgroud)
假设我有以下HiveQL查询:
spark.sql("SELECT someColumn FROM someTable")
Run Code Online (Sandbox Code Playgroud)
我想知道是否:
我正在做一些性能评估,我不知道是否应该声明使用spark.sql([hiveQL query])Spark或Hive 执行的查询的时间性能。
设置enableHiveSupport并不意味着该查询是在 Hive 中计算的。
这仅与 Hive 目录有关。如果您使用enableHiveSupport,那么您可以:
所有这些都直接与 Catalog 相关联,而不是执行本身
从历史上看,Hive QL 解析也是使用 Hive 完成的,但现在 Spark 无需调用 Hive 即可完成
我应该声明使用 spark.sql([hiveQL query]) 执行的查询的时间性能是指 Spark 或 Hive。
如上所述,它是 Spark 的性能
Spark知道两个目录,hive和内存。如果设置enableHiveSupport(),则spark.sql.catalogImplementation设置为hive,否则设置为in-memory。因此,如果启用hive支持,spark.catalog.listTables().show()将向您显示hive metastore中的所有表。
但这并不意味着将hive用于查询*,仅意味着spark与hive-metastore通信,执行引擎始终是spark。
*实际上有一些像percentileund的功能percentile_approx是本地蜂巢UDAF。
共有三个执行引擎:MapReduce、Tez和Spark。
当您使用hive执行查询时,您可以选择使用上述引擎之一。通常,您的管理员必须将其中一个引擎设置为默认引擎。
IE
set hive.execution.engine=tez;
Run Code Online (Sandbox Code Playgroud)
当您使用Spark执行查询时,它将使用 Spark 引擎来执行查询。
但是,如果您正在进行性能分析,时间并不是您应该测量的唯一内容,还应该测量内存和 CPU。
| 归档时间: |
|
| 查看次数: |
4522 次 |
| 最近记录: |