FiloDB + Spark Streaming数据丢失

时间:2017-01-24 20:30:12

标签: cassandra spark-streaming spark-jobserver

我使用FiloDB 0.4和Cassandra 2.2.5列和元存储,并尝试使用Spark Streaming 1.6.1 + Jobserver 0.6.2将数据插入其中。我使用以下代码插入数据:

Select-String

段密钥是":string / 0&#34 ;,行键设置为列,对于每一行都是唯一的,并且分区键设置为列,对于所有行都是const。换句话说,我的所有测试数据集都在单个分区上转到单个段。当我使用单个单节点Spark时,一切正常,我可以插入所有数据,但是当我同时运行两个单独的单节点Spark(不是集群)时,我就迷路了大约30-60%的数据,即使我以几秒为间隔一个接一个地发送消息。 我检查了每个消息都执行了dataFrame.write(),所以问题发生在这一行之后。 当我将段密钥设置为每行唯一的列时,所有数据都到达Cassandra / FiloDB。

请向我推荐具有2个独立火花的场景的解决方案。

1 个答案:

答案 0 :(得分:1)

@psyduck,这很可能是因为每个分区的数据一次只能在一个节点上被摄取 - 对于0.4版本。因此,要坚持使用当前版本,您需要将数据分区为多个分区,然后确保每个工作程序只获得一个分区。实现上述目标的最简单方法是按分区键对数据进行排序。

我强烈建议您转到最新版本 - master(Spark 2.x / Scala 2.11)或spark1.6 branch(spark 1.6 / Scala 2.10)。最新版本有许多不在0.4的更改可以解决您的问题:

  • 使用Akka Cluster自动将数据路由到正确的摄取节点。在这种情况下,使用相同的模型,您的数据将全部转到正确的节点并确保没有数据丢失
  • 基于TimeUUID的chunkID,所以即使多个工作者(如果是大脑分裂)以某种方式写入同一分区,也可以避免数据丢失
  • 一个新的“无段”数据模型,因此您无需定义任何段密钥,对读取和写入都更有效

欢迎联系我们的邮件列表https://groups.google.com/forum/#!forum/filodb-discuss