Nebula Exchange 更新至2.5.0后导入数据显示java.net.UnknownHostException: nebula-metad-2.nebula-metad

提问

  • nebula 版本:2.5.0
  • nebula exchange 版本:2.5.0
  • 导入方式:导入MaxCompute
  • 将nebula升级至2.5.0且nebula exchange升级至2.5.0后,使用配置文件导入时发生如下报错(使用nebula 2.0.1版本和nebula exchange 2.1.0版本导入数据时未发生报错)
  • meta服务使用telnet查看可以正常连接
终端输出
ERROR MetaClient: Get Space Error: java.net.UnknownHostException: nebula-metad-2.nebula-metad
Exception in thread "main" com.facebook.thrift.transport.TTransportException: java.net.UnknownHostException:

把配置文件贴一下呢

{
  # Spark relation config
  spark: {
    app: {
      name: Nebula Exchange 2.5.0
    }

    master:local

    driver: {
      cores: 1
      maxResultSize: 1G
    }

    executor: {
        memory:1G
    }

    cores:{
      max: 16
    }
  }


  # Nebula Graph relation config
  nebula: {
    address:{
      graph:["<部署服务器的ip>:9669"]
      meta:["<部署服务器的ip>:9559"]
    }
    user: root
    pswd: nebula
    space: dataworks_table_relation2


    # nebula client connection parameters
    connection {
      # socket connect & execute timeout, unit: millisecond
      timeout: 3000
      retry: 3
    }
    execution {
      retry: 3
    }
    error: {
      # max number of failures, if the number of failures is bigger than max, then exit the application.
      max: 32
      # failed import job will be recorded in output path
      output: /tmp/errors
    }

    # use google's RateLimiter to limit the requests send to NebulaGraph
    rate: {
      # the stable throughput of RateLimiter
      limit: 1024
      # Acquires a permit from RateLimiter, unit: MILLISECONDS
      # if it can't be obtained within the specified timeout, then give up the request.
      timeout: 1000
    }
  }

# Processing tags
  # There are tag config examples for different dataSources.
  tags: [

    # MaxCompute
    {
      name: table
      type:{
        source:maxcompute
        sink:client
      }
      table:dwd_parse_tools_table_list
      project:atta_tools_dev
      odpsUrl:xxx
      tunnelUrl:xxx
      accessKeyId:xxx
      accessKeySecret:xxx
      # partitionSpec:"dt='partition1'"
      # maxcompute sql sentence only uses table name. make sure that table name is the same with {table}'s value'.
      sentence:"select uid, table_name from dwd_parse_tools_table_list"
      fields:[table_name]
      nebula.fields:[name]
      vertex:{
        field: uid
      }
      partition:10
      batch:256
    }
  ]

  # Processing edges
  # There are edge config examples for different dataSources.
  edges: [

    # MaxCompute
    {
      name: is_child
      type:{
        source:maxcompute
        sink:client
      }
      table:dwd_parse_tools_table_relation
      project:atta_tools_dev
      odpsUrl:xxx
      tunnelUrl:xxx
      accessKeyId:xxx
      accessKeySecret:xxx
      # partitionSpec:"dt='partition1'"
      # maxcompute sql sentence only uses table name.
      sentence:"select uid,partner_id from dwd_parse_tools_table_relation WHERE partner_id IS NOT NULL"
      fields:[]
      nebula.fields:[]
      source:{
        field: uid
      }
      target:{
        field: partner_id
      }
      partition:10
      batch:10
    }

  ]
}

你的部署方式是docker?
meta在docker内部的地址 在docker外无法访问。

用K8S部署的,端口已经映射过了,在nebula 2.0.1版本和nebula exchange 2.1.0 版本时用同样的配置文件是可以成功导入数据的

2.5和2.0.1不一样的,meta 也会存在leader change了,发生leader change时客户端会拿真正的leader的host去连接meta服务。 真正的leader host 返回出来的是nebula-metad-2.nebula-metad。

或者你把所有meta服务的ip都映射出来,或者你换个meta地址

1 个赞

好的,多谢,我试试