开发者社区> 瑾谦> 正文

Phoenix 索引生命周期

简介: 本文主要介绍云HBASE上Phoenix索引状态的生命周期,帮助大家解惑“为什么我的phoenix索引不能正常使用了?” 索引状态 索引总共有以下几个状态,其状态信息存储在SYSTEM.CATALOG表中。
+关注继续查看

本文主要介绍Phoenix索引状态的生命周期,帮助大家解惑“为什么我的phoenix索引不能正常使用了?”

索引状态

索引总共有以下几个状态,其状态信息存储在SYSTEM.CATALOG表中。可以通过以下SQL来查看所有索引表信息:

select TABLE_NAME,DATA_TABLE_NAME,INDEX_TYPE,INDEX_STATE,INDEX_DISABLE_TIMESTAMP
from system.catalog where INDEX_TYPE is not null;

Screen_Shot_2017_11_09_at_20_54_05

SQL中字段:

  • TABLE_NAME表示索引表名
  • DATA_TABLE_NAME表示原数据表名
  • INDEX_TYPE表示索引类型
    GLOBAL(1)

LOCAL(2)

  • INDEX_STATE表示索引状态
    BUILDING("b")

USABLE("e")
UNUSABLE("d")
ACTIVE("a")
INACTIVE("i")
DISABLE("x"))
REBUILD("r")

DISABLE 表示索引将处于不可用的维护状态,同时将不能用于查询中。
REBUILD 表示索引将完成重建,同时一旦重建完成此索引将能被在此用于查询中。
BUILDING 表示将从索引不可用的时间戳处重建索引直到重建完成。
INACTIVE/UNUSABLE 表示索引将不能用于查询中,但索引仍然在不可用的维护状态。
ACTIVE/USABLE 表示索引表能被正常用于查询中。

8062_screen_shot_2016_09_28_at_35743_pm
注:disable状态的索引必须重建,不能设置为USABLE状态。

  • INDEX_DISABLE_TIMESTAMP
    表示索引disable时的时间戳。当索引是active或者手动置为disable时值为0,当索引写失败引起disable时值为非0。

自动重建索引过程

  1. MetaDataRegionObserver类负责运行重建索引线程,SYSTEM.CATALOG表是disable索引表更新的关键,因为它记录着索引表的所有状态。
  2. INACTIVE和DISABLE索引将会被选择重建(所有Online索引表region)。
  3. 所有表的所有索引表重建过程将串行执行(运行在cp上)。
  4. 索引表的建立是从disabled timestamp开始的。(此处会生成disable 时间到现在时间, 并带有需要更新索引信息的scan, RS在执行scan时触发cp重建索引)
  5. 对应的执行sql "UPSERT /+ NO_INDEX / INTO index_table_name(indexedCols) select dataCols from data_table” 完成索引同步。

索引重建生命周期

8063_screen_shot_2016_09_28_at_35855_pm

控制自动重建索引的属性

  • "phoenix.index.failure.handling.rebuild"(default true)
  • "phoenix.index.failure.handling.rebuild.interval" (default 10 seconds)

更新索引表失败处理实践

  1. 写索引表失败会试图禁用索引,向SYSTEM.CATALOG表写入索引状态。
  2. 在集群状态异常情况下,比如存在rit。此时CATALOG表的写操作可能失败,也就是状态不能得到更新,索引数据也同步失败,导致不断的执行起重建索引任务。
  3. 为了确保索引已经能得到更新,杀死RS,来触发WAL的replay,这样就能使得索引表的更新在WAL replay过程中得到重试。 同时需要手工介入,通过alter命令设置索引状态使之可用。

以上是社区版本通过RS failover来解决问题,但这种方法也存在一些问题:

  1. 雪崩效应,整个集群的RS全部自杀:因为自杀的RS上也host了很多region,这些region可能是其他RS的索引表。某一RS自杀后,会导致其他RS的索引表更新失败,从而触发其他RS自杀,而其他RS自杀又会因为同样的原因导致更多的RS自杀,恶性循环。在很短的时间内,集群中所有RS都自杀了。
  2. 禁用的index表需要人工介入才能启用,在集群多了以后,会成为管理负担
  3. 禁用index表之后,本来通过命中索引表来完成的查询,就需要对主表做全表扫描来完成了。小scan会立即变成大scan,这可能会快速耗尽RS的资源,并导致client端大量超时。

云HBASE针对以上问题,提出了以下解决方法,并已经实现。

  1. 在sync WAL之前出现的问题,由client负责重试: 因为没有WAL没有写下去,就不会导致主表和索引表的数据不一致。
  2. 在sync WAL之后出现的问题,由RS负责重试:因为WAL已经写下去了,此时,部分索引表的更新也可能已经完成,客户端如果不重试且RS不重启,主表和索引表会保持长时间的不一致。

索引表一致性

参见下一篇二级索引文章

参考

  1. https://community.hortonworks.com/articles/58818/phoenix-index-lifecycle.html
  2. https://phoenix.apache.org/secondary_indexing.html

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Hive内部表与外部表的区别及使用场景
Hive内部表与外部表的区别及使用场景
69 0
在 Kubernetes 上快速测试 Citus 分布式 PostgreSQL 集群(分布式表,共置,引用表,列存储)
在 Kubernetes 上快速测试 Citus 分布式 PostgreSQL 集群(分布式表,共置,引用表,列存储)
157 0
Apache Hudi重磅特性解读之全局索引
Hudi表允许多种类型操作,包括非常常用的upsert,当然为支持upsert,Hudi依赖索引机制来定位记录在哪些文件中。 当前,Hudi支持分区和非分区的数据集。分区数据集是将一组文件(数据)放在称为分区的桶中的数据集。一个Hudi数据集可能由N个分区和M个文件组成,这种组织结构也非常方便hive/presto/spark等引擎根据分区字段过滤以返回有限的数据量。而分区的值绝大多数情况下是从数据中得来,这个要求一旦一条记录映射到分区/桶,那么这个映射应该 a) 被Hudi知道;b) 在Hudi数据集生命周期里保持不变。
295 0
hbase构建二级索引解决方案
HBase的一级索引就是rowkey,我们仅仅能通过rowkey进行检索。假设我们相对Hbase里面列族的列列进行一些组合查询,就只能全表扫描了。表如果较大的话,代价是不可接受的,所以要提出二级索引的方案。
358 0
hive内部表和外部表的区别
hive内部表和外部表的区别
221 0
Clickhouse-基本操作之引擎与表的创建
表引擎资料参考:https://clickhouse.com/docs/zh/engines/table-engines/
143 0
数据查询的玄铁剑:阿里云HBase二级索引功能解析
HBase原生提供了主键索引,用户可以根据rowkey进行高效的单行读、前缀匹配、范围查询操作。但若需要使用属性列进行查询时,则只能使用filter在查询范围内进行逐行过滤。在扫描范围较大时,会浪费大量的IO,请求RT也无法保证。为此,HBase增强版推出了原生二级索引来解决非rowkey查询的性能问题。
1621 0
直播:Phoenix 全局索引原理与实践
全局索引是Phoneix的核心特性之一,此话题主要内容包括phoenix mutable表全局索引机制原理, 场景应用以及最佳实践。
2520 0
[Phoenix] 十、全局索引设计实践
全局索引是Phoenix的重要特性,合理的使用二级索引能降低查询延时,让集群资源得以充分利用。 本文将讲述如何高效的设计和使用索引。
6284 0
cassandra数据表的设计
cassandra数据作为一个非常类似于关系型数据库的nosql,其在数据表的设计上于关系型数据库有着一些不同的地方。本文尽个人所理解的内容做简单的剖析。 Primary Key     关系型数据的Primary Key主要是作为数据的唯一性标识用的,对具体业务并没有太大的帮助,比如大量使用的自增id作为唯一主键,而这个id实际上并不是业务的数据,只是作为一个技术上保证唯一性标识的手段而已。
3884 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Phoenix 全局索引原理与实践
立即下载
HBase2.0重新定义小对象实时存取
立即下载
Solr增强HBase检索能力基础介绍及场景
立即下载