为了提高性能(例如,对于连接),建议首先计算表静态。
在Hive我可以做::
analyze table <table name> compute statistics;
在Impala中:
compute stats <table name>;
我的spark应用程序(从hive-tables读取)是否也受益于预先计算的统计数据?如果是,我需要运行哪一个?它们是否都保存了hive Metastore中的统计数据?我在Cloudera 5.5.4上使用spark 1.6.1
注意:
在参数spark.sql.autoBroadcastJoinThreshold
的文档火花1.6.1(https://spark.apache.org/docs/1.6.1/sql-programming-guide.html)中,我找到了一个提示:
请注意,目前只有Hive Metastore支持统计信息 表命令ANALYZE TABLE COMPUTE STATISTICS noscan已经运行。
答案 0 :(得分:3)
这是即将推出的Spark 2.3.0(可能已经在2.2.1或更早版本中发布了一些功能)。
我的spark应用程序(从hive-tables读取)是否也受益于预先计算的统计数据?
如果Impala或Hive记录了Spark可以读取的表元数据中的Hive Metastore中的表统计信息(例如表大小或行计数)(并将其转换为自己的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兼容格式存储它们。
答案 1 :(得分:2)
我假设你在使用hive上下文的Spark(或)Spark-Sql上使用Hive。如果是这种情况,您应该在配置单元中运行analyze。
分析表&lt; ...&gt;通常需要在创建表之后运行,或者是否存在重要的插入/更改。如果这是MR或火花作业,您可以在加载步骤结束时执行此操作。
在分析时,如果您在火花上使用蜂巢 - 请使用以下链接中的配置。您可以在会话级别为每个查询设置此项。我在生产中使用了这个链接https://cwiki.apache.org/confluence/display/Hive/Hive+on+Spark%3A+Getting+Started中的参数,它运行正常。
答案 2 :(得分:1)
据我所知,impala上的计算统计数据是最新的实现,让您无需调整配置单元设置。
来自官方文件:
如果您使用基于Hive的收集统计信息的方法,请参阅 Hive wiki,了解有关Hive上所需配置的信息 侧。 Cloudera建议使用Impala COMPUTE STATS语句 避免潜在的配置和可扩展性问题 统计数据收集过程。
如果运行Hive语句ANALYZE TABLE COMPUTE STATISTICS FOR COLUMNS,Impala只能使用生成的列统计信息 表是未分区的。 Impala无法使用Hive生成的列 分区表的统计信息。
有用的链接: https://www.cloudera.com/documentation/enterprise/5-5-x/topics/impala_perf_stats.html