直接提交算法包跑louvain算法,跑一天一夜没结束,结果没写进去图库

UPDATE VERTEX ON Person “2061588760641” SET louvain=407;UPDATE VERTEX ON Person “2061588790111” SET louvain=407;UPDATE VERTEX ON Person “1924145919296” SET louvain=407;UPDATE VERTEX ON Person “1924148178140” SET louvain=407 for Storage Error: Vertex or edge not found.

你确认下你的space中 tag是否创建了



确实是没有Person这个tag,这么说,好多节点都没有Person tag,那我如何给这么多节点创建tag呢?需要都找出来这些节点ID,然后批量创建吗?

您好 我将application.conf中的nebula.write里的tag改为"Person,Post,Comment"(之前是Person):


一开始跑的时候没报错,过了二十多分钟报错:

日志上传:
nohup (2).zip (3.4 MB)

我查到了这个相关的问题:

是因为我配置文件中的nebula.write.tag不能改为"Person,Post,Comment"吗?

你的图计算用的是异构图?那不支持这样把结果分别写入到不同的tag的,因为图计算过程中会把图作为一个同构图的,对于点来说是不知道它有哪个tag的。

用的数据集是ldbc,多个tag和关系;application.conf中只写LIKES关系,nebula.write.tag写的多个,即"Person,Post,Comment"。
那也就是说,nebula.write.tag中,我只能写一个tag,对吧?比如只写Person,或者Post

您好! 我换了个tag重试了下,tag换为了Post。
日志中也还是有报错,最后查询Post.louvain有值的是349个,没有值的是1003256个。
我看了日志中有两类ERROR:
1.ERROR NebulaVertexWriter: failed to write UPDATE VERTEX ON Post"2061585280247" SETlouvain=296;UPDATE VERTEX ON Post"1786707679022" SETlouvain=296;UPDATE VERTEX ON Post"962077864009" SETlouvain=296;UPDATE VERTEX ON Post"824636088985" SETlouvain=296;

从中抽查ID为2061585280247,进行查询,发现它是有值的(说明是写进去了):


ID为1786707679022的louvain的值也为256,但是ID为824636088985查出来是没有值的(可以理解为它没有Post tag,没有写进去):

疑问:为什么有的louvain结果写进去了,但是还报错;

2.ERROR NebulaDataSourceVertexWriter: failed execs: List(UPDATE VERTEX ON Post"1924151678588" SETlouvain=1924151678588;UPDATE VERTEX ON Post"30786325578109" SETlouvain=1924151678588;UPDATE VERTEX ON Post"1374394014674" SETlouvain=150;UPDATE VERTEX ON Post"2061586706782" SETlouvain=65;
这个错误中,抽查ID为1924151678588/30786325578109/1374394014674,都是没有Post tag,写不进去也正常;而ID为2061586706782是可以查出来Louvain值的:

日志附件在这里:
nohup_3.zip (3.5 MB)
再附上application.conf:
application (3).conf (4.7 KB)

麻烦老师们帮忙分析下,特别感谢!
我在想,是不是因为写入的速度太快了?根据之前的讨论,我们是32核的,storaged.conf 的 max_subcompactions和max_background_jobs参数已经调为了一半,也就是16。还有其他什么可能的配置没有弄好吗?

nebula graph版本:3.3.0
nebula studio版本:3.5.0
spark版本:2.4
部署方式:分布式
硬盘:机械硬盘
是否为线上版本:N

  • 硬件信息
    • 磁盘:机械
    • CPU、内存信息:32核+,内存125G+,磁盘3T+

我在用nebula algorithm跑louvain的时候,终端打印的日志报错为下面:




同事查nebula graph日志:

昨天还没出现这个错误,请问这是什么原因呢?

因为你写入的时候是批量写的,nebula目前还不支持事务,可能一批次里面部分写入成功部分写入失败。

可以参考下 这个帖子中关于storage的配置

写入速度过快

您好 那这个怎么解决呢?我刚修改完nebula-storage.conf后,日志中还是出现这个问题。
我将nebula-storage.conf中的--rocksdb_block_cache改为了4232(默认是4),max_subcompactionsmax_background_jobs改为了--rocksdb_db_options={"max_subcompactions":"48","max_background_jobs":"48"}
附上nebula-storage.conf文件:
nebula-storaged.conf (4.9 KB)

重启storage服务后,又跑了下,还是出现帖子前面说的那哥问题,入库时一部分没入进去。。
附上命令窗口的日志:
nohup.zip (3.5 MB)
里面还是有两类错误,ERROR NebulaVertexWriter: failed to writeERROR NebulaDataSourceVertexWriter: failed execs:,我依旧检查了下,有的id确实没有Post tag,没写进去正常;有的写进去了;也有的是有Post tag,但是没写进去louvain值。
请问我还应该调整哪些配置呢?好焦虑的 :joy:

对了,我在studio里面查,貌似只写进去了600多,该关系中,该tag有7W多:

写入时出现的错误日志
Storage Error: Vertex or edge not found.

1 个赞

这是指在算法执行的子图中,没有该节点吗?
application.conf文件中指定的关系是LIKES,然后写入的tag是Post,我理解算法流程应该是:取出LIKES的子图,对子图中所有节点做社区划分,然后tag为Post的结果写入进去。
ldbc数据集的likes关系两侧tag有person/Post/comment:


也就是将涉及likes关系的person/post/comment做社区划分,最后只对post写入结果,对吧?

根据日志中报错没找到节点10995116286206


我查询确实为空(疑问:若该节点没有出现在子图中,为什么日志中会有划分结果呢?):

但是对于节点962075216783

我查询是存在于该子图中的(疑问:节点为什么没找到呢?):

这是咋回事呢?是因为这一批结果中含有没找到的节点,所以这一批就都没写入吗?那如何调整写入的batch呢?
实在不好意思,总是出这些难搞的问题,一直麻烦您 :heart: 只是工作上用到了,自己实在搞不懂 :sob:
请你们图计算组喝茶 :coffee:

============================分割线====================
下面这俩也贴这里吧
下面这两个节点,结果是Louvain=94,但是查询出的为空:



NebulaGrpah 的 UPDATE 命令是要求要更新的tag 的点必须存在的,不存在就会报错说vertex or edge not exist.

你做图计算用的是like的边,但like边两端顶点是 person、comment、post的合集,所以把计算结果中的点的算法值更新到 person或者comment或者post都会报上面那个错误的,因为点结果集中 总有当前tag下不存在的点。

你还是把结果写入到新的tag中吧,用insert模式。

1 个赞

懂了!
谢谢!汤圆你真NB~ :+1:

如果问题解决了。。记得勾选某个回复为解决方案哈。这样这个帖子就算完结了

好的! 我先试试用Insert方法哈

1 个赞

汤圆姐,我还想再问一下,比如我在LIKES关系所连接的节点上做社区划分,结果想插入新的tag中,那我需要给这些节点事先新增一个tag,我如何给指定的节点(假设很多)新增一个tag呢?
我想到有两种方式:

  1. 用importer.config配置文件。需要读入想要增加tag的 含有vid列表和属性的 csv文件,然后指定写入的tag中,这样就把新tag与vid关联上了。
  2. 通过insert方法INSERT VERTEX t2 (name, age) VALUES "13":("n3", 12), "14":("n4", 8); ,将不同vid和属性值,插入指定的t2 tag中。但是这样我需要罗列很多vid和相应的属性值。。。

这两种方式是否可以呢?

可以的

OK 已经尝试过了。另外我刚才又跑了一次,update入库,结果没出现上面两种问题。
但是insert方式确定不会出现错误。
感谢汤圆!

1 个赞

牛的 :+1:

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。