使用Nebula Spark Connector读取vertex数据的数量小于show stats展示的数据量

  • nebula 版本:2.6.2
  • 部署方式:分布式
  • 安装方式:RPM
  • 是否为线上版本:Y
  • 硬件信息
    • 磁盘:8x12T HDD
      -CPU:40核
      -内存:192G
  • 问题的具体描述
    背景:在使用Nebula Spark Connector读取某些tag和edge时,数量会少于通过java客户端读取的数据量。spark在读取数据时会有什么限制吗?
  • 相关的 meta / storage / graph info 日志信息(尽量使用文本形式方便检索)
    Java客户端代码

    Spark客户端代码

    结果:
    0880c08b01108985a725

看代码截图,两者本质上都是用 graphclient(spark 并没有用存储接口),应该没有区别的,你使用 console 重复这个 match query 会得到不同值么?两者只是运行过一次么?还是稳定复现这两个不同的结果

不好意思,才看到。spark代码截图贴错了,应该是这个。

spark每次读都会比java的少,但是spark每次读的数量是一样的。这个只针对某些tag或edge,不清楚是否数据中存在特殊字符啥的会不会影响spark的读

1 个赞

有意思,请问 show stats 的数据呢,Terminal 是 9139?

@steam 得麻烦请出存储小伙伴才行了:person_kneeling:t2:

:sob: 想象不出来怎么能存储扫了缺点,spark 上指定了单个 meta,难道可能从非 leader 的 meta 获取的 storage leader 分布可能是过期的,然后非 leader storage part 里有缺的数据被扫了?

2 个赞

Java客户端和show stats的数量一样,是正确的总数9139。这两类应该是同一类扫描机制。但spark对某些tag和edge的扫描就会出现数量少的情况,本例就是9117。这两个的扫描机制底层逻辑应该不一样吧。

是的,spark 是 stroage client ,query 是 graph

最后在storaged端调用的函数都是scanVertices。所以@wey的猜测是合理的。能否换一个meta试试呢?

1 个赞

:grinning:

换meta节点确实读的数据不一样,但还是少。

说明不同meta节点之间数据确实存在不一样。注意“ withMetaAddress” 需要包含所有meta节点。