impala元数据放到mysql_impala系列: 同步Hive元数据和收集统计信息
---====================
-- Impala 獲取hive 的 metadata
---====================
Impala 通常和Hive共用同一個metadata 數(shù)據(jù)庫(通常是MySQL/PostgreSQL), 所以Impala 能夠讀取到Hive的元數(shù)據(jù)信息. 如果Impala需要訪問Hive表, 需要將Hive metadata 刷新到impala中.
在Hive中Create/Drop表后, 或者HDFS rebalance,或者手工刪除HDFS的文件后, 則需要在impala中執(zhí)行下面兩行命令:
INVALIDATE METADATA table_name;
describe table_name;
第一行命令 INVALIDATE METADATA 告訴impala 指定的 table 元數(shù)據(jù)已經(jīng)過期, impala 將在下一次使用到該表時自動刷新元數(shù)據(jù), 第二行命令即觸發(fā)impala去更新元數(shù)據(jù), 以免將來真正使用該表耗時太久.
如果Impala已經(jīng)知道了Hive表的存在后, 又通過Hive增加或刪除分區(qū)或alter table, 使用 refresh 命令即可更新元數(shù)據(jù). refresh是對元數(shù)據(jù)進行增量更新, 和INVALIDATE METADATA相比, refresh命令使用成本低很多.
REFRESH table_name; --增量刷新全表
refresh [table_name] [PARTITION (key_col1=val1 [, key_col2=val2...])]]; --僅僅刷新指定分區(qū)
INVALIDATE METADATA 命令如果不指定表名, 則將所有表的元數(shù)據(jù)都標記為過期, 慎用!
---====================
-- 收集統(tǒng)計信息
---====================
Impala 僅僅能部分利用Hive的統(tǒng)計信息, 要想得到好的執(zhí)行效率, impala需要收集統(tǒng)計信息.
1. 檢查統(tǒng)計信息
show table stats table_name; --顯示表和分區(qū)級別的統(tǒng)計信息.
如果返回第一列 #Rows 值-1, 表名還沒有收集過統(tǒng)計信息.
show column stats table_name ; --顯示列級別的統(tǒng)計信息.
2. 收集統(tǒng)計信息
Impala 的compute stats 一條命令同時采集表和字段兩種信息, 使用起來非常方便.
它增量和全量兩種寫法, 在從未收集過統(tǒng)計信息的前提下, 并且數(shù)量一致的情況下, 使用COMPUTE STATS命令要比COMPUTE INCREMENTAL STATS速度更快. 所以對于非分區(qū)表, 推薦使用COMPUTE STATS.
COMPUTE STATS table_name ; -- 對于非分區(qū)表, 推薦使用COMPUTE STATS, 速度更快
COMPUTE INCREMENTAL STATS table_name ;--對于分區(qū)表, 推薦使用COMPUTE INCREMENTAL STATS, 速度更快一些.
如果table通過Hive增加了分區(qū), 需要先進行refresh, 然后增量收集統(tǒng)計信息.
REFRESH table_name;
COMPUTE INCREMENTAL STATS table_name;
3. 刪除統(tǒng)計信息
DROP STATS table_name
DROP INCREMENTAL STATS table_name PARTITION (key_col1=val1 [, key_col2=val2...])]
總結(jié)
以上是生活随笔為你收集整理的impala元数据放到mysql_impala系列: 同步Hive元数据和收集统计信息的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java多语言编程语言_为什么很多程序员
- 下一篇: java 10000阶乘_Java Fo