首先了解一下:Impala如何融入Hadoop生态系统

Impala使用了Hadoop生态系统中许多熟悉的组件。Impala可以作为消费者和生产者与其他Hadoop组件交换数据,因此它可以以灵活的方式适合您的ETL和ELT管道。

How Impala Works with Hive
Impala的一个主要目标是使SQL-on-Hadoop操作足够快速和高效,以吸引新的用户类别,并向新的用例类型开放Hadoop。在实用的情况下,它利用现有的Apache Hive基础设施(许多Hadoop用户已经拥有这些基础设施)来执行长时间运行的、面向批处理的SQL查询。
特别是,Impala将它的表定义保存在传统的MySQL或PostgreSQL数据库(称为metastore)中,Hive将这类数据保存在这个数据库中。因此,只要所有列都使用Impala支持的数据类型、文件格式和压缩编解码器,Impala就可以访问Hive定义或加载的表。
最初关注查询特性和性能意味着Impala可以用SELECT语句读取比用INSERT语句写入更多类型的数据。要使用Avro、RCFile或SequenceFile文件格式查询数据,可以使用Hive加载数据。
Impala查询优化器还可以使用表统计信息和列统计信息。最初,您使用Hive中的analysis TABLE语句收集这些信息;在Impala 1.2.2或更高版本中,使用Impala COMPUTE STATS语句。计算统计需要更少的设置,更可靠,不需要在impala-shell和Hive shell之间来回切换

Overview of Impala Metadata and the Metastore
正如在《Impala如何与Hive一起工作》中讨论的,Impala在名为metastore的中央数据库中维护关于表定义的信息。Impala还跟踪数据文件低层特征的其他元数据:
HDFS中块的物理位置。对于具有大量数据或多个分区的表,检索表的所有元数据可能非常耗时,在某些情况下需要几分钟。因此,每个Impala节点缓存所有这些元数据,以便将来对同一个表进行查询时重用。
如果更新了表定义或表中的数据,则集群中的所有其他Impala守护进程必须在对该表发出查询之前接收最新的元数据,替换已过期的缓存元数据。

在Impala 1.2及更高版本中,对于通过Impala发出的所有DDL和DML语句,元数据更新是自动的,通过catalogd守护进程进行协调。
通过hive中DDL和DML发行,或手动更改在HDFS文件,你仍然使用REFRESH语句(当新的数据文件被添加到现有表)或失效元数据语句(全新的表,或删除一个表后,执行一个HDFS平衡操作,或删除数据文件)。发出INVALIDATE METADATA本身将检索由metastore跟踪的所有表的元数据。如果您知道只有特定的表在Impala之外被更改,那么您可以为每个受影响的表发出REFRESH table_name,以仅检索这些表的最新元数据

How Impala Uses HDFS

Impala使用分布式文件系统HDFS作为它的主要数据存储介质。Impala依靠HDFS提供的冗余来防止单个节点上的硬件或网络中断。Impala表数据使用熟悉的HDFS文件格式和压缩编解码器在HDFS中物理地表示为数据文件。当新表的目录中出现数据文件时,Impala将读取所有文件,而不考虑文件名。新数据被添加到由Impala控制名称的文件中

INVALIDATE METADATA Statement

将一个或所有表的元数据标记为陈旧的。在通过Hive shell创建表之后,在该表可用于Impala查询之前,都是必需的。下次当前Impala节点对元数据无效的表执行查询时,Impala将在查询继续之前重新加载相关的元数据。与REFRESH语句执行的增量元数据更新相比,这是一个相对昂贵的操作,因此在向现有表添加新数据文件的常见场景中,最好使用REFRESH而不是使元数据失效。

语法:INVALIDATE METADATA [[db_name.]table_name]

默认情况下,所有表的缓存元数据都被刷新。如果指定表名,则只刷新该表的元数据。即使对于单个表,INVALIDATE METADATA也比REFRESH更昂贵,所以在为现有表添加新数据文件的常见情况下,请选择REFRESH。

INVALIDATE METADATA 和REFRESH是对应的:INVALIDATE METADATA 在后续查询需要时等待重新加载元数据,但是会重新加载表的所有元数据,这可能是一项昂贵的操作,尤其是对于有很多分区的大型表。REFRESH会立即重新加载元数据,但只加载新添加数据文件的块位置数据,从而降低了整体操作的开销。如果数据被以更广泛的方式更改,例如由HDFS平衡器重新组织,则使用INVALIDATE元数据来避免由于减少本地读取而导致的性能损失。Impala 1.1 REFRESH针对向现有表添加新数据文件的常见用例进行了优化,因此现在需要表名参数。

使用注意:
INVALIDATE METADATA是用于刷新全库或者某个表的元数据,包括表的元数据和表内的文件数据,它会首先清楚表的缓存,然后从metastore中重新加载全部数据并缓存,该操作代价比较重,主要用于在hive中修改了表的元数据,需要同步到impalad,例如create table/drop table/alter table add columns等。

语法:REFRESH [table] PARTITION [partition]
REFRESH是用于刷新某个表或者某个分区的数据信息,它会重用之前的表元数据,仅仅执行文件刷新操作,它能够检测到表中分区的增加和减少,主要用于表中元数据未修改,数据的修改,例如INSERT INTO、LOAD DATA、ALTER TABLE ADD PARTITION、LLTER TABLE DROP PARTITION等,如果直接修改表的HDFS文件(增加、删除或者重命名)也需要指定REFRESH刷新数据信息。

使用原则

如果在使用过程中涉及到了元数据或者数据的更新,则需要使用这两者中的一个操作完成,具体如何选择需要根据如下原则:
1)invalidate metadata操作比refresh要重量级
2)如果涉及到表的schema改变,使用invalidate metadata [table]
3)如果只是涉及到表的数据改变,使用refresh [table]
4)如果只是涉及到表的某一个分区数据改变,使用refresh [table] partition [partition]
5)禁止使用invalidate metadata什么都不加,宁愿重启catalogd。(注:项目中可以使用这种)

总结
REFRESH和INVALIDATE METADATA对于impala而言是比较重要的两个操作,分别处理数据和元数据的修改,其中REFRESH操作是同步的,INVALIDATE METADATA是异步的,本文详细介绍了两种语句的适用场景和执行原理,以及可能造成的影响,最重要的是,需要谨记这两种查询使用场景。

参考文档:https://www.cloudera.com/documentation/enterprise/5-11-x/topics/impala_langref_sql.html#langref_sql

Impala 中invalidate metadata和refresh相关推荐

  1. 正确使用Impala的invalidate metadata与refresh语句

    在Impala中,invalidate metadata与refresh语句都可以用来刷新表,但它们本质上还是不同的.本文简要分析一下,并说明它们应该在什么情况下使用. Impala on Hive介 ...

  2. 【impala】Impala中的invalidate metadata和refresh

    前言 Impala采用了比较奇葩的多个impalad同时提供服务的方式,并且它会由catalogd缓存全部元数据,再通过statestored完成每一次的元数据的更新到impalad节点上,Impal ...

  3. Impala中的invalidate metadata 和refrsh

    Impala中的invalidate metadata 和refrsh Impala是啥子? Impala是基于Hive的大数据实时分析查询引擎,直接使用Hive的元数据库Metadata,意味着im ...

  4. Impala invalidate metadata

    参考<开源大数据分析引擎Impala实战> 贾传青 著  清华大学出版社 211页: invalidate metadata: 更新元数据信息.在创建.删除.修改了数据库.表分区后使用本命 ...

  5. Invalidate, Update, Repaint, Refresh的异同

    #Invalidate, Update, Repaint, Refresh的异同 文章目录 Invalidate Update Repaint Refresh Invalidate Invalidat ...

  6. 了解Android中的meta-data及其应用

    前言 在日常的Android开发中,AndroidManifest中总会出现一些<meta-data>标签,或是第三方SDK配置信息,或是系统配置,不禁让人思考<meta-data& ...

  7. android 获取AndroidManifest.xml中的meta-data元素

    android 开发中: 在AndroidManifest.xml中,<meta-data>元素可以作为子元素, 被包含在<activity>.<application& ...

  8. MFC 中Invalidate的使用

    Invalidate的使用 在用MFC练习绘图的过程中,碰到了这个语句Invalidate();于是乎度娘了一把,又查找了一些资料,整理如下: 一.Invalidate函数原型: void Inval ...

  9. Android --- android中Invalidate和postInvalidate的区别

    Android中实现view的更新有两组方法,一组是invalidate,另一组是postInvalidate,其中前者是在UI线程自身中使用,而后者在非UI线程中使用.  Android提供了Inv ...

最新文章

  1. HOGDescriptor 描述类
  2. print输出 pytorch_pytorch 实现打印模型的参数值
  3. 建模步骤_【设计课堂】游戏手柄建模,看这14个步骤图就够了!
  4. 人生中最【无用】的二十件事
  5. 同步应用(python 版)
  6. 扎实的基础知识、高质量的代码
  7. 剑指offer 面试题32 从1到n整数中1出现的次数
  8. P(A)P(B|A)=P(B)P(A|B)
  9. ZooKeeper集群部署方式
  10. matlab 输出一行字,MATLAB输出结果的格式设置
  11. android system image,android systemimage默認大小以及如何修改
  12. 程序员被裁员失业有哪些软件众包外包平台可以接单?
  13. DNS原理及其解析过程【精彩剖析】
  14. 看英语书记录的单词-5
  15. 基建管控系统_基建管控系统在电网建设中的应用
  16. 红月服务器制作过程,红月3.8C私服架设教程
  17. 【转载】转别人写的HTMLCSS 详细笔记脉络--很详细
  18. 测试知识 - 关于电脑
  19. FEDformer: Frequency Enhanced Decomposed Transformer for Long-termSeries Forecasting(ICML2022)
  20. python编程培训多少钱-编程培训多少钱,python编程培训多少钱

热门文章

  1. 大数据高频面试:第 2 章 面试说明
  2. [评论随笔]明朝后期的中缅战争——此役之后关系中国西南版图
  3. XFire创建WebService服务端和客户端
  4. 安装和卸载Django
  5. Python django 宠物领养商城-源码下载
  6. java rs485
  7. 2021: 520”侯门一入深似海,从此萧郎是路人“
  8. Neo4j之cypher语法
  9. oracle 刷新num rows,oracle:dba_tables表中的一行为NUM_ROWS数值不与该表用COUNT(*)数量同步...
  10. 愤怒的小鸟计算机教案,大班体育活动《愤怒的小鸟》