为了更快地定位、解决问题,麻烦参考下面模版提问 ^ ^
提问参考模版:
- nebula 版本:2.0-beta
- 部署方式(分布式 / 单机 / Docker / DBaaS):分布式(三个docker容器)
- 硬件信息
- 磁盘( 必须为 SSD ,不支持 HDD)
- CPU、内存信息:6G
- 出问题的 Space 的创建方式:执行exchange2.0 spark-submit时候;
- 问题的具体描述
再hdfs中存放数据:
{"source":53802643,"target":87847387,"likeness":0.34}
{"source":29509860,"target":57501950,"likeness":0.40}
{"source":97319348,"target":50240344,"likeness":0.77}
{"source":94295709,"target":8189720,"likeness":0.82}
{"source":78707720,"target":53874070,"likeness":0.98}
{"source":23399562,"target":20136097,"likeness":0.47}
配置文件:
{
# Spark 相关配置
spark: {
app: {
name: Spark Writer
}
driver: {
cores: 1
maxResultSize: 1G
}
cores {
max: 16
}
}
# Nebula Graph 相关配置
nebula: {
address:{
# 以下为 Nebula Graph 的 Graph 服务和 Meta 服务所在机器的 IP 地址及端口
# 如果有多个地址,格式为 "ip1:port","ip2:port","ip3:port"
# 不同地址之间以英文逗号 (,) 隔开
graph:["172.17.0.11:3699","172.17.0.16:3699","172.17.0.18:3699"]
meta:["172.17.0.11:45500"]
}
# 填写的账号必须拥有 Nebula Graph 相应图空间的写数据权限
user: user
pswd: password
# 填写 Nebula Graph 中需要写入数据的图空间名称
space: json
connection {
timeout: 3000
retry: 3
}
execution {
retry: 3
}
error: {
max: 32
output: /tmp/errors
}
rate: {
limit: 1024
timeout: 1000
}
}
# 处理标签
tags: [
# 设置标签 source 相关信息
{
# 设置为 Nebula Graph 中对应的标签名称
name: source
type: {
# 指定数据源文件格式,设置为 json。
source: json
# 指定标签数据导入 Nebula Graph 的方式,
# 可以设置为:client(以客户端形式导入)和 sst(以 SST 文件格式导入)。
# 关于 SST 文件导入配置,参考文档:导入 SST 文件。
sink: client
}
# JSON 文件所在的 HDFS 路径,String 类型,必须以 hdfs:// 开头。
path: "hdfs://master:9000/nebula/test1/test.json"
# 在 fields 里指定 JSON 文件中 key 名称,其对应的 value
# 会作为 Nebula Graph 中指定属性 srcId 的数据源
# 如果需要指定多个值,用英文逗号(,)隔开
fields: ["source"]
nebula.fields: ["srcId"]
# 将 JSON 文件中某个 key 对应的值作为 Nebula Graph 中点 VID 的来源
# 如果 VID 源数据不是 int 类型,则使用以下内容来代替 vertex 的设置,在其中指定 VID 映射策略,建议设置为 "hash"。
# vertex: {
# field: key_name_in_json
# 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: target
type: {
source: json
sink: client
}
path: "hdfs://master:9000/nebula/test1/test.json"
fields: ["target"]
nebula.fields: ["dstId"]
vertex: "target"
batch: 256
partition: 32
isImplicit: true
}
# 如果还有其他标签,参考以上配置添加
]
# 处理边数据
edges: [
# 设置边类型 like 相关信息
{
# Nebula Graph 中对应的边类型名称。
name: like
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://master:9000/nebula/test1/test.json"
# 在 fields 里指定 JSON 文件中 key 名称,其对应的 value
# 会作为 Nebula Graph 中指定属性 likeness 的数据源
# 如果需要指定多个值,用英文逗号(,)隔开
fields: ["likeness"]
nebula.fields: ["likeness"]
# 将 JSON 文件中某两个 key 对应的值作为 Nebula Graph 中边起点和边终点 VID 的来源
# 如果 VID 源数据不是 int 类型,则使用以下内容来代替 source
# 和/或 target 的设置,在其中指定 VID 映射策略,建议设置为 "hash"。
# source: {
# field: key_name_in_json
# policy: "hash"
# }
# target: {
# field: key_name_in_json
# policy: "hash"
# }
source: "source"
target: "target"
batch: 256
partition: 32
isImplicit: true
}
# 如果还有其他边类型,参考以上配置添加
]
}
运行:
$SPARK_HOME/bin/spark-submit --class com.vesoft.nebula.exchange.Exchange --master spark://master:7077 nebula-exchange-2.0.0.jar -c ./conf/application.conf
此处注意:Exchange 2.0的全限定名:com.vesoft.nebula.exchange.Exchange,与1.0不同
Driver stacktrace:
2021-01-13 13:04:30 INFO TaskSetManager:54 - Lost task 24.3 in stage 2.0 (TID 26) on 172.17.0.11, executor 0: java.lang.IllegalStateException (null) [duplicate 17]
2021-01-13 13:04:30 INFO TaskSetManager:54 - Lost task 26.3 in stage 2.0 (TID 25) on 172.17.0.11, executor 0: java.lang.IllegalStateException (null) [duplicate 18]
2021-01-13 13:04:30 INFO DAGScheduler:54 - Job 1 failed: foreachPartition at VerticesProcessor.scala:138, took 6.543027 s
Exception in thread "main" org.apache.spark.SparkException: Job aborted due to stage failure: Task 27 in stage 2.0 failed 4 times, most recent failure: Lost task 27.3 in stage 2.0 (TID 24, 172.17.0.11, executor 0): java.lang.IllegalStateException
at com.google.common.base.Preconditions.checkState(Preconditions.java:133)
at com.google.common.net.HostAndPort.getPort(HostAndPort.java:109)
at com.vesoft.nebula.exchange.GraphProvider$$anonfun$1.apply(GraphProvider.scala:29)
at com.vesoft.nebula.exchange.GraphProvider$$anonfun$1.apply(GraphProvider.scala:28)
at scala.collection.immutable.List.foreach(List.scala:392)
at com.vesoft.nebula.exchange.GraphProvider.<init>(GraphProvider.scala:28)
at com.vesoft.nebula.exchange.processor.VerticesProcessor.com$vesoft$nebula$exchange$processor$VerticesProcessor$$processEachPartition(VerticesProcessor.scala:56)
at com.vesoft.nebula.exchange.processor.VerticesProcessor$$anonfun$process$2.apply(VerticesProcessor.scala:138)
at com.vesoft.nebula.exchange.processor.VerticesProcessor$$anonfun$process$2.apply(VerticesProcessor.scala:138)
at org.apache.spark.rdd.RDD$$anonfun$foreachPartition$1$$anonfun$apply$28.apply(RDD.scala:935)
at org.apache.spark.rdd.RDD$$anonfun$foreachPartition$1$$anonfun$apply$28.apply(RDD.scala:935)
at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:2101)
at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:2101)
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:90)
at org.apache.spark.scheduler.Task.run(Task.scala:121)
at org.apache.spark.executor.Executor$TaskRunner$$anonfun$10.apply(Executor.scala:402)
at org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:1360)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:408)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)