Apache Kudu 读后感

Kudu[1]是Apache下一个新开源产品,其介绍

        A new addition to the open source Apache Hadoop ecosystem, Apache Kudu (incubating) completes Hadoop's storage layer to enable fast analytics on fast data.

        其目标是很快的分析数据,在多处的介绍里面也看到其希望弥补HDFS和HBase之间的gap,前者是重离线批量,后者中在线随机,今天看了下Kudu的论文[2],记录感想。

        其在文章开始说如果用户想完成数据在线写入,然后又要分析,没有一个独立的软件能够完成(关系数据库就没提了,其实有些写入能力还是可以的,比如TokuDB),常见的架构是写入HBase然后导入到HDFS分析,或者写入Kafka,然后分别分入HBase和HDFS进行分析,作者认为这种架构有如下不足:

        1. 复杂:这不用讲了,几个大家伙一起肯定不是那么好搞懂的;

        2. 安全:猜测作者主要意思是数据在各个组件间流动,那么如果有一款组件安全性做的不好,就有导致数据泄露的风险;

        3. 一致性:上面方案中的数据同步机制一般都是通过异步队列进行的,存在一定的延时性,所以数据源和数据目标之间会有一部分数据不一致;

        4. 时效性:跟一致性是类似问题,因为是异步队列或者定期拉数据,那么就不能实时的分析此类的数据。

        所以他们就要做一款完整解决上面问题的产品了,Kudu大羚羊诞生。

        Kudu从整体看是列存储,就是列数据之间是分开存储的,这样扫描的时候如果只需要扫描部分列就会比较快(大块扫描场景);

        Kudu是强schema的,这样系统就有了更多的信息,可以进行更好的编码压缩,比如bitvector之类的,都是传统数据库早就发明的;

        Kudu支持range和hash两种方式对数据进行分片,这是个用户友好的选择,技术方案上差别不大;

        Kudu没有使用类似HDFS的共享存储,而是自己管理磁盘,这当然利于做将事情做到极致且利于快速推进,不过自己管理磁盘,数据复制也不是那么容易的。

        Kudu支持基于Raft协议提高可用性,支持动态增加、减少replica个数。这个好理解,反正存储都自己做了,一个完全的垂直产品,搞Raft是天经地义,MySQL兄弟们啥时候推出来这个?

        Kudu支持MVCC做事务控制,不过事务这一段写的太模糊,写了靠token机制,也写了靠类似Spanner的commit-wait(根本上来说,同步只有两种,一种是消息,就是给你打个电话告诉你点事情;一种基于一个共同的时间,比如约定7点开战,commit wait是后一种),不知道到底要干嘛。

        文中看到了一个东西叫做Fractured Mirrors(很早别人提的), 这个想法实在妙,三份replica的底层存储引擎可以不同,比如replica A更好的支持随机读,replica B更好的支持批量读,这样就可以在不同的场景中充分的利用各个replica的能力,在产品架构上,分层和垂直的设计半斤八两不分上下。

        Kudu对PK做了唯一性约束,也就是每次写会检查是否存在,是在引擎层做的,这似乎不是个很好的设计,做的太硬了。

        Kudu也要做compaction来移除无效数据,或者整理数据以便优化读,这里其将数据文件切小,再加上很好的优先级控制和一些启发式算法,对各个replica的时机也做控制,那么还是能做到尽量少的影响业务。

        整体而言,Kudu似乎想做一个集合OLTP/OLAP的东西,在线写入,高可用,可选的一致性,即时快速的扫描分析,好嘛。大一统的产品能不能做成要打个问号,不过我个人倒觉得如果沿着这条路,MySQL类似的产品们希望更大。

[1] Kudu: http://getkudu.io/

[2] Kudu 论文:http://getkudu.io/kudu.pdf

时间: 2024-10-07 20:45:22

Apache Kudu 读后感的相关文章

独家 | 一文读懂Apache Kudu

前言 Apache Kudu是由Cloudera开源的存储引擎,可以同时提供低延迟的随机读写和高效的数据分析能力.Kudu支持水平扩展,使用Raft协议进行一致性保证,并且与Cloudera Impala和Apache Spark等当前流行的大数据查询和分析工具结 合紧密.本文将为您介绍Kudu的一些基本概念和架构以及在企业中的应用,使您对Kudu有一个较为全面的了解. 一.为什么需要Kudu Kudu这个名字听起来可能有些奇怪,实际上,Kudu是一种非洲的大羚羊,中文名叫"捻角羚",

实用 | Apache Kudu读写路径

Kudu的体系架构已经具备了提供良好分析性能的能力,同时还能够接收插入和更新操作的连续流.为了使用户能够专注于其最关心的内容,Kudu提供了简单的API,而封装了后台的复杂性.但是一些高级用户希望了解内部部件,以理解Kudu如何能够快速分析快速数据,以及如何更好地利用其功能.本篇博文旨在向用户介绍向Kudu内写入数据以及从Kudu中读取数据时在其后台会发生什么.本篇博文假设读者对本文中所介绍的Kudu架构已经有一个基本的了解. 多版本并发控制(MVCC) 数据库使用并发控制方法确保用户始终看到一

【Spark Summit EU 2016】Apache Kudu&Spark SQL:对快数据进行快速分析

本讲义出自 Mike Percy在Spark Summit EU上的演讲,主要介绍了Cloudera开发的大型开源储存引擎 Kudu,该引擎用于储存和服务大量不同类型的非结构化数据,并且介绍了使用Kudu+Spark SQL对于数据进行快速分析的方法,并分享了多个使用Kudu+Spark SQL进行数据分析的实际案例.

比较Apache Hadoop 生态系统中不同的文件格式和存储引擎的性能

主题 这篇文章提出了在Apache Hadoop 生态系统中对比一些当前流行的数据格式和可用的存储引擎的性能:Apache Avro, Apache Parquet, Apache HBase 和 Apache Kudu 空间效率, 提取性能, 分析扫描以及随机数据查找等领域.这有助于理解它们中的每一个如何(何时)改善你的大数据工作负载的处理能力. 引言 最初把hadoop文件格式和存储引擎做比较的想法是在初始系统修订版之一的驱动下完成的 –这个系统是在CERN中大规模调节Hadoop-ATLA

满满的技术干货!Spark顶级会议Apache Spark Summit精华讲义分享

Apache Spark Summit是Spark技术的顶级会议,这里大咖云集,一同探讨世界上最新的Spark发展动态以及产品应用和技术实践. 讲义资料持续更新中... 2月20日更新 [Spark Summit East 2017]工程快速索引[Spark Summit East 2017]提升Python与Spark的性能和互操作性[Spark Summit East 2017]Spark中的容错:从生产实践中获取的经验[Spark Summit East 2017]Spark:将数据科学作

大数据生态圈&Docker发展概况:最新动态及国内情况

目录: [大数据生态圈] Hadoop Hadoop 3.0.0 Alpha版本发布 Druid Druid 0.9.2版本发布 Kudu Apache Kudu 1.1.0正式发布 HAWQ HAWQ 2.1.0.0企业版正式发布 [Docker发展概况] 官方版本发布情况 国内情况 落地情况 感谢名单   大数据生态圈 一.Hadoop   Hadoop 3.0.0 Alpha版本发布   由于Hadoop 2.0是基于JDK 1.7开发的,而JDK 1.7在2015年4月已停止更新,所以H

【PDF大放送】Spark&Hadoop Summit精选分享PDF合集

大数据本身是个很宽泛的概念,Hadoop生态圈(或者泛生态圈)基本上都是为了处理超过单机尺度的数据处理而诞生的.你可以把它比作一个厨房所以需要的各种工具,锅碗瓢盆,各有各的用处,互相之间又有重合.你可以用汤锅直接当碗吃饭喝汤,你可以用小刀或者刨子去皮.但是每个工具有自己的特性,虽然奇怪的组合也能工作,但是未必是最佳选择. Hadoop是一个分布式系统基础架构,用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力进行高速运算和存储.Hadoop实现了一个分布式文件系统(Had

Hadoop 生态系统

1.概述 最近收到一些同学和朋友的邮件,说能不能整理一下 Hadoop 生态圈的相关内容,然后分享一些,我觉得这是一个不错的提议,于是,花了一些业余时间整理了 Hadoop 的生态系统,并将其进行了归纳总结,进而将其以表格的形式进行了罗列.涉及的内容有以下几点: 分布式文件系统 分布式编程模型 NoSQL 数据库 SQL-On-Hadoop 数据采集 编程服务中间件 调度系统 系统部署 数据可视化 2.内容 2.1 分布式文件系统 2.1.1 Apache HDFS 在分布式文件系统当中,首先为

MySQL · 实现分析 · HybridDB for MySQL 数据压缩

概述 数据压缩是一个把输入数据集按照一定的算法变换成更小的数据集的过程,解压是压缩的逆过程.如果算法对数据本身的语义了解得越多,则越可能利用语义信息进行针对性的处理,获得更好的压缩效果.数据库系统中用得比较多的压缩算法可以分为两大类:基于块的压缩.基于值的压缩.前者更为常见一些,在 OLTP 以及 OLAP 系统中都会用到,例如 InnoDB.TokuDB.HybridDB 中的块压缩:后者更多的用在 OLAP 的列存引擎内,例如 HybridDB for MySQL 中的列压缩.为了区别它们,