对 350TB 的 csv 数据执行 SQL 分析的工具

数据挖掘 大数据 数据集 数据争吵
2021-09-22 15:27:31

简而言之,对 350TB 的 csv 数据执行即席 sql(样式)查询的最佳方法/技巧/技术/工具是什么?如果我们放弃“sql”要求,是否还有其他选择,工具明智的做法会更快?

是我最好的选择 Hive 和我无法使用的服务器吗?由于这种大小的数据集无法接近内存,火花会有什么好处吗?我还有其他相关的问题/想法,但不想陷入困境。

背景

数据最初以二进制格式存储,然后转换为 ASCII。ASCII 文件正在变成 CSV(实际上是制表符分隔,但无论如何)。1 个二进制文件 = 1 个 ASCII 文件 = 1 个 CSV 文件。数据格式非常简单,200 到 500 个标题列,每行是一个属性的样本,间隔为 1 秒。

Example (first row is header):
t,attribute1,attribute2...<attributeX>
1,val1,val2...<valx>
2,val1,val2...<valx>
3,val1,val2...<valx>
...
X,val1,val2...<valx>

可以运行的示例查询。

1) 取 t 值(t 是非唯一的,因为每个文件从 1 开始并在某个随机时间结束)并比较在 100-1000 的 t 值之间的不同属性值,用于在 100-1000 采样的所有其他属性。

2) UTC 值作为属性值(列之一),与 #1 的想法相同,我们可能希望比较 X 日期之间的所有属性,并将这些属性与来自不同 UTC 范围的 Y 数据进行比较。

3)我们可能想找出一个单一的特定属性和趋势,从我们最早看到该属性的不同特定属性开始。

这些是提供给我的最佳示例,但可能存在其他类型的查询。如果您确实有一个问题,我们为什么不去掉将二进制数据转换为 CSV 数据的中间人,理论上我们可以。但是,转换文件的程序非常老旧并且非常复杂。

2个回答

有很多工具能够支持这样的查询(如您提到的 Hive 或 Spark),并且在查询数量、要查询数据的人数、什么样的 BI 方面确实取决于您的要求或您可能想与它一起使用的报告工具等。

不仅如此,您的要求将来可能会发生变化。如果您提供更简单的方法来查询数据,那么您周围的人就会使用它。

例如,如果您选择将该数据加载到 Amazon Redshift ( https://aws.amazon.com/redshift/ ),它将为您提供完整的 SQL 灵活性、非常快的性能以及连接到多个 BI、可视化的能力和报告工具。当您将数据复制到 Redshift 中时,它会被压缩(基于列的编码)5-8 次,您可以将所有数据放在 Redshift 的 DS2.8XL 的 6 个节点的集群中,为您的 POC 保存几周。

压缩的概念也可以应用于不同的解决方案。例如,您可以将其转换为 Parquet ( https://parquet.apache.org/ ) 格式,而不是使用 CSV 格式,从而节省存储空间并提高性能,因为您需要四处移动和扫描更少字节的数据. 在 Parquet 中获得数据后,您可以使用 Presto 进行查询,就像 Netflix 正在做的那样 - http://techblog.netflix.com/2014/10/using-presto-in-our-big-data-platform。 html

关于 Spark,即使您没有将所有数据都放入内存,它也会有所帮助。Spark 还可以帮助您将 Zeppelin ( https://zeppelin.incubator.apache.org/ ) 用作交互式笔记本,具有良好的可视化功能,以及使用 Scala、Python 甚至 R 和 SparkR 编写代码。

谈论 SQL 世界:从您的需求角度来看,基于并行列的 DB Vertica 似乎很合适。虽然它不是免费的。如果您有良好的预算,更强大的解决方案是 Teradata。

您需要至少 70 个心轴才能将数据存储在现场 +/- 压缩和冗余的 HDD (5TB) 上。如果可以缓存,可能会添加更多 RAM 或 SDD。这可能适合 3-10 个盒子,具体取决于您需要的处理能力。

剩下的就是关于数据管理、功能集、优化、您自己花费的时间和价格之间权衡的软件问题。Teradata 和 Vertica 肯定会减少您编写查询和优化查询、管理数据所花费的时间。如果您需要加入,则该优势会更大。