IT袋

当前位置:主页 > 经验教程 > 建站编程 >

如何通过 Nebula Exchange 导入数据

如何通过 Nebula Exchange 导入数据

时间:2023-09-23 21:47:16 来源:IT袋 作者:苏晓敏
导读:如何通过 Nebula Exchange 导入数据,小编带来的是及Nebula的相关话题,接下来IT袋网小编为大家介绍。 Nebula Exchange 是一款 Apache Spark 应用,用于在分布式环境中将集群中的数据批量迁移到 Nebula Graph 中,能支

如何通过 Nebula Exchange 导入数据

小编带来的是及Nebula的相关话题,接下来IT袋网小编为大家介绍。

Nebula Exchange 是一款 Apache Spark 应用,用于在分布式环境中将集群中的数据批量迁移到 Nebula Graph 中,能支持多种不同格式(CSV,JSON,Parquet,Neo4j, MySQL 等等)的批式数据和流式数据的迁移。

接下来将用一个示例说明如何使用 Nebula Exchange 将存储在 HDFS 或本地的 CSV 文件数据导入 Nebula Graph。关于本地 CSV 的导入也可以使用 Nebula Import,详细信息参见 [使用 Nebula Importer] (https://docs.nebula–graph.com.cn/2.6.1/nebula-importer/use-importer/)。

下载示例数据

下载 [basketballplayer数据集] (https://docs-cdn.nebula-graph.com.cn/dataset/dataset.zip)。

解压后可以看到有 4 张表,数据结构和 Nebula 快速入门章节中介绍的一样,有 player 和 team 两个 TAG,follow 和 serve 两个 EDGE type。

如何通过 Nebula Exchange 导入数据

示例数据

在 Nebula Graph 中创建 Schema

使用 Nebula Console 创建一个图空间basketballplayer,并创建一个 Schema,如下所示。

## 创建图空间 
nebula> CREATE SPACE basketballplayer \
(partition_num = 10, \
replica_factor = 1, \
vid_type = FIXED_STRING(30)); 
## 选择图空间basketballplayer 
nebula> USE basketballplayer; 
## 创建Tag player 
nebula> CREATE TAG player(name string, age int); 
## 创建Tag team 
nebula> CREATE TAG team(name string); 
## 创建Edge type follow 
nebula> CREATE EDGE follow(degree int); 
## 创建Edge type serve 
nebula> CREATE EDGE serve(start_year int, end_year int);

修改 Nebula Exchange 配置文件

在 root/csv_application.conf 创建 Nebula Exchange 配置文件,设置 CVS 数据源相关配置。本地和 HDFS 导入 CSV 除了 path 路径不同以外,其余配置都一样。如果你使用的是 basketballplayer 数据集,那么只需要修改 Nebula 的连接信息和 CSV path 路径即可。

{
  # Spark相关配置
  spark: {
    app: {
      name: Nebula Exchange 2.6.0
    }
    driver: {
      cores: 1
      maxResultSize: 1G
    }
    executor: {
        memory:1G
    }
    cores {
      max: 16
    }
  }
  # Nebula Graph相关配置
  nebula: {
    address:{
      # 指定Graph服务和所有Meta服务的IP地址和端口。
      # 如果有多台服务器,地址之间用英文逗号(,)分隔。
      # 格式: "ip1:port","ip2:port","ip3:port"
      graph:["11.8.38.149:9669","11.8.38.150:9669","11.8.38.151:9669"]
      meta:["11.8.38.149:9559","11.8.38.150:9559","11.8.38.151:9559"]
    }
    # 指定拥有Nebula Graph写权限的用户名和密码。
    user: root
    pswd: nebula
    # 指定图空间名称。
    space: basketballplayer
    connection {
      timeout: 3000
      retry: 3
    }
    execution {
      retry: 3
    }
    error: {
      max: 32
      output: /tmp/errors
    }
    rate: {
      limit: 1024
      timeout: 1000
    }
  }
  # 处理点
  tags: [
    # 设置Tag player相关信息。
    {
      # 指定Nebula Graph中定义的Tag名称。
      name: player
      type: {
        # 指定数据源,使用CSV。
        source: csv
        # 指定如何将点数据导入Nebula Graph:Client或SST。
        sink: client
      }
      # 指定CSV文件的路径。
      # 如果文件存储在HDFS上,用双引号括起路径,以hdfs://开头,例如"hdfs://ip:port/xx/xx"。
      # 如果文件存储在本地,用双引号括起路径,以file://开头,例如"file:///tmp/xx.csv"。
      #path: "hdfs://192.168.*.*:9000/data/vertex_player.csv"
      path: "/root/dataset/vertex_player.csv"
      # 如果CSV文件没有表头,使用[_c0, _c1, _c2, ..., _cn]表示其表头,并将列指示为属性值的源。
      # 如果CSV文件有表头,则使用实际的列名。
      fields: [_c1, _c2]
      # 指定Nebula Graph中定义的属性名称。
      # fields与nebula.fields的顺序必须一一对应。
      nebula.fields: [age, name]
      # 指定一个列作为VID的源。
      # vertex的值必须与上述fields或者csv.fields中的列名保持一致。
      # 目前,Nebula Graph 2.6.1仅支持字符串或整数类型的VID。
      vertex: {
        field:_c0
        # policy:hash
      }
      # 指定的分隔符。默认值为英文逗号(,)。
      separator: ","
      # 如果CSV文件有表头,请将header设置为true。
      # 如果CSV文件没有表头,请将header设置为false。默认值为false。
      header: false
      # 指定单批次写入Nebula Graph的最大点数量。
      batch: 256
      # 指定Spark分片数量。
      partition: 32
    }
    # 设置Tag team相关信息。
    {
      # 指定Nebula Graph中定义的Tag名称。
      name: team
      type: {
        # 指定数据源,使用CSV。
        source: csv
        # 指定如何将点数据导入Nebula Graph:Client或SST。
        sink: client
      }
      # 指定CSV文件的路径。
      # 如果文件存储在HDFS上,用双引号括起路径,以hdfs://开头,例如"hdfs://ip:port/xx/xx"。
      # 如果文件存储在本地,用双引号括起路径,以file://开头,例如"file:///tmp/xx.csv"。
      # path: "hdfs://192.168.*.*:9000/data/vertex_team.csv"
      path: "/root/dataset/vertex_team.csv"
      # 如果CSV文件没有表头,使用[_c0, _c1, _c2, ..., _cn]表示其表头,并将列指示为属性值的源。
      # 如果CSV文件有表头,则使用实际的列名。
      fields: [_c1]
      # 指定Nebula Graph中定义的属性名称。
      # fields与nebula.fields的顺序必须一一对应。
      nebula.fields: [name]
      # 指定一个列作为VID的源。
      # vertex的值必须与上述fields或者csv.fields中的列名保持一致。
      # 目前,Nebula Graph 2.6.1仅支持字符串或整数类型的VID。
      vertex: {
        field:_c0
        # policy:hash
      }
      # 指定的分隔符。默认值为英文逗号(,)。
      separator: ","
      # 如果CSV文件有表头,请将header设置为true。
      # 如果CSV文件没有表头,请将header设置为false。默认值为false。
      header: false
      # 指定单批次写入Nebula Graph的最大点数量。
      batch: 256
      # 指定Spark分片数量。
      partition: 32
    }
    # 如果需要添加更多点,请参考前面的配置进行添加。
  ]
  # 处理边
  edges: [
    # 设置Edge type follow相关信息。
    {
      # 指定Nebula Graph中定义的Edge type名称。
      name: follow
      type: {
        # 指定数据源,使用CSV。
        source: csv
        # 指定如何将点数据导入Nebula Graph:Client或SST。
        sink: client
      }
      # 指定CSV文件的路径。
      # 如果文件存储在HDFS上,用双引号括起路径,以hdfs://开头,例如"hdfs://ip:port/xx/xx"。
      # 如果文件存储在本地,用双引号括起路径,以file://开头,例如"file:///tmp/xx.csv"。
      # path: "hdfs://192.168.*.*:9000/data/edge_follow.csv"
      path: "/root/dataset/edge_follow.csv"
      # 如果CSV文件没有表头,使用[_c0, _c1, _c2, ..., _cn]表示其表头,并将列指示为属性值的源。
      # 如果CSV文件有表头,则使用实际的列名。
      fields: [_c2]
      # 指定Nebula Graph中定义的属性名称。
      # fields与nebula.fields的顺序必须一一对应。
      nebula.fields: [degree]
      # 指定一个列作为起始点和目的点的源。
      # vertex的值必须与上述fields或者csv.fields中的列名保持一致。
      # 目前,Nebula Graph 2.6.1仅支持字符串或整数类型的VID。
      source: {
        field: _c0
      }
      target: {
        field: _c1
      }
      # 指定的分隔符。默认值为英文逗号(,)。
      separator: ","
      # 指定一个列作为rank的源(可选)。
      #ranking: rank
      # 如果CSV文件有表头,请将header设置为true。
      # 如果CSV文件没有表头,请将header设置为false。默认值为false。
      header: false
      # 指定单批次写入Nebula Graph的最大边数量。
      batch: 256
      # 指定Spark分片数量。
      partition: 32
    }
    # 设置Edge type serve相关信息。
    {
      # 指定Nebula Graph中定义的Edge type名称。
      name: serve
      type: {
        # 指定数据源,使用CSV。
        source: csv
        # 指定如何将点数据导入Nebula Graph:Client或SST。
        sink: client
      }
      # 指定CSV文件的路径。
      # 如果文件存储在HDFS上,用双引号括起路径,以hdfs://开头,例如"hdfs://ip:port/xx/xx"。
      # 如果文件存储在本地,用双引号括起路径,以file://开头,例如"file:///tmp/xx.csv"。
      # path: "hdfs://192.168.*.*:9000/data/edge_serve.csv"
      path: "/root/dataset/edge_serve.csv"
      # 如果CSV文件没有表头,使用[_c0, _c1, _c2, ..., _cn]表示其表头,并将列指示为属性值的源。
      # 如果CSV文件有表头,则使用实际的列名。
      fields: [_c2,_c3]
      # 指定Nebula Graph中定义的属性名称。
      # fields与nebula.fields的顺序必须一一对应。
      nebula.fields: [start_year, end_year]
      # 指定一个列作为起始点和目的点的源。
      # vertex的值必须与上述fields或者csv.fields中的列名保持一致。
      # 目前,Nebula Graph 2.6.1仅支持字符串或整数类型的VID。
      source: {
        field: _c0
      }
      target: {
        field: _c1
      }
      # 指定的分隔符。默认值为英文逗号(,)。
      separator: ","
      # 指定一个列作为rank的源(可选)。
      #ranking: _c5
      # 如果CSV文件有表头,请将header设置为true。
      # 如果CSV文件没有表头,请将header设置为false。默认值为false。
      header: false
      # 指定单批次写入Nebula Graph的最大边数量。
      batch: 256
      # 指定Spark分片数量。
      partition: 32
    }
  ]
  # 如果需要添加更多边,请参考前面的配置进行添加。
}

相关阅读

  • 怎么配置服务器? 服务器配置包含哪些方面?

    怎么配置服务器? 服务器配置包含哪些方面?

    您可能不了解怎么配置服务器方面的内容,接下来小编为网友介绍。 在计算机网络领域中,服务器是指能够接受客户端请求并提供服务的计算机程序或硬件设备。服务器配置指的是对服务器硬

  • 密码安全指南:理解和防范常用密码字典攻击

    密码安全指南:理解和防范常用密码字典攻击

    IT袋网网为你介绍密码安全指南的相关经验,一起来了解了解吧。 密码字典攻击是一种常见的网络攻击方式,黑客会使用预先编译的常用密码列表(也称为密码字典)来破解用户的密码。 本文

  • 数据库备份的方法有哪些? 备份数据库注意事项有哪些

    数据库备份的方法有哪些? 备份数据库注意事项有哪些

    IT电脑小知识篇,关于数据库备份的方法有哪些的相关经验,接下来分享详细内容。 数据库备份是指将数据库中的数据复制到另一个存储设备或位置的过程。 备份是非常重要的,因为它可以帮

  • sql数据库入门基础知识 sql数据库学习

    sql数据库入门基础知识 sql数据库学习

    今日重点为您介绍sql数据库入门基础知识的电脑方面的小经验,接下来分享详细内容。 SQL(Structured Query Language,结构化查询语言)是一种用于管理关系数据库的编程语言。 它允许您创建和修