Neo4j驱动程序和Spark阻止功能

时间:2018-08-09 09:32:49

标签: scala apache-spark neo4j spark-streaming

我通过对它运行Neo4j查询来处理数据。流数据流作为输入。但是,整个处理管道在时间上效率不高。我使用visualvm分析了资源使用情况,但它只帮助我了解了某些东西会阻止Neo4jDriver和Spark并使它们等待。因此查询本身只需几毫秒即可运行,而整个处理流程需要20-60秒,具体取决于数据集的大小。

这是visuavm CPU采样结果的样子: enter image description here

线程分析结果如下:

enter image description here

处理缓慢和进程阻塞的原因可能是什么?

这是主要处理工作集中的一段代码:

wordsArrays.foreachRDD(rdd => {       rdd.mapPartitions {分区=> {

    val neo4jDriver = neo4jConfigurations.getNeo4jDriver(neo4jDbConfigs)
    val neo4jSession = neo4jDriver.session()

    val recommendations = execBatchNeo4jSearchQuery(neo4jSession, partition.toList)
    neo4jSession.close()

    val calendarTime = Calendar.getInstance.getTime
    val result = convertQueryResultToMap(recommendations, calendarTime)

    neo4jDriver.close()
    result.iterator
    }
  }.saveToEs("geo-test6/output")
})

execBatchNeo4jSearchQuery方法从流中获取数据,对其进行查询并返回一些结果。 SaveToEs方法将查询结果保存到ElasticSearch

0 个答案:

没有答案