【问题标题】:Easiest way to persist Cassandra data to S3 using Spark使用 Spark 将 Cassandra 数据持久保存到 S3 的最简单方法
【发布时间】:2015-10-07 18:32:02
【问题描述】:

我试图弄清楚如何使用 Spark 最好地存储和检索从 S3 到 Cassandra 的数据:我有存储在 Cassandra 中的日志数据。我使用 DSE 运行 Spark 来执行数据分析,它运行良好。日志数据每天都在增长,在任何给定时间我只需要在 Cassandra 中使用两周的时间。我仍然需要将旧日志存储在某个地方至少 6 个月,经过研究,带有 Glaciar 的 S3 看起来是最有希望的解决方案。我想使用 Spark 来运行一项日常工作,从第 15 天开始查找日志,将它们从 Cassandra 中删除,然后将它们发送到 S3。我的问题是:我似乎无法确定正确的格式来将 Cassandra 行保存到文件中,以便有一天我可以将文件重新加载到 Spark 中,并在必要时运行分析。我只想有一天在 Spark 中运行分析,而不是将数据保存回 Cassandra。 JSON 似乎是一个明显的解决方案,但还有其他我不考虑的格式吗?我应该使用 Spark SQL 吗?在我承诺一种或另一种格式之前,任何建议都会受到赞赏。

【问题讨论】:

    标签: amazon-s3 cassandra apache-spark datastax-enterprise apache-spark-sql


    【解决方案1】:

    Apache Spark 专为此类用例而设计。它是一种列式数据库的存储格式。它提供列压缩和一些索引。

    它正在成为事实上的标准。许多大数据平台正在采用它或至少为其提供一些支持。 您可以使用 SparkSQL、Impala 或 Apache Drill 在 S3 中直接高效地查询它。您还可以针对它运行 EMR 作业。

    要使用 Spark 将数据写入 Parquet,请使用 DataFrame.saveAsParquetFile

    根据您的具体要求,您甚至可能最终不需要单独的 Cassandra 实例。

    你可能还会觉得this post很有趣

    【讨论】:

    • 在我提出这个问题后不久,我注意到 SparkSQL 在 SchemaRDD 对象上有一个 toJSON 方法。这正是我想要的。
    • 这当然是一个选项,但我认为您仍然希望能够高效地查询数据。您可以在 S3 中针对 JSON 运行 spark 和 EMR 作业,但这需要更多的网络带宽,并且您必须扫描和稀疏每个查询的所有数据。
    • 啊,我确实想查询数据,但在未来的某个半远点。我可以将数据持久化到 s3,然后以 JSON 形式将其读回 Spark。感谢您的帮助。
    猜你喜欢
    • 2018-05-20
    • 1970-01-01
    • 2016-05-01
    • 1970-01-01
    • 2020-08-24
    • 1970-01-01
    • 2019-05-28
    • 2015-05-10
    • 1970-01-01
    相关资源
    最近更新 更多