nebula-spark-connector(pyspark) sessions会话没有自动释放

  • nebula 版本:3.1
  • 部署方式:分布式
  • 安装方式: RPM
  • 是否为线上版本:Y
  • 硬件信息
    • 磁盘 SSD
    • CPU、内存信息
  • 版本信息:
    • nebula-spark-connector-3.0.0.jar
    • pyspark:2.4.0

问题的具体描述

sessions会话没有自动释放:
使用nebula-spark-connector写入数据后,session没有自动释放,只能等待过期时间,具体的option见下图。每当执行一次write,就会多一个session(3次vertex1次edge)。
此前出现过session达到上限,才做的这次验证。请问下,是不是配置少了什么东西,有什么可靠的解决方法吗。

  • 写入前:
    image
  • 写入后:
    image
  • 10分钟后自动过期(nebula-graphd.conf设定成10分钟):
    image

代码

df.write.format("com.vesoft.nebula.connector.NebulaDataSource") \
    .option("type", "vertex") \
    .option("spaceName", "XXX") \
    .option("label", 'tag_name') \
    .option("vidPolicy", "") \
    .option("vertexField", 'vid_field_name') \
    .option("writeMode", "insert") \
    .option("batch", 512) \
    .option("metaAddress", "192.XXX.XXX.XXX:9559,192.XXX.XXX.XXX:9559,192.XXX.XXX.XXX:9559") \
    .option("graphAddress", "192.XXX.XXX.XXX:9669,192.XXX.XXX.XXX:9669,192.XXX.XXX.XXX:9669") \
    .option("passwd", "XXX") \
    .option("user", "root") \
    .save()
df.write.format("com.vesoft.nebula.connector.NebulaDataSource") \
    .mode("overwrite") \
    .option("srcPolicy", "") \
    .option("dstPolicy", "") \
    .option("rankFiled", "") \
    .option("metaAddress", "192.XXX.XXX.XXX:9559,192.XXX.XXX.XXX:9559,192.XXX.XXX.XXX:9559") \
    .option("graphAddress", "192.XXX.XXX.XXX:9669,192.XXX.XXX.XXX:9669,192.XXX.XXX.XXX:9669") \
    .option("user", "root") \
    .option("passwd", "XXX") \
    .option("type", "edge") \
    .option("spaceName", "XXX") \
    .option("label", 'edge_name') \
    .option("srcVertexField", 'src_id_name') \
    .option("dstVertexField", 'dst_vid_name') \
    .option("rankField", "") \
    .option("batch", 512) \
    .option("writeMode", "insert").save() 

connector 在一个partition写完数据后,在执行commit时会将NebulaPool 关闭的, 我看了下NebulaPool的close 是关的connection,上层使用还是要自己手动去close session的,感谢反馈,我们会尽快fix

2 个赞

那请问下,要如何手动close session。

release session before close NebulaPool by Nicole00 · Pull Request #73 · vesoft-inc/nebula-spark-connector · GitHub 这样释放, 你可以用最新的snapshot包,或者自己编译打包然后 使用nebula-spark-connector-3.0-SNAPSHOT-jar-with-dependencies.jar 这个文件

最新的snapshot包哪里可以获取呢。自己编译打包失败了 :thinking:

你如果是用maven形式去获取spark connector,可以直接指定坐标。
如果是指定jar包的形式,现阶段需要自己编译,后续会加到action页面中。
可以使用这个命令去编译:

mvn clean package -Dmaven.test.skip=true -Dgpg.skip -Dmaven.javadoc.skip=true

如果还是编译失败,把失败堆栈发一下吧

用的是第二种方式,目前打包成功了,问题也已经解决。
只是这个包比之前的大了60多M,是多了什么吗东西吗 :joy:

这个包是把所有依赖都打在jar内的,用的assembly插件,估计多了些依赖。