【问题标题】:Java Huge csv file processing and storing using Apache Spark/ Kafka/ Storm to Cassandra使用 Apache Spark/Kafka/Storm to Cassandra 处理和存储 Java Huge csv 文件
【发布时间】:2017-01-04 23:46:31
【问题描述】:

我正在处理需要从 csv/tsv 读取传感器数据并插入 Cassandra db 的需求。

CSV 格式:

sensor1 时间戳1 值
传感器 1 时间戳 2 值
传感器 2 时间戳 1 值
传感器 2 时间戳 3 值

详情:

用户可以将文件上传到我们的网络应用程序。上传文件后,我需要在下一页中向用户显示列中的唯一值。 例如 ->

  1. sensor1 node1
  2. sensor2 节点2
  3. 传感器创建

用户可以使用名为 node1 的现有主键映射 sensor1,在这种情况下,sensor1 的时间戳和值将添加到主键等于 node1 的表中,或者创建主键,在这种情况下,时间戳和值将是添加了新的主键。

我能够使用 Java8 流和收集来实现这一点。这适用于小型 csv 文件。

问题:

  1. 如何将巨大的 csv/tsv 文件 (200 gb) 上传到我的 Web 应用程序? 我应该在 HDFS 中上传文件并在 UI 中指定路径吗?我什至将大文件分成小块(每个 50 MB)。

  2. 如何从第一列获取唯一值?我可以使用卡夫卡/火花 这里?我需要将时间戳/值插入 Cassandra db。我可以再次使用吗 Kafka/Spark 在吗?

非常感谢任何帮助。

【问题讨论】:

    标签: java apache-spark cassandra apache-kafka apache-storm


    【解决方案1】:

    如何将巨大的 csv/tsv 文件 (200 gb) 上传到我的 Web 应用程序?我应该在 HDFS 中上传文件并在 UI 中指定路径吗?我什至将大文件分成小块(每个 50 MB)。

    取决于您的网络应用程序的使用方式。在从客户端到服务器的 HTTP 请求的上下文中上传如此大的文件总是很棘手。您必须异步执行此操作。无论您将其放在 HDFS 还是 S3 甚至是简单的 SFTP 服务器中,这都是设计选择的问题,并且该选择将影响您要围绕文件构建的工具类型。我建议从 FTP/NAS 之类的简单的东西开始,如果你需要扩展,你可以使用 S3 之类的东西。 (使用 HDFS 作为共享文件存储是我没有看到很多人这样做的事情,但这不应该阻止你尝试)

    如何从第一列获取唯一值?我可以在这里使用 Kafka/spark 吗?我需要将时间戳/值插入 Cassandra db。我可以再次在这里使用 Kafka/Spark 吗?

    Spark 批处理甚至是普通的 M/R 作业都可以为您解决问题。这只是一个简单的 groupBy 操作,尽管您应该真正了解您愿意在延迟上牺牲多远,因为 groupBy 操作通常代价高昂(它涉及 shuffle)。一般来说,根据我有限的经验,在用例中使用流式处理有点矫枉过正,除非你得到源数据的连续流。但是你描述你的用例的方式对我来说更像是一个批处理候选。

    我会关注一些事情:如何从客户端应用程序传输我的文件,我在 Cassandra 中的数据可用性的端到端 SLA 是什么,发生故障时会发生什么(我们是否重试等等? ),我的作业多久运行一次(每次用户上传文件时都会触发它,或者它可以是一个 cron 作业)等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-05
      • 2018-07-08
      • 2015-05-06
      • 2019-12-28
      • 2023-04-05
      • 2020-06-10
      • 2015-09-11
      相关资源
      最近更新 更多