nebula-1.2.1 录入失败 key not found: vId

  • 部署方式(分布式 / 单机 / Docker / DBaaS):分布式 1.2.1
  • 是否为线上版本:N

在论坛找了类似错误的帖子,核对了几遍,还是没有解决 呜…
以下时错误信息、配置、schema 和spark-submit提交 ,麻烦帮忙分析一下,谢谢
1、错误信息:

21/04/20 15:55:50 ERROR meta.MetaClientImpl: List Spaces Error Code: -11
21/04/20 15:55:50 ERROR meta.MetaClientImpl: Get tags Error: -23
Exception in thread "main" java.util.NoSuchElementException: key not found: vId
	at scala.collection.MapLike$class.default(MapLike.scala:228)
	at scala.collection.AbstractMap.default(Map.scala:59)
	at scala.collection.MapLike$class.apply(MapLike.scala:141)
	at scala.collection.AbstractMap.apply(Map.scala:59)
	at com.vesoft.nebula.tools.importer.utils.NebulaUtils$$anonfun$getDataSourceFieldType$1.apply(NebulaUtils.scala:65)
	at com.vesoft.nebula.tools.importer.utils.NebulaUtils$$anonfun$getDataSourceFieldType$1.apply(NebulaUtils.scala:64)
	at scala.collection.immutable.Range.foreach(Range.scala:160)
	at com.vesoft.nebula.tools.importer.utils.NebulaUtils$.getDataSourceFieldType(NebulaUtils.scala:64)
	at com.vesoft.nebula.tools.importer.processor.VerticesProcessor.process(VerticesProcessor.scala:138)
	at com.vesoft.nebula.tools.importer.Exchange$$anonfun$main$2.apply(Exchange.scala:174)
	at com.vesoft.nebula.tools.importer.Exchange$$anonfun$main$2.apply(Exchange.scala:152)
	at scala.collection.immutable.List.foreach(List.scala:392)
	at com.vesoft.nebula.tools.importer.Exchange$.main(Exchange.scala:152)
	at com.vesoft.nebula.tools.importer.Exchange.main(Exchange.scala)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.spark.deploy.JavaMainApplication.start(SparkApplication.scala:52)
	at org.apache.spark.deploy.SparkSubmit.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:845)
	at org.apache.spark.deploy.SparkSubmit.doRunMain$1(SparkSubmit.scala:161)
	at org.apache.spark.deploy.SparkSubmit.submit(SparkSubmit.scala:184)
	at org.apache.spark.deploy.SparkSubmit.doSubmit(SparkSubmit.scala:86)
	at org.apache.spark.deploy.SparkSubmit$$anon$2.doSubmit(SparkSubmit.scala:920)
	at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:929)
	at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

2、test数据

{"vId":"DHHM_13549999999","area":"020","city":"北京","operator":"联通"}
{"vId":"DHHM_13550000008","area":"020","city":"广州","operator":"移动"}
{"vId":"DHHM_13549999991","area":"020","city":"重庆","operator":"联通"}

3、录入配置

{ 
      name: dhhm
      type: {  
        source: json
        sink: client
      }
      path: "hdfs://10.210.141.9:8020/graph/data/nebula/DHHM/"
      fields: ["vId","area","city","operator"]
      nebula.fields: ["vId","area","city","operator"]
      vertex: { 
         field: vId
         policy: "hash"
      } 
      # vertex: source
      batch: 256 
      partition: 32
      isImplicit: true
}

4、schema信息

(root@nebula) [graphSpace]> show hosts;
=================================================================================================
| Ip             | Port  | Status | Leader count | Leader distribution | Partition distribution |
=================================================================================================
| 10.210.141.9   | 44500 | online | 33           | graphSpace: 33      | graphSpace: 33         |
-------------------------------------------------------------------------------------------------
| 10.210.141.77  | 44500 | online | 34           | graphSpace: 34      | graphSpace: 34         |
-------------------------------------------------------------------------------------------------
| 10.210.141.135 | 44500 | online | 33           | graphSpace: 33      | graphSpace: 33         |
-------------------------------------------------------------------------------------------------
| Total          |       |        | 100          | graphSpace: 100     | graphSpace: 100        |
-------------------------------------------------------------------------------------------------

(root@nebula) [graphSpace]> show create tag dhhm;
=====================================================================================================================================
| Tag  | Create Tag                                                                                                                 |
=====================================================================================================================================
| dhhm | CREATE TAG `dhhm` (
  `vId` string,
  `area` string,
  `city` string,
  `operator` string
) ttl_duration = 0, ttl_col = "" |
-------------------------------------------------------------------------------------------------------------------------------------
Got 1 rows (Time spent: 1.378/2.251 ms)

Tue Apr 20 16:03:52 2021

(root@nebula) [graphSpace]> 
(root@nebula) [graphSpace]> show create tag sfzh;
============================================================================================================
| Tag  | Create Tag                                                                                        |
============================================================================================================
| sfzh | CREATE TAG `sfzh` (
  `vId` string,
  `name` string,
  `age` int
) ttl_duration = 0, ttl_col = "" |
------------------------------------------------------------------------------------------------------------

5、提交:

#!/bin/bash
sh /home/louyp/spark/spark-2.4.5-bin-hadoop2.7/bin/spark-submit \
--master yarn-client \
--name spark-nebula-load \
--executor-memory 10G \
--executor-cores 1 \
--num-executors 24 \
--total-executor-cores 27 \
--class com.vesoft.nebula.tools.importer.Exchange \
./exchange-1.1.0.jar \
-c ./application1.2.1.conf

cc @darionyaphet @nicole

application1.2.1.conf 这个配置的信息全一点,看错误是连不到 metad 了。
应该不止 3、录入配置 这些

application1.2.1.conf

{

Spark 相关配置

spark: {
app: {
name: Spark Writer
}

driver: {
  memory: 8G
  cores: 1
  maxResultSize: 4G
}

executor:{
  memory: 10G
  instances: 24
  cores: 1

}

cores {
  max: 27
}

}

Nebula Graph 相关配置

nebula: {
address:{
# 以下为 Nebula Graph 的 Graph 服务和 Meta 服务所在机器的 IP 地址及端口
# 如果有多个地址,格式为 “ip1:port”,“ip2:port”,“ip3:port”
# 不同地址之间以英文逗号 (,) 隔开
graph:[“10.210.141.9:3699”,“10.210.141.77:3699”,“10.210.141.135:3699”]
meta:[“10.210.141.9:45500”,“10.210.141.77:45500”,“10.210.141.135:45500”]
}
# 填写的账号必须拥有 Nebula Graph 相应图空间的写数据权限
user: root
pswd: nebula

# 填写 Nebula Graph 中需要写入数据的图空间名称
space: graphSpace

connection {
  timeout: 5000
  retry: 3
}

execution {
  retry: 3
}

error: {
  max: 32
  output: /test1
}

rate: {
  limit: 2048
  timeout: 5000
}

}

处理标签

tags: [
# 设置标签 source 相关信息
{
# 设置为 Nebula Graph 中对应的标签名称
name: dhhm
type: {
# 指定数据源文件格式,设置为 json。
source: json

    # 指定标签数据导入 Nebula Graph 的方式,
    # 可以设置为:client(以客户端形式导入)和 sst(以 SST 文件格式导入)。
    # 关于 SST 文件导入配置,参考文档:导入 SST 文件。
    sink: client
  }

  # JSON 文件所在的 HDFS 路径,String 类型,必须以 hdfs:// 开头。
  path: "hdfs://10.210.141.9:8020/graph/data/nebula/DHHM/"

  # 在 fields 里指定 JSON 文件中 key 名称,其对应的 value
  # 会作为 Nebula Graph 中指定属性 srcId 的数据源
  # 如果需要指定多个值,用英文逗号(,)隔开
  fields: ["vId","area","city","operator"]
  nebula.fields: ["vId","area","city","operator"]

  # 将 JSON 文件中某个 key 对应的值作为 Nebula Graph 中点 VID 的来源
  # 如果 VID 源数据不是 int 类型,则使用以下内容来代替 vertex 的设置,在其中指定 VID 映射策略,建议设置为 "hash"。
  vertex: {
     field: vId
     policy: "hash"
  }
  # vertex: source

  batch: 256
  partition: 32

  # isImplicit 设置说明,详见 https://github.com/vesoft-inc/
  # nebula-java/blob/v1.0/tools/exchange/src/main/resources/
  # application.conf
  isImplicit: true
}
# 设置标签 target 相关信息
{
  name: sfzh
  type: {
    source: json
    sink: client
  }
  path: "hdfs://10.210.141.9:8020/graph/data/nebula/SFZH/"
  fields: ["vId","name","age"]
  nebula.fields: ["vId","name","age"]
  vertex: {
     field: vId
     policy: "hash"
  }
  #vertex: "target"
  batch: 256
  partition: 32
  isImplicit: true
}

如果还有其他标签,参考以上配置添加

]

处理边数据

edges: [
# 设置边类型 dhhm_dhhm 相关信息
{
# Nebula Graph 中对应的边类型名称。
name: dhhm_dhhm
type: {
# 指定数据源文件格式,设置为 json。
source: json

    # 指定边数据导入 Nebula Graph 的方式,
    # 可以设置为:client(以客户端形式导入)和 sst(以 SST 文件格式导入)。
    # 关于 SST 文件导入配置,参考文档:导入 SST 文件(https://
    # docs.nebula-graph.com.cn/nebula-exchange/
    # use-exchange/ex-ug-import-sst/)。
    sink: client
  }

  # 指定 JSON 文件所在的 HDFS 路径,String 类型,必须以 hdfs:// 开头。
  path: "hdfs://10.210.141.9:8020/graph/data/nebula/DHHM_DHHM/"

  # 在 fields 里指定 JSON 文件中 key 名称,其对应的 value
  # 会作为 Nebula Graph 中指定属性 likeness 的数据源
  # 如果需要指定多个值,用英文逗号(,)隔开
  fields: ["srcId","dstId","weight","begintime","endtime"]
  nebula.fields: ["srcId","dstId","weight","begintime","endtime"]

  # 将 JSON 文件中某两个 key 对应的值作为 Nebula Graph 中边起点和边终点 VID 的来源
  # 如果 VID 源数据不是 int 类型,则使用以下内容来代替 source
  # 和/或 target 的设置,在其中指定 VID 映射策略,建议设置为 "hash"。
  source: {
     field: srcId
     policy: "hash"
  }
  target: {
     field: dstId
     policy: "hash"
  }
  #source: "source"
  #target: "target"

  batch: 256
  partition: 32
  isImplicit: true
}
# 如果还有其他边类型,参考以上配置添加
    # 设置边类型 sfzh_dhhm 相关信息
{
  # Nebula Graph 中对应的边类型名称。
  name: sfzh_dhhm
  type: {
    # 指定数据源文件格式,设置为 json。
    source: json

    # 指定边数据导入 Nebula Graph 的方式,
    # 可以设置为:client(以客户端形式导入)和 sst(以 SST 文件格式导入)。
    # 关于 SST 文件导入配置,参考文档:导入 SST 文件(https://
    # docs.nebula-graph.com.cn/nebula-exchange/
    # use-exchange/ex-ug-import-sst/)。
    sink: client
  }

  # 指定 JSON 文件所在的 HDFS 路径,String 类型,必须以 hdfs:// 开头。
  path: "hdfs://10.210.141.9:8020/graph/data/nebula/SFZH_DHHM/"

  # 在 fields 里指定 JSON 文件中 key 名称,其对应的 value
  # 会作为 Nebula Graph 中指定属性 likeness 的数据源
  # 如果需要指定多个值,用英文逗号(,)隔开
  fields: ["srcId","dstId","weight","begintime","endtime"]
  nebula.fields: ["srcId","dstId","weight","begintime","endtime"]

  # 将 JSON 文件中某两个 key 对应的值作为 Nebula Graph 中边起点和边终点 VID 的来源
  # 如果 VID 源数据不是 int 类型,则使用以下内容来代替 source
  # 和/或 target 的设置,在其中指定 VID 映射策略,建议设置为 "hash"。
  source: {
     field: srcId
     policy: "hash"
  }
  target: {
     field: dstId
     policy: "hash"
  }
  #source: "source"
  #target: "target"

  batch: 256
  partition: 32
  isImplicit: true
}

]
}

点类型有 dhhm、sfzh,边类型有dhhm_dhhm、sfzh_dhhm,一起录入的时候点和边都会出现 key not found,每种标签分开录入的时候没有这种情况,可能真是因为某种原因(内存、网络)无法获取meta信息,有没有什么配置可以增加获取meta信息时长的

你好,发一下你使用的Exchange的版本,1.2.1的NebulaGraph要使用1.2.0的Exchange。

exchange-1.1.0 的

版本不匹配的,你可以直接把你本地的Exchange中pom.xml中使用的client版本换成1.2.0. 或者重新clone下 v1.0分支的代码。

好,我去试试