通过Spark Streaming处理的数据的长期存储(许多写入,少量读取)有什么更好的选择:Parquet,HBase还是Cassandra?或者是其他东西?有什么权衡取舍?
答案 0 :(得分:1)
根据我的经验,我们使用Hbase作为火花流数据的数据存储(我们也有相同的场景,许多写入和少量读取),因为我们使用hadoop,hbase与hadoop本机集成,它去了以及.. 强>
上面我们使用了来自安慰的消息的高速率。
HBase非常适合进行基于范围的扫描。 Casandra以其可用性和许多其他东西而闻名......
但是,我还可以观察到许多项目中的一个大趋势,他们只是通过带有spark数据帧(SaveMode.Append)
的火花流将分区结构中的rawdata存储在hdfs(parquet + avro)中,并且它们正在处理rawdata with Spark
hdfs中的分区结构:
completion ofbusinessdate/environment/businesssubtype/message type
等......
在这种情况下,无需转到Hbase或任何其他数据存储。
但上述方法中的一个常见问题是,当您获得小而小的文件时,通过流式传输,您需要repartion(1
)或colelese
或FileUtils.copymerge
来满足块大小要求单个分区文件。除了上述方法也没关系。
根据可以做出的决定,这里有一些叫做 CAP theorm 的东西。
一致性(所有节点同时看到相同的数据)。
可用性(每个请求都会收到有关它的响应 成功或失败)。
分区容差(系统继续 尽管由于网络故障导致任意分区,但仍然可以运行
Casandra支持AP。
Hbase支持CP。
查看给出here
的详细分析