2016-09-22 28 views
4

为了提高性能(例如对于连接),建议首先计算表静态值。在蜂巢或黑斑羚中计算表格统计信息是否会加速apache的火花?

在蜂巢我可以做::

analyze table <table name> compute statistics; 

在帕拉:

compute stats <table name>; 

难道我的火花的应用程序(从蜂房表读数)也从预先计算的统计数据中受益?如果是的话,我需要运行哪一个?他们是否都将这些统计数据保存在蜂房的Metastore中?我使用Cloudera的火花1.6.1 5.5.4

注: 在火花1.6.1(https://spark.apache.org/docs/1.6.1/sql-programming-guide.html)为参数spark.sql.autoBroadcastJoinThreshold的文档,我发现一个提示:

注意,目前的统计数据仅支持Hive Metastore 表,其中命令ANALYZE TABLE COMPUTE STATISTICS noscan已运行。

回答

0

根据我的理解,计算impala上的统计数据是最新的实施方案,并将您从调整配置单元设置中解脱出来。

来自官方的文档:

如果使用收集统计数据的基于配置单元的方法,请参阅 蜂巢维基关于蜂房 侧所需的配置信息。 Cloudera建议将Impala COMPUTE STATS语句用于 ,以避免与统计数据收集过程相关的潜在配置和可伸缩性问题。

如果运行蜂巢声明ANALYZE TABLE计算统计FOR 柱,黑斑羚只有在 表是未分区的使用所产生的列统计信息。 Impala不能使用分区表的Hive生成列 统计信息。

有用的链接: https://www.cloudera.com/documentation/enterprise/5-5-x/topics/impala_perf_stats.html

1

我假设你正在使用蜂箱火花(或)火花-SQL与蜂巢环境。如果是这种情况,您应该在配置单元中运行分析。

分析表< ...>通常需要在创建表之后或存在重要的插入/更改时运行。如果这是MR或火花作业,您可以在加载步骤结束时执行此操作。

在分析时,如果您在火花上使用配置单元 - 请同时使用下面链接中的配置。您可以在每个查询的会话级别上设置它。我已经在生产中使用了这个链接https://cwiki.apache.org/confluence/display/Hive/Hive+on+Spark%3A+Getting+Started中的参数,它工作正常。

0

这是即将到来的星火2.3.0(也许还包括一些功能已经在2.2.1或ealier释放)。

我的火花应用程序(从配置表中读取)是否也受益于预先计算的统计信息?

它可以,如果黑斑羚或蜂巢记录表的统计信息(如表的大小或行数)在火花可以读取(并转化为自己的星火统计查询规划)表元数据的蜂巢metastore。

您可以使用DESCRIBE EXTENDED SQL命令spark-shell轻松检查出来。

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计算火花使用一个统计量,即表的总大小(没有行计数由于noscan选项度量)。如果Impala和Hive将其记录到“适当”位置,则Spark SQL将在DESC EXTENDED中显示它。

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


列统计信息存储(在特定的火花序列化格式),在表的属性,我真的很怀疑,黑斑羚或蜂巢可以计算的统计数据,并将它们存储在SQL星火兼容的格式。