對應的操作為
invalidate metadata t_system_cpumemory;
refresh t_system_cpumemory;
深入學習impala的最主要乙個原因就是目前在使用impala的時候遇到了各種了效能問題,之前定位過一次問題,猜測其效能損耗的乙個主要原因在invalidate metadata
和-r
引數上,但是對此並不是十分理解,因此需要深入一點底理解這些概念,方面更準確地定位問題。
下面將從三個角度來分析impala元資料:hive元資料庫、invalidate metadata
語句和refresh
語句。
下圖是我把hive元資料庫倒出來之後,整理出來的表結構,整個元資料庫表十分多,我只擷取了一部分我認為相對來說比較重要的幾個。
impala 在傳統的 mysql 或 postgresql 資料庫稱為 metastore 上保持其表定義,hive 也在相同的資料庫上儲存此型別的資料。因此,impala 可以訪問由 hive 定義或載入的表。
對於具有大量資料或多個分割槽的表,檢索表內所有元資料可能會花費很長時間,在某些情況下需要幾分鐘。因此,每個 impala 節點快取所有這些資料,以便在未來對同一表進行查詢時重複使用。
如果更新表定義或表資料,集群中所有其他impala daemon必須接收到最新的元資料、更換過時的快取元資料,然後再對該錶發出查詢。
invalidate metadata
翻譯成中文就是「作廢元資料」的意思。
什麼時候需要將乙個或所有表的元資料標記為過時,即執行invalidate metadata?
主要是下面這三種情況:
在預設情況下invalidate metadata
操作會重新整理所有表的快取元資料。與由refresh
語句執行的元資料增量更新相比invalidate metadata
是一項需要耗費大量資源的操作。如果指定了乙個表名稱,invalidate metadata
只重新整理用於該錶的元資料。但是!即使對於單個表,invalidate metadata 也要比 refresh 耗費更多資源,因此當為現有表新增新資料檔案這一常規情況下,應優先考慮refresh。
注意:
必須加表名引數。
refresh table_name
只適用於 impala 已識別的表
要準確地對查詢做出響應,充當協調員的 impala 節點(通過 impala-shell、jdbc 或 odbc 連線的節點)必須具有有關 impala 查詢中引用的資料庫和表的當前元資料。
在 impala (而不是 hive) 中執行 alter table、insert 或其他修改表的語句之後,impala 節點的元資料更新不是必須的。impala 通過目錄服務自動處理元資料同步。
注意:在 impala 1.2 及更高版本中,-r 的需要頻率更低,因為 impala 中的 sql 語句導致的元資料更改會自動廣播到所有impala節點。
Hive 或 Impala 與 Hbase表結合
建立hbase表 create message info school 2.建立hive表 create external table hivemessage id int,name string,age int,address string,teacher string stored by org...
Hive和Impala的區別
hive和impala的區別 資料儲存 使用相同的儲存資料池都支援把資料儲存於hdfs,hbase。元資料 兩者使用相同的元資料。sql解釋處理 比較相似都是通過詞法分析生成執行計畫。執行計畫 hive 依賴於mapreduce執行框架,執行計畫分成 map shuffle reduce map s...
Impala重新整理Hive源資料
方式一 hue使用perform incremental metadata update,不要用invalidate all metadata and rebuild index,如果是invalidate metadata什麼都不加,寧願重新啟動catalogd。方式二 如果涉及到表的schema...