我是Spark和Cassandra的新学习者。我正面临着一个重大的性能问题。我在Spark中每5秒从Kafka传输数据,然后使用JRI对R语言中的数据进行分析,最后将数据保存到Cassandra各自的列族。将数据保存到Cassandra的持续时间(以毫秒为单位)随着输入请求的数量而迅速增加[每个请求为200KB]。
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());}}
答案 0 :(得分:0)
通过在同一台服务器上使用Spark和Cassandra,我能够提高性能。这种延迟是因为Spark和Cassandra虽然位于AWS上的同一区域,但却位于不同的服务器上。网络延迟是影响数据位置的主要原因。感谢。
答案 1 :(得分:0)
您可以参考此blog进行Spark-Cassandra连接器调整。您将了解可以预期的性能数据。此外,您可以尝试另一个开源产品SnappyData,它是Spark数据库,它将为您的用例提供非常高的性能。
答案 2 :(得分:0)
我也在使用Cassandra Spark组合来进行实时分析。以下是一些最佳实践:
数据位置 - 在Spark独立的情况下运行带有Worker节点的Cassandra守护程序或在Yarn的情况下运行节点管理器],在Mesos的情况下运行Mesos worker
提高并行度,即创建更多分区/任务
在您的情况下,您正在使用JRI在Java中调用R.这有点 慢慢地和性能开销。因此,使用SparkR直接将R与Spark集成而不是JRI。