gpt4 book ai didi

apache-spark - 在 hive 或 impala 中计算表统计数据如何加速 Spark SQL 中的查询?

转载 作者:行者123 更新时间:2023-12-04 04:03:00 24 4
gpt4 key购买 nike

为了提高性能(例如对于连接),建议首先计算表静态。

在 hive 中,我可以做到:

analyze table <table name> compute statistics;

在黑斑羚:
compute stats <table name>;

我的 spark 应用程序(从 hive 表中读取)是否也受益于预先计算的统计数据?如果是,我需要运行哪一个?他们是否都将统计数据保存在 hive Metastore 中?我在 Cloudera 5.5.4 上使用 spark 1.6.1

笔记:
在 spark 1.6.1 ( https://spark.apache.org/docs/1.6.1/sql-programming-guide.html ) 的文档中,参数 spark.sql.autoBroadcastJoinThreshold我发现了一个提示:

Note that currently statistics are only supported for Hive Metastore tables where the command ANALYZE TABLE COMPUTE STATISTICS noscan has been run.

最佳答案

这是即将发布的 Spark 2.3.0(也许某些功能已经在 2.2.1 或更早的版本中发布了)。

Does my spark application (reading from hive-tables) also benefit from pre-computed statistics?



如果 Impala 或 Hive 将表统计信息(例如表大小或行数)记录在 Spark 可以读取的表元数据中的 Hive 元存储中(并将其转换为自己的 Spark 统计信息以进行查询计划)。

您可以使用 DESCRIBE EXTENDED 轻松查看。 spark-shell 中的 SQL 命令.
scala> spark.version
res0: String = 2.4.0-SNAPSHOT

scala> sql("DESC EXTENDED t1 id").show
+--------------+----------+
|info_name |info_value|
+--------------+----------+
|col_name |id |
|data_type |int |
|comment |NULL |
|min |0 |
|max |1 |
|num_nulls |0 |
|distinct_count|2 |
|avg_col_len |4 |
|max_col_len |4 |
|histogram |NULL |
+--------------+----------+
ANALYZE TABLE COMPUTE STATISTICS noscan计算 Spark 使用的一项统计数据,即表的总大小(由于 noscan 选项,没有行计数指标)。如果 Impala 和 Hive 将其记录到“正确”位置,Spark SQL 会将其显示在 DESC EXTENDED 中。 .

使用 DESC EXTENDED tableName获取表级统计信息,看看您是否找到了由 Impala 或 Hive 生成​​的统计信息。如果他们在 DESC EXTENDED的输出,它们将用于优化连接(并且也为聚合和过滤器打开基于成本的优化)。

列统计信息(以 Spark 特定的序列化格式)存储在表属性中,我真的怀疑 Impala 或 Hive 是否可以计算统计信息并将它们存储在 Spark SQL 兼容格式中。

关于apache-spark - 在 hive 或 impala 中计算表统计数据如何加速 Spark SQL 中的查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39632724/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com