将HIVE数据导入nebula报错版本2.5.0

1:本地环境描述:根据 导入Hive数据 - Nebula Graph Database 手册 官网介绍在本地搭建HADOOP,HIVE,SPARK环境。nebula-exchange-2.5.0.jar 从官网直接下载的。SPARK与HIVE同在一台主机上,nebula顶点player已建立,HIVIE表中player已建立。
2:报错:将HIVE数据导入到nebula,SPARK程序显示报错,找不到player,参见截图

3:SPARK启动命令:

/cheerzan/spark-2.4.7-bin-hadoop2.7/bin/spark-submit --master "local" --class com.vesoft.nebula.exchange.Exchange /cheerzan/sparkjar/nebula-exchange-2.5.0.jar -c /cheerzan/sparkjar/application.conf -h

4:application.conf

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

    master:local

    driver: {
      cores: 1
      maxResultSize: 1G
    }

    executor: {
        memory:1G
    }

    cores:{
      max: 16
    }
  }

  # if the hive is hive-on-spark with derby mode, you can ignore this hive configure
  # get the config values from file $HIVE_HOME/conf/hive-site.xml or hive-default.xml

  #  hive: {
  #    warehouse: "hdfs://NAMENODE_IP:9000/apps/svr/hive-xxx/warehouse/"
  #    connectionURL: "jdbc:mysql://your_ip:3306/hive_spark?characterEncoding=UTF-8"
  #    connectionDriverName: "com.mysql.jdbc.Driver"
  #    connectionUserName: "user"
  #    connectionPassword: "password"
  #  }


  # Nebula Graph relation config
  nebula: {
    address:{
      graph:["192.168.43.133:9669"]
      meta:["192.168.43.133:9559"]
    }
    user: root
    pswd: nebula
    space: test

    # parameters for SST import, not required
    #  path:{
    #      local:"/tmp"
    #      remote:"/sst"
    #     hdfs.namenode: "hdfs://name_node:9000"
    #  }

    # nebula client connection parameters
    connection {
      # socket connect & execute timeout, unit: millisecond
      timeout: 30000
    }

    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
    }
  }

  # 处理点
  tags: [
    # 设置Tag player相关信息。
    {
      # Nebula Graph中对应的Tag名称。
      name: player
      type: {
        # 指定数据源文件格式,设置为hive。
        source: hive
        # 指定如何将点数据导入Nebula Graph:Client或SST。
        sink: client
      }

      # 设置读取数据库basketball中player表数据的SQL语句
      exec: "select playerid, age, name from basketball.player"

      # 在fields里指定player表中的列名称,其对应的value会作为Nebula Graph中指定属性。
      # fields和nebula.fields里的配置必须一一对应。
      # 如果需要指定多个列名称,用英文逗号(,)隔开。
      fields: [age,name]
      nebula.fields: [age,name]

      # 指定表中某一列数据为Nebula Graph中点VID的来源。
      vertex:{
        field:playerid
      }

      # 单批次写入 Nebula Graph 的最大数据条数。
      batch: 256

      # Spark 分区数量
      partition: 32
    }
    # 设置Tag team相关信息。
    {
      name: team
      type: {
        source: hive
        sink: client
      }
      exec: "select teamid, name from basketball.team"
      fields: [name]
      nebula.fields: [name]
      vertex: {
        field: teamid
      }
      batch: 256
      partition: 32
    }

  ]

  # 处理边数据
  edges: [
    # 设置Edge type follow相关信息
    {
      # Nebula Graph中对应的Edge type名称。
      name: follow

      type: {
        # 指定数据源文件格式,设置为hive。
        source: hive

        # 指定边数据导入Nebula Graph的方式,
        # 指定如何将点数据导入Nebula Graph:Client或SST。
        sink: client
      }

      # 设置读取数据库basketball中follow表数据的SQL语句。
      exec: "select src_player, dst_player, degree from basketball.follow"

      # 在fields里指定follow表中的列名称,其对应的value会作为Nebula Graph中指定属性。
      # fields和nebula.fields里的配置必须一一对应。
      # 如果需要指定多个列名称,用英文逗号(,)隔开。
      fields: [degree]
      nebula.fields: [degree]

      # 在source里,将follow表中某一列作为边的起始点数据源。
      # 在target里,将follow表中某一列作为边的目的点数据源。
      source: {
        field: src_player
      }

      target: {
        field: dst_player
      }

      # 单批次写入 Nebula Graph 的最大数据条数。
      batch: 256

      # Spark 分区数量
      partition: 32
    }

    # 设置Edge type serve相关信息
    {
      name: serve
      type: {
        source: hive
        sink: client
      }
      exec: "select playerid, teamid, start_year, end_year from basketball.serve"
      fields: [start_year,end_year]
      nebula.fields: [start_year,end_year]
      source: {
        field: playerid
      }
      target: {
        field: teamid
      }
      batch: 256
      partition: 32
    }
  ]
}

5:截图



为啥你配置里的是 133 ip,截图里的是 134,:thinking: 你是不是 ip 没配置好

nebula 部署再192.168.43.133中。
SPARK,HIVE部署再192.168.43.134。
这样配置没有问题吧?

官网大拿能帮助看看吗?

两个 ip 能通信吗?

space 等于 Schema 吧?我应该改为basketball吧。

space 不等于 schema 啊,类似 sql 中的 table 的概念。应该是同你的 studio 那边的 basketball

导入的数据的schema 要提前在相应的 space 里创建好哈,比如你想要导入到 test 这个空间,需要创建 test 这个空间,并在 test 里创建响应的 tags/edges 的定义(schema)哈

1 个赞

谢谢

浙ICP备20010487号