Spark Cassandra表现问题

时间:2015-11-09 19:49:53

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

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

Spark Performance

Spark代码:

 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());}}

3 个答案:

答案 0 :(得分:0)

通过在同一台服务器上使用Spark和Cassandra,我能够提高性能。这种延迟是因为Spark和Cassandra虽然位于AWS上的同一区域,但却位于不同的服务器上。网络延迟是影响数据位置的主要原因。感谢。

答案 1 :(得分:0)

您可以参考此blog进行Spark-Cassandra连接器调整。您将了解可以预期的性能数据。此外,您可以尝试另一个开源产品SnappyData,它是Spark数据库,它将为您的用例提供非常高的性能。

答案 2 :(得分:0)

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

  1. 数据位置 - 在Spark独立的情况下运行带有Worker节点的Cassandra守护程序或在Yarn的情况下运行节点管理器],在Mesos的情况下运行Mesos worker

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

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

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