【问题标题】:Spark Batch Write to Cassandra: Spark-Cassandra-Connector vs SSTableLoader (Cassandra Bulk Loader)Spark批量写入Cassandra:Spark-Cassandra-Connector vs SSTableLoader(Cassandra Bulk Loader)
【发布时间】:2020-10-08 12:37:42
【问题描述】:

我们正在使用 Datastax spark-cassandra-connector 写入部署在与 spark 不同的集群上的 Cassandra 集群。

我们观察到批量加载,即约 500M 记录了我们的写入运行(约 1 小时),并且在写入操作期间读取性能下降。虽然写入性能非常好,但这在我们的环境中是不可接受的,因为某些读取请求很关键,应该始终在特定的时间范围内得到响应。

我在SSL Table Loader Use Case 上阅读了一篇文章,似乎通过使用 SSLTableLoader(CassandraBulkLoader) 解决了同样的问题。

我还阅读了一些 SO 问题,例如 this one 提到与 spark-cassandra-connector 相比,使用 SSLTableLoader 写入可能真的很慢。

现在,使 spark-cassandra-connector 更快但导致批量加载的低读取延迟的根本原因是什么?此外,SSLTableLoader 除了速度慢之外还有其他缺点吗?

【问题讨论】:

    标签: apache-spark cassandra batch-processing spark-cassandra-connector


    【解决方案1】:

    这是正常的 - 如果您尽可能快地写入数据,它会在磁盘系统上产生负载,并且您的读取速度会变慢。除了将数据写入磁盘之外,您还需要考虑压缩等对 IO 系统的额外负载。也可能是您的压缩吞吐量不是很好,因此您的压缩可能滞后,这可能会导致额外的读取延迟,因为您有太多的 sstable 文件。

    您不必使用sstableloader 进行数据加载。您可以只调整写入参数,因此 Spark 不会使您的节点过载。这可能包括,例如,following parameters:

    • spark.cassandra.output.concurrent.writes - 将其减少到 2 或 3 而不是默认的 5 - 这会增加加载时间,但应该会减少服务器的负载
    • 也许可以调整spark.cassandra.output.throughputMBPerSec,但我建议从上一个选项开始。

    批量加载数据的另一个选项是DataStax's DSBulk, that can load data from CSV & JSON files。默认情况下,它也会尝试尽可能快地加载数据,但它有options for controlling throughput

    【讨论】:

    • 只是看不到影响,我设置 spark.cassandra.output.concurrent.writes=1,令我惊讶的是,我没有看到 cassandra 写入时间有任何显着增加。这是一个奇怪的观察,让我怀疑它是否有助于降低读取延迟。我正在努力分析它。我的数据在镶木地板上的 Hive 表中,并且正在使用 spark(2.3) + scala(2.11) + spark_cassandra_connector(2.3.3) + dataframe.write.cassandraFormat(..) -> cassandra cluster (3.11.3) 加载云
    猜你喜欢
    • 2020-04-18
    • 2019-04-10
    • 2019-10-15
    • 2019-10-28
    • 2016-12-20
    • 2017-08-06
    • 2020-12-12
    • 2016-09-02
    • 2019-11-12
    相关资源
    最近更新 更多