FiloDB:用于大数据分析的分布式数据库

  • 张天雷

2015 年 11 月 5 日

话题:语言 & 开发架构

近期,TupleJump 杰出工程师、Spark 和 Cassandra 的用户和贡献者、Spark Job Server 的联合创建人和维护者 Evan Chan详细介绍了用于大数据分析的分布式数据库 FiloDB,对其主要特点和所包含模块进行了分析。

在当今的大数据时代,越来越多的企业需要对结构化的数据进行分析和查询,需要对流数据进行快速处理和更新。以视频分析为例,存储和分析系统可能每天处理的事件超过 30 亿个,并且要针对实时发生的事件进行统计和分析。如此大规模、高速度的数据处理迫切需要高可扩展性、易于更新和获取新数据、支持快速的分析查询、支持极其灵活查询的系统的支持。

作为一种列存储格式,Apache Parquet很好的实现了节省空间和减少 IO 的目的,满足了上述问题的部分需求。但是,Parquet 是一种读优化的格式,存在不支持幂等写、没有针对小更新的写优化、不适合时间序列和 IoT 等缺点。因此,很多开发人员转向了Apache Cassandra这种 NoSQL 数据库。Cassandra 很好的实现了水平可扩展、数据建模非常灵活、操作简单、实时和机器数据的获取容易等特性。但是,该数据库支持简单查询,而且是面向 OLTP(联机事务处理)的。为了更好的解决上述问题,TupleJump提出了一种开源、分布式、列存储数据库——FiloDB。

作为一种 OLAP(联机分析处理),FiloDB 可以获取机器数据、事件数据和时间序列数据等各种类型的流数据,然后进行非常快速的分析查询。其主要特点包括:

  • 分布式。FiloDB 在设计之初便考虑其底层平台为 Apache Cassandra 等分布式存储平台。因此,FiloDB 支持 Apache Spark 采用并行查询的方式来加速分析。
  • 列存储。FiloDB 通过使用带有字典压缩等节省空间技术的列存储来带来性能的提升。其性能与 Parquet 不相上下,比运行在 Cassandra 2.x 上的 Spark 要快 1 到 2 个数量级。
  • 版本化。FiloDB 增量的增加一列或者若干行作为一个新的版本。相比于基于文件的技术,FiloDB 提供更多的灵活性,使得回滚操作变得简单。

FiloDB 使用 Apache Cassandra 作为其存储引擎,使用 Apache Spark 作为其计算层。Apache Cassandra 作为一套开源分布式 Key-Value 存储系统,具有分布式、基于 column 的结构化和高可扩展性等特点。之前,很多用户已经尝试把 Apache Spark 和 Cassandra 表结合在一起,进行更加丰富的分析。然而,Cassandra CQL 表格面向行的存储方式使得把大量数据导入到 Spark 非常慢。FiloDB 充分利用了列存储的优势和 Apache Spark 的灵活性和丰富性,使得 Cassandra 的处理速度实现了 100 倍的提升。

此外,FiloDB 使用 Apache Spark SQL 和 DataFrame 作为其主要的查询机制。用户可以使用常见的 SQL 语法进行查询或者使用 Spark 的 JDBC 连接器链接 Tableau 等工具进行数据查询。同时,Spark 的机器学习 MLlib 库以及图形处理的 GraphX 都可以用到数据中。通过 Spark DataFrame 进行数据获取也非常容易。FiloDB 支持通过任何 JDBC 数据源、Parquet 和 Avro 文件、Cassandra 表等等进行数据获取。其中,还包括从 Spark Streaming 和 Apache Kafka 来插入数据。

在流应用方面,FiloDB 可以接受来自 Apache Kafka 的流事件、时间序列和 IoT 应用类型数据的一次性获取。而且,FiloDB 可以通过简单的 SQL 语句,完成极快速的特设分析。数据库中的每一行都有一个分割和排列键。使用相同键的写操作是幂等的。幂等写支持事件数据的一次完全存储。

最后,使用 Kafka+Spark+Cassandra+FiloDB 可以很好的实现整个 Lamba 架构。不需要 Cassandra 和 Hadoop 作为双重获取通道,使用 SMACK 栈(Spark/Scala,Mesos,Akka,Cassandra 和 Kafka)可以有效减少架构的资金投入。

目前,该开源项目已经放置在GitHub中。用户通过 git clone 下载后,可以直接启动filo-cli或者将其作为一个 Spark 数据源来使用。例如,通过下列命令即可验证数据集中的元数据:

./filo-cli --command list --dataset gdelt 

FiloDB 团队表示,非常希望用户能够反馈在 Cassandra 和 Spark 使用的案例或者进行代码贡献。这些反馈可能会直接影响到 FiloDB 下一步的一些特性。


感谢杜小芳对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

语言 & 开发架构