FiloDB:用于大数据分析的分布式数据库
近期,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下一步的一些特性。