Star

exchange 2.0 spark submit 报错 lost task caused by java.lang.ilegalStateException

为了更快地定位、解决问题,麻烦参考下面模版提问 ^ ^

提问参考模版:

  • 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)

等一下,我好像解决了!!!这个配置文件里面的graphd列表[] ,里面配置的是你实际开启的,我就开启了172.17.0.11那台,而我写了三台,所以一些task会lost,所以会崩掉整个job,TAT TAT TAT TAT。。
但是我这个配置文件是可以的,可供参考

3赞

浙ICP备20010487号