【问题标题】:Compute HIVE statistics in Apache Spark在 Apache Spark 中计算 HIVE 统计信息
【发布时间】:2018-09-24 01:57:11
【问题描述】:

我正在尝试从 Apache Spark 计算 HIVE 表统计信息:

`sqlCtx.sql('ANALYZE TABLE t1 COMPUTE STATISTICS')`

我还执行语句来查看收集了什么:

sqlCtx.sql('DESC FORMATTED t1')

我可以看到我的统计数据已收集。 但是,当我在 HIVE 客户端(Ambari)中执行相同的语句时 - 没有显示统计信息。如果它由 Spark 收集,它是否仅对 Spark 可用? spark 会将其存储在其他地方吗?

另一个问题。

我还计算该表中所有列的统计信息:

sqlCtx.sql('ANALYZE TABLE t1 COMPUTE STATISTICS FOR COLUMNS c1,c2')

但是当我想在 spark 中查看此统计信息时,它因不支持的 sql 语句异常而失败:

sqlCtx.sql('DESC FORMATTED t1 c1')

根据文档,它是有效的蜂巢查询。 它有什么问题?

感谢您的帮助。

【问题讨论】:

  • 可能是因为启用了 Hive 支持的 Spark 不是 Hive 客户端。 Spark 恰好“知道”如何使用 Hive 元存储以及如何调用 Hive 函数。

标签: apache-spark hive


【解决方案1】:

表名大写即可。

select param_key, param_value 
from TABLE_PARAMS tp, TBLS t 
where tp.tbl_id=t.tbl_id and tbl_name = '<table_name>' 
and param_key like 'spark.sql.stat%';

【讨论】:

    【解决方案2】:

    Apache Spark 将统计信息存储为“表参数”。 为了能够检索这些统计信息,我们需要连接到 HIVE 元存储和 .执行如下查询

    select param_key, param_value 
    from table_params tp, tbls t 
    where tp.tbl_id=t.tbl_id and tbl_name = '<table_name>' 
    and param_key like 'spark.sql.stat%';
    

    【讨论】:

    • 我试过这个并得到如下异常:- org.apache.spark.sql.AnalysisException: Table not found: table_params
    • 重要的一点:你需要在 HIVE metastore 上做,而不是 HIVE
    猜你喜欢
    • 1970-01-01
    • 2017-01-30
    • 1970-01-01
    • 1970-01-01
    • 2020-01-21
    • 1970-01-01
    • 2016-06-17
    • 2016-05-18
    • 2019-02-27
    相关资源
    最近更新 更多