0x00 前言
深入学习Impala的最主要一个原因就是目前在使用Impala的时候遇到了各种了性能问题,之前定位过一次问题,猜测其性能损耗的一个主要原因在INVALIDATE METADATA
和-r
参数上,但是对此并不是十分理解,因此需要深入一点底理解这些概念,方面更准确地定位问题。
下面将从三个角度来分析Impala元数据:Hive元数据库、INVALIDATE METADATA
语句和REFRESH
语句。
0x01 Hive元数据库
下图是我把hive元数据库倒出来之后,整理出来的表结构,整个元数据库表十分多,我只截取了一部分我认为相对来说比较重要的几个。
Impala 在传统的 MySQL 或 PostgreSQL 数据库称为 Metastore 上保持其表定义,Hive 也在相同的数据库上保存此类型的数据。因此,Impala 可以访问由 Hive 定义或加载的表。
对于具有大量数据或多个分区的表,检索表内所有元数据可能会花费很长时间,在某些情况下需要几分钟。因此,每个 Impala 节点缓存所有这些数据,以便在未来对同一表进行查询时重复使用。
如果更新表定义或表数据,集群中所有其他Impala Daemon必须接收到最新的元数据、更换过时的缓存元数据,然后再对该表发出查询。
0x02 INVALIDATE METADATA 语句