Hadoop生态圈列式存储系统

Kudu 是一个针对 Apache Hadoop 平台而开发的列式存储管理器。Kudu 共享 Hadoop 生态系统应用的常见技术特性: 它在 commodity hardware(商品硬件)上运行,horizontally scalable(水平可扩展),并支持 highly available(高可用)性操作。此外,Kudu 还有更多优化的特点:

OLAP 工作的快速处理。

与 MapReduce,Spark 和其他 Hadoop 生态系统组件集成。

与 Apache Impala(incubating)紧密集成,使其与 Apache Parquet 一起使用 HDFS 成为一个很好的可变的替代方案。

强大而灵活的一致性模型,允许您根据每个 per-request(请求选择)一致性要求,包括 strict-- serializable(严格可序列化)一致性的选项。

针对同时运行顺序和随机工作负载的情况性能很好。

使用 Cloudera Manager 轻松维护和管理。

High availability(高可用性)。Tablet server 和 Master 使用 Raft Consensus Algorithm 来保证节点的 -- 高可用,确保只要有一半以上的副本可用,该 tablet 便可用于读写。例如,如果 3 个副本中有 2 个或 5 个副本中的 3 个可用,则该 tablet 可用。即使在 leader tablet 出现故障的情况下,读取功能也可以通过 read-only(只读的)follower tablets 来进行服务。

结构化数据模型。

通过结合这些所有的特性,Kudu 的目标是支持应用家庭中那些难以在当前Hadoop 存储技术中实现的应用。Kudu 常见的几个应用场景:

实时更新的应用。刚刚到达的数据就马上要被终端用户使用访问到。

时间序列相关的应用,需要同时支持:

根据海量历史数据查询。
必须非常快地返回关于单个实体的细粒度查询。

实时预测模型的应用,支持根据所有历史数据周期地更新模型。

有关这些和其他方案的更多信息,请参阅 Example Use Cases。

Kudu-Impala 集成特性

CREATE/ALTER/DROP TABLE

Impala 支持使用 Kudu 作为持久层来 creating(创建),altering(修改)和 dropping(删除)表。这些表遵循与 Impala 中其他表格相同的 Internal / external(内部 / 外部)方法,允许灵活的数据采集和查询。

INSERT

数据可以使用与那些使用 HDFS 或 HBase 持久性的任何其他 Impala 表相同的语法插入 Impala 中的 Kudu 表。

UPDATE / DELETE

Impala 支持 UPDATE 和 DELETE SQL 命令逐行或批处理修改 Kudu 表中的已有的数据。选择 SQL 命令的语法与现有标准尽可能兼容。除了简单 DELETE 或 UPDATE 命令之外,还可以 FROM 在子查询中指定带有子句的复杂连接。

Flexible Partitioning(灵活分区)

与 Hive 中的表分区类似,Kudu 允许您通过 hash 或范围动态预分割成预定义数量的 tablets,以便在集群中均匀分布写入和查询。您可以通过任意数量的 primary key(主键)列,任意数量的 hashes 和可选的 list of split rows 来进行分区。参见模式设计。

Parallel Scan(并行扫描)

为了在现代硬件上实现最高的性能,Impala 使用的 Kudu 客户端可以跨多个 tablets 扫描。

High-efficiency queries(高效查询)

在可能的情况下,Impala 将谓词评估下推到 Kudu,以便使谓词评估为尽可能接近数据。在许多任务中,查询性能与 Parquet 相当。

有关使用 Impala 查询存储在 Kudu 中的数据的更多详细信息,请参阅 Impala 文档。

概念和术语

Columnar Data Store(列式数据存储)

Kudu 是一个 columnar data store(列式数据存储)。列式数据存储在强类型列中。由于几个原因,通过适当的设计,Kudu 对 analytical(分析)或 warehousing(数据仓库)工作会非常出色。

Read Efficiency(高效读取)

对于分析查询,允许读取单个列或该列的一部分同时忽略其他列,这意味着您可以在磁盘上读取更少块来完成查询。与基于行的存储相比,即使只返回几列的值,仍需要读取整行数据。

Data Compression(数据压缩)

由于给定的列只包含一种类型的数据,基于模式的压缩比压缩混合数据类型(在基于行的解决方案中使用)时更有效几个数量级。结合从列读取数据的效率,压缩允许您在从磁盘读取更少的块时完成查询。请参阅 数据压缩

Table(表)

一张 table 是数据存储在 Kudu 的位置。表具有 schema 和全局有序的 primary key(主键)。table 被分成称为 tablets 的 segments。

Tablet

一个 tablet 是一张 table 连续的 segment,与其它数据存储引擎或关系型数据库中的 partition(分区)相似。给定的 tablet 冗余到多个 tablet 服务器上,并且在任何给定的时间点,其中一个副本被认为是 leader tablet。任何副本都可以对读取进行服务,并且写入时需要在为 tablet 服务的一组 tablet server之间达成一致性。

Tablet Server

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/a44709ec172375d9ab1d7cb1df781478.html