我们有大量的csv文件,文件/目录按日期和其他几个因素进行分区。例如,文件可能命名为/data/aaa/date/bbb.csv
有数千个文件,有些大小在gb范围内。总数据大小以TB为单位。
它们只被附加到,而且通常是大容量的,所以写性能并不是那么重要。我们不想将它加载到另一个系统中,因为我们运行的几个重要进程依赖于能够快速流式处理文件,这些文件是用c++编写的。
我正在寻找一种工具/库,它允许直接从数据中对数据进行类似sql的查询。我已经开始研究hive、spark和其他大数据工具,但是还不清楚它们是否可以直接从一个源访问分区数据,在我们的例子中是通过nfs。
理想情况下,我们可以通过提供列的描述以及分区信息来定义表。而且,文件是压缩的,因此处理压缩将是理想的。
他们的开源工具就是这样做的吗?我见过一个名为pivotal的产品,它声称可以做到这一点,但我们更愿意为开放源码分布式查询系统的数据编写自己的驱动程序。
任何线索都将不胜感激。
1条答案
按热度按时间nbnkbykc1#
Spark可以解决问题。它是内存中的分布式处理引擎。数据可以加载到集群中多个节点上的内存中,并且可以在内存中进行处理。您不需要将数据复制到另一个系统。
以下是您案例的步骤:
构建多节点spark集群
将nfs装载到其中一个节点上
然后您必须以rdd的形式将数据临时加载到内存中并开始处理它
它提供
支持scala、python、java等编程语言
支持sql上下文和Dataframe。您可以定义数据的结构并开始使用sql查询进行访问
支持多种压缩算法
局限性
数据必须装入内存才能由spark处理
您需要使用Dataframe来定义数据的结构,然后可以使用scala、python、java等编程语言中嵌入的sql查询数据
rdbms中的传统sql和spark等分布式系统中的sql之间存在细微的差别。你需要意识到这些。
对于hive,您需要将数据复制到hdfs。因为您不想将数据复制到另一个系统,所以配置单元可能不是解决方案。