kudu
kudu:面向结构化数据的开源的table存储引擎,支持低延迟的随机存取以及高效的分析处理
Kudu管理的是类似关系型数据库的结构化的表,表结构由类Sql的Schema进行定义,相比于HBase这样的NoSql类型的数据库,Kudu的行数据是由固定个数有明确类型定义的列组成,并且需要定义一个由一个或多个列组成的主键来对每行数据进行唯一索引,相比于传统的关系型数据库,kudu在索引上有更多的限制,比如暂时不支持二级索引,不支持主键的更新等等。
尽管表结构类似于关系型数据库,但是++Kudu自身并不提供SQL类型的语法接口++,而是由上层其他系统实现,比如目前通过Impala提供SQL语法支持。
Kudu底层API,主要面对简单的更新检索操作,Insert/Update/Delete等必须指定一个主键进行,而Scan检索类型的操作则支持条件过滤和投影等能力。
集群架构
Kudu的集群架构基本和HBase类似,采用主从结构,++Master节点管理元数据,Tablet节点负责分片管理数据++,和HBase不同的是,Kudu没有借助于HDFS存储实际数据,而是自己直接在本地磁盘上管理分片数据,包括数据的Replication机制,kudu的Tablet server直接管理Master分片和Slave分片,自己通过raft协议解决一致性问题等,多个Slave可以同时提供数据读取服务,相对于HBase依托HDFS进行Region数据的管理方式,自主性会强一些,不过比如Tablet节点崩溃,数据的迁移拷贝工作等,也需要Kudu自己完成。
内部和外部Impala表
使用Impala创建新的Kudu表时,可以将表创建为内部表或外部表。
内部
内部表由Impala管理,当您从Impala中删除它时,数据和表将被删除。使用Impala创建新表时,它通常是内部表。
外部
外部表(由其创建CREATE EXTERNAL TABLE)不由Impala管理,删除此类表不会使表从其源位置(此处为Kudu)中删除。相反,它只删除了Impala和Kudu之间的映射。这是Kudu提供的用于将现有表映射到Impala的语法中使用的模式。
什么时候使用kudu
- 大规模数据复杂的实时分析,例如大数据量的join。
- 数据有更新
- 查询准实时