关于Python连接nebula报错

提问参考模版:

  • nebula 版本:3.2.0
  • 部署方式:分布式
  • 是否为线上版本:N

各位老师好!
我想复现一个反欺诈的案例,项目地址:https://www.nebula-graph.com.cn/posts/fraud-detection#post-图神经网络的方法 直接看“图神经网络的方法”章节就行。
目前已完成:
– yelp数据导入到nebula
– 安装了DGL 和 nebula-dgl,和一些必要库
我的nebula服务相关IP:
– meta_server_addrs=192.168.200.100:9559,192.168.200.101:9559,192.168.200.111:9559
– graphserver 192.168.200.100:9669, 192.168.200.101:9669, 192.168.200.111:9669, 192.168.200.112:9669, 192.168.200.114:9669
– 在nebula stadio中show hosts:

我目前做到了这里:


附上上图中红色框内的链接:https://github.com/wey-gu/nebulagraph-yelp-frauddetection
我跑下面这个测试时:

将graph_hosts的修改分别做了如下尝试:
1.

报错:

2.

报错:

3.

报错:

请问我应该怎么解决这个错误呢?

1 个帖子被合并到现有话题中:基于 NebulaGraph 图数据库的欺诈检测方法与代码示例

提问参考模版:

  • nebula 版本:3.2.0
  • 部署方式:分布式
  • 是否为线上版本:N

各位老师好!
我想复现一个反欺诈的案例,项目地址:https://www.nebula-graph.com.cn/posts/fraud-detection#post-图神经网络的方法 直接看“图神经网络的方法”章节就行。
目前已完成:
– yelp数据导入到nebula
– 安装了DGL 和 nebula-dgl,和一些必要库
我的nebula服务相关IP:
– meta_server_addrs=192.168.200.100:9559,192.168.200.101:9559,192.168.200.111:9559
– graphserver 192.168.200.100:9669, 192.168.200.101:9669, 192.168.200.111:9669, 192.168.200.112:9669, 192.168.200.114:9669
– 在nebula stadio中show hosts:

我目前做到了这里:


附上上图中红色框内的链接:https://github.com/wey-gu/nebulagraph-yelp-frauddetection
我跑下面这个测试时:

将graph_hosts的修改分别做了如下尝试:
1.

报错:

2.

报错:

3.

报错:

请问我应该怎么解决这个错误呢?

nebula-dgl 是通过 storaged 扫数据的,需要能访问到 storaged/metad 哈,你这里报错就是这样的,你可以试着让 python 运行在 nebulacluster 所在 k8s 网络绕过这个问题哈

2 个赞

另外,你用我文中的 nebula-up 去准备环境会更方便一些

也就是说 可以在容器里面尝试对吗?我先试试这个
谢谢老师!

老师您好,我们的nebula是部署在服务器实体的,没有在k8s环境里面。
而且,我用如下方式是可以连接nebula的:


我在想如何能使用您这个项目中的NebulaLoader类,同时换成我上图的连接方式呢?

这样呀,奇怪,看这个报错,它访问的是 operator 部署的集群呢哈

这个情况比k8s 好办哈,保证 metad,storaged 地址可以被 python 运行环境访问就好了哈。你可以先用 python storage client 扫数据,能过了就说明OK

这个报错是我将端口改为9669:

我要是改为9779,就变成了这个报错:


我也不知道应该写哪个 :sob:

但是在本地电脑的notebook中,用(‘192.168.200.101’,9669)就可以连上服务器的nebula。 :joy:

您能再详细点说吗? :joy:
附上我的meta地址:192.168.200.100:9559,192.168.200.101:9559,192.168.200.111:9559

graph地址:192.168.200.100:9669, 192.168.200.101:9669,192.168.200.111:9669, 192.168.200.112:9669, 192.168.200.114:9669

storage地址:

9669 是 graphd
9559 是 metad
9779 是 storaged

nebula-dgl 会从 graphD 获取所有的 metad 地址和 storaged 地址传给 storageclient 用来扫底层数据,所以 nebula-dgl 不像 console 一样只需要 9669 的连接,前边配置的是 graph host,是 graphd 的地址 9669 没有错,不要改成其他的。

看你这个地址的就知道是 nebula-operator k8s 部署的,集群内部 meta/storage 的地址都是 k8s 里的域名,这时候想让 storageclient 访问的最方便的方法就是 把 nebula-dgl/storagclient 跑在这个 k8s 集群内部了。。。

哦哦 明白了 那其实我的问题是 nebula-dgl 能够访问graphd的地址,但是metad和storage地址访问不到,才报的错误,对吧?

对的

部署的同事又帮我在服务器实体机部署并升级了下 现在问题顺利解决了!确实是需要meta/storage都可以访问才行 :smile:
感谢老师的解答!!

1 个赞

老师 我可否再确认一个:


我理解这个nebulagraph_yelp_dgl_mapper.yaml,就是将yelp空间中的所有节点和边都取出来,同时,将属性做相应的特征转换计算,然后形成图谱g,接下来就可以将图g转化为networkx去使用了,对吧?

dgl 到 networkx 的转化应该是要求是同构图才行哈。

OK.今天看了异构图转同构图。
老师 我在训练的时候报错了:


然后我将ys和y_hats打印了下:


我理解是不是y_hats中每一个tensor有两列(应该是2维的),而ys是一维的,才报的错?
那我如何取y_hats的最后一列呢(如果这一列是预测为正的话)

你是参考

https://github.com/wey-gu/NebulaGraph-Fraud-Detection-GNN

完全一样的操作么?