跳转至
开发版采用单机部署,无需产品 License 文件。需要多机部署或大规模性能测试? 了解企业版

使用悦数数据迁移导入数据

本文介绍如何使用悦数数据迁移将数据导入悦数图数据库开发版。

Note

本文介绍的是标准导入方式,通过预设的数据写入模式(INSERT、INSERT IGNORE等)将数据写入悦数图数据库开发版。如需自定义写入逻辑,请参见 基于 GQL 模板导入。

前提条件

步骤 1:准备配置文件

配置文件必须采用 HOCON(Human-Optimized Config Object Notation)格式,并包含以下信息:

关于配置文件结构的更多信息,请参见数据导入配置。

在本例中,我们将从本地的 CSV 文件中导入电影数据集的部分数据。完整的配置文件如下所示:

将<current-password>替换为登录账号的当前密码。若已修改密码,请使用修改后的密码。

本地源配置示例
{
  taskType: import
  nebula: {
    graphAddr: "127.0.0.1:9669"
    graphName: "movie"
    user: "root"
    passwd: "<current-password>"
  }
  error: {
    path: "/tmp/errors"
    maxRecords: 10000
  }
  checkPoint: {
    path: "/tmp/checkpoint"
    resume: false
  } 
  sourcesCommon:{
    type:"local"
    format: "csv"
    header:true
    separator:","
  }
  writeCommon:{
    batchSize: 2000 
    enableRealTimeQPSLog: true
    mode: "INSERT IGNORE"
  }
  sources: [
    # node type Actor
    {
      path: "/tmp/import_movie/sub_actor.csv"
      pre_processes: {
          filter: ["birth_date!='\\N'"]
          concatConstant: [
            {
              field: "name"
              prefixValue: "test_"
              suffixValue: ""
            }
          ]
      }
      nodetypes: [
        {
          name: "Actor"
          sourceFields: [people_id,name,birth_date]
          nebulaFields: [id,name,birthDate]
        }
      ]
    }
    # node type Movie
    {
      path: "/tmp/import_movie/sub_movie.csv"
      nodetypes: [
        {
          name: "Movie"
          sourceFields: [movie_id,name]
          nebulaFields: [id,name]
        }
      ]
    }
   # edge type Act
    {
      path: "/tmp/import_movie/sub_actor_act_movie.csv"
      edgetypes: [
        {
          name: "Act"
          sourceKeys: [people_id]
          nebulaSrcKeys: [id]
          targetKeys: [movie_id]
          nebulaDstKeys: [id]
          sourceFields: []
          nebulaFields: []
        }
      ]
    }

  ]
}

(可选)步骤 2:在悦数图数据库开发版创建图

如果已在悦数图数据库开发版配置中设置了preHooks,可跳过此步骤。

如果未设置preHooks,需要在悦数图数据库开发版中创建一个图,用于存储要导入的数据。在悦数图数据库开发版中,图是基于图类型创建的。图类型定义了图的数据结构。为确保数据正确导入,图类型必须与源数据的数据结构匹配。

例如,假设您的源数据包含电影数据集,在连接到悦数图数据库开发版服务组后,您需要创建以下图类型和图:

'''
// 创建名为 movie_type 的图类型
CREATE GRAPH TYPE IF NOT EXISTS movie_type AS { 
    NODE Actor (LABEL Person {id INT64, name STRING, birthDate DATE, PRIMARY KEY (id)}) , 
    NODE Director (LABEL Person {id INT64, name STRING, birthDate DATE, PRIMARY KEY (id)}), 
    NODE `User` (LABEL Person {id INT64 PRIMARY KEY}), 
    NODE Movie (LABEL Movie {id INT64 PRIMARY KEY, name STRING}), 
    NODE Genre (LABEL Genre {id INT64 PRIMARY KEY, name STRING}), 
    EDGE Act (Actor)-[:Act]->(Movie), 
    EDGE Direct (Director)-[:Direct]->(Movie), 
    EDGE Watch (`User`)-[:Watch {rate FLOAT}]->(Movie), 
    EDGE WithGenre (Movie)-[:WithGenre]->(Genre) 
    }
'''

'''
// 基于图类型创建名为 movie 的图
CREATE GRAPH IF NOT EXISTS movie TYPED movie_type
'''

关于创建图类型和图的更多信息,请参见 CREATE GRAPH TYPE 和 CREATE GRAPH。

步骤 3:导入数据

  1. 在yueshu-graph-exchange/目录下,使用 JAR 包cli-5.3.0.jar导入数据,命令如下:

    java -jar cli-5.3.0.jar -f <path_of_config_file> -n 5 -p 2
    

    下表列出了命令行选项:

    选项 别名 描述 是否必选 默认值
    -file -f 配置文件的路径。可以指定以下来源中的路径:
    • 本地:使用本地文件系统中的绝对路径、相对路径或前缀file://加上绝对路径。
    • HDFS:使用前缀hdfs://加上 HDFS 中源数据的路径。
    • Amazon S3:使用前缀s3a://加上 Amazon S3 中源数据的路径。
    • 腾讯云:使用前缀cosn://加上腾讯云中源数据的路径。
    是 无
    -jar -j 悦数数据迁移 JAR 包的路径。 是 yueshu-exchange-5.3.0.jar
    -log - 在yueshu-graph-exchange/logs文件夹下自定义的子目录,用于存放日志文件。
    如果未指定此选项,默认存储日志至yueshu-graph-exchange/logs文件夹内。
    否 无
    -driverMemory -d 驱动可以使用的最大内存。驱动程序负责分配和管理工作节点上的数据导入任务。 No 1G
    -memory -m 每个作业可使用的最大内存。一个作业包含多个数据导入任务,能够实现一次完整的数据导入过程。 否 1G
    -num -n 用于导入数据的作业数。 否 20
    -parallel -p 每个作业中并行运行的核数。 否 5
    -ip - Spark 服务器的本地 IP 地址。如未指定,则自动获取该 IP 地址。 否 无
    -port - Spark 服务器的端口。 否 1077
    -check - 是否检查配置文件的有效性。
    如果指定了此选项,悦数数据迁移将检查配置文件的有效性,但不导入数据。检查结果记录在yueshu-graph-exchange/目录或者通过-log指定的目录下的logs/check.log日志文件中。
    如果未指定此选项,悦数数据迁移将尝试根据配置文件导入数据。导入结果记录在yueshu-graph-exchange/目录或者通过-log指定的目录下的logs/import.log日志文件中。
    否 无
    -dry - 是否执行预演(dry run)。
    如果指定了此选项,悦数数据迁移将执行导入过程的预演,包括读取源数据,统计要导入的记录数,但不会把数据导入悦数图数据库开发版。
    否 无
    -h - 是否打印帮助信息。 否 无
    -reload - 是否重新加载执行失败的 GQL 语句。每次数据导入任务完成后,都会返回一个唯一的名为app id的 ID。可以指定app id来重新加载在上一次运行中执行失败的 GQL 语句。此外,可以前往error.path路径中查看失败的记录。 否 无
    -spark -s 您的 Spark 主目录的路径。
    如已拥有自己的 Spark,按需启用此选项。
    否 无
    -mode -o 您的 Spark 的主模式。
    如果指定了选项-spark,此项必填。
    否 无
    -conf - 高级配置信息。多个配置项用空格分隔,例如-conf a -conf b。
    访问 Kerberos 认证的 HDFS 时,可按照如下方式配置此项-conf "spark.driver.extraJavaOptions=-Djava.security.krb5.conf=./krb5.conf" -conf "spark.executor.extraJavaOptions=-Djava.security.krb5.conf=./krb5.conf"。
    否 无
    -files - 随作业分发的资源文件路径。
    例如,配置访问 Kerberos 认证的 HDFS 时,按如下方式指定此项-files "/local/path/to/hdfs.keytab,/local/path/to/krb5.conf"。
    否 无

    注意:若n和p的乘积大于部署悦数数据迁移中设置的i和c的乘积,则会自动调整为i和c的乘积。

    如果成功提交导入命令,会显示以下示例信息:

    ...
    starting the server...
    
    starting to import...
    
    exchange app id: <your app id>
    import finished!
    
  2. 导入完成后,可以选择以下文件查看相应的导入情况:

    • yueshu-graph-exchange/<app_date_number_result>.json:导入结果包含以下字段:

      • costSeconds:完成整体数据导入过程所花费的总秒数
      • qps:每秒查询数,表示作业的处理速度
      • totalSourceRecords:源数据中的总记录数
      • totalSuccessRecords:处理成功的总记录数
      • successNodes:处理成功的点记录数
      • successEdges:处理成功的边记录数
      • totalFailureRecords:处理失败的总记录数
      • FailureNodes:处理失败的点记录数
      • FailureEdges:处理失败的边记录数
      • totalAffectedRecords:更新或删除等操作中受影响的总记录数
      • affectedNodes:更新或删除等操作中受影响的点记录数
      • affectedEdges:更新或删除等操作中受影响的边记录数
    • yueshu-graph-exchange/logs/import.log:导入的实时进展情况
    • yueshu-graph-exchange/logs/<stderr._number>.log:每个作业的运行结果和具体错误信息
    • error.path路径下的文件:数据迁移中的脏记录和失败记录