0

我是 Spark 和 Cassandra 的新手。我面临一个主要的性能问题。我在 Spark 中每 5 秒从 Kafka 流式传输数据,然后使用 JRI 对 R 语言中的数据执行分析,最后将数据保存到 Cassandra 各自的列族。将数据保存到 Cassandra 的持续时间(以毫秒为单位)随着输入请求数量的增加而迅速增加 [每个请求为 200KB]。

火花性能

火花代码:

 sessionData.foreachRDD(new Function<JavaRDD<NormalizedData>, Void>() {
    public Void call(JavaRDD<NormalizedData> rdd)     {
System.out.println("step-3 " + System.currentTimeMillis());
javaFunctions(rdd).writerBuilder("keyspace",normalized_data",mapToRow(NormalizedData.class)).saveToCassandra();
System.out.println("step-4 " + System.currentTimeMillis());}}
4

3 回答 3

0

我也在使用 Cassandra Spark 组合来进行实时分析。以下是一些最佳实践:

  1. 数据局部性- 在 Spark 独立的情况下使用 Worker 节点运行 Cassandra 守护程序,在 Yarn 的情况下运行节点管理器],在 Mesos 的情况下使用 Mesos 工作程序

  2. 增加并行度,即创建更多分区/任务

  3. 使用 Cassandra 连接池提高吞吐量

在您的情况下,您正在使用 JRI 在 Java 端调用 R。这有点慢和性能开销。所以使用 SparkR 将 R 与 Spark 集成,而不是直接使用 JRI。

于 2017-05-12T18:32:47.167 回答
0

您可以参考此博客了解 Spark-Cassandra 连接器调优。您将对可以预期的性能数字有所了解。您还可以尝试另一个开源产品 SnappyData,它是 Spark 数据库,它将在您的用例中为您提供非常高的性能。

于 2017-05-12T17:55:21.137 回答
0

通过在同一台服务器上使用 Spark 和 Cassandra,我能够提高性能。这种延迟是因为 Spark 和 Cassandra 位于不同的服务器上,尽管它们位于 AWS 的同一区域。网络延迟是影响数据局部性的主要原因。谢谢。

于 2016-01-09T02:21:29.857 回答