Source: https://dev-docs.yueshu.com.cn/v5.3.2/utilities/exchange/import-data/ Documentation version: v5.3.2 # 使用悦数数据迁移导入数据 本文介绍如何使用悦数数据迁移将数据导入悦数图数据库开发版。 Note 本文介绍的是标准导入方式,通过预设的数据写入模式(`INSERT`、`INSERT IGNORE`等)将数据写入悦数图数据库开发版。如需自定义写入逻辑,请参见 [基于 GQL 模板导入](https://dev-docs.yueshu.com.cn/v5.3.2/utilities/exchange/import-data/template-import/)。 ## 前提条件 - 悦数数据迁移已部署。更多信息,请参见[部署悦数数据迁移](https://dev-docs.yueshu.com.cn/v5.3.2/utilities/exchange/deploy-exchange/)。 - 悦数图数据库开发版服务组正在运行中。更多信息,请参见[快速开始](https://dev-docs.yueshu.com.cn/v5.3.2/get-started/deploy/)。 ## 步骤 1:准备配置文件 配置文件必须采用 HOCON(Human-Optimized Config Object Notation)格式,并包含以下信息: - 悦数图数据库开发版服务组中 Graph 服务的连接配置。 - 错误配置,如错误记录的路径和上限等配置。 - Checkpoint 文件配置,用于实现断点续传(如适用)。 - 通用配置,包含通用源配置和通用写配置。 - 数据源配置,包含: - 数据源的连接信息和特定配置。更多信息,请参见以下文档: - [本地数据源配置](https://dev-docs.yueshu.com.cn/v5.3.2/utilities/exchange/config/sources/local/) - [HDFS 配置](https://dev-docs.yueshu.com.cn/v5.3.2/utilities/exchange/config/sources/hdfs/) - [Hive 配置](https://dev-docs.yueshu.com.cn/v5.3.2/utilities/exchange/config/sources/hive/) - [JDBC 配置](https://dev-docs.yueshu.com.cn/v5.3.2/utilities/exchange/config/sources/jdbc/) - [Kafka 配置](https://dev-docs.yueshu.com.cn/v5.3.2/utilities/exchange/config/sources/kafka/) - [MaxCompute 配置](https://dev-docs.yueshu.com.cn/v5.3.2/utilities/exchange/config/sources/maxcompute/) - [Neo4j 配置](https://dev-docs.yueshu.com.cn/v5.3.2/utilities/exchange/config/sources/neo4j/) - [NebulaGraph 3.x 配置](https://dev-docs.yueshu.com.cn/v5.3.2/utilities/exchange/config/sources/nebula3/) - [Amazon S3 配置](https://dev-docs.yueshu.com.cn/v5.3.2/utilities/exchange/config/sources/s3/) - [腾讯云配置](https://dev-docs.yueshu.com.cn/v5.3.2/utilities/exchange/config/sources/tencent/) - 数据预处理配置。更多信息,请参见[预处理配置](https://dev-docs.yueshu.com.cn/v5.3.2/utilities/exchange/config/sources/preprocess/)。 - 源数据与悦数图数据库开发版的图元素之间的映射配置。更多信息,请参见[映射配置](https://dev-docs.yueshu.com.cn/v5.3.2/utilities/exchange/config/sources/mapping/)。 关于配置文件结构的更多信息,请参见[数据导入配置](https://dev-docs.yueshu.com.cn/v5.3.2/utilities/exchange/config/)。 在本例中,我们将从本地的 CSV 文件中导入[电影数据集](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/overview/example-dataset/)的部分数据。完整的配置文件如下所示: 将``替换为登录账号的当前密码。若已修改密码,请使用修改后的密码。 本地源配置示例 ```` { taskType: import nebula: { graphAddr: "127.0.0.1:9669" graphName: "movie" user: "root" passwd: "" } 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:在悦数图数据库开发版创建图 如果已在[悦数图数据库开发版配置](https://dev-docs.yueshu.com.cn/v5.3.2/utilities/exchange/config/#_3)中设置了`preHooks`,可跳过此步骤。 如果未设置`preHooks`,需要在悦数图数据库开发版中创建一个图,用于存储要导入的数据。在悦数图数据库开发版中,图是基于图类型创建的。图类型定义了图的数据结构。为确保数据正确导入,图类型必须与源数据的数据结构匹配。 例如,假设您的源数据包含[电影数据集](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/overview/example-dataset/),在连接到悦数图数据库开发版服务组后,您需要创建以下图类型和图: ```` ''' // 创建名为 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](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/ddl/graph-type/create/) 和 [CREATE GRAPH](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/ddl/graph/create/)。 ## 步骤 3:导入数据 1. 在`yueshu-graph-exchange/`目录下,使用 JAR 包`cli-5.3.0.jar`导入数据,命令如下: ```` java -jar cli-5.3.0.jar -f -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`](https://dev-docs.yueshu.com.cn/v5.3.2/utilities/exchange/config/#_6)路径中查看失败的记录。 | 否 | 无 | `-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`的乘积大于[部署悦数数据迁移](https://dev-docs.yueshu.com.cn/v5.3.2/utilities/exchange/deploy-exchange/)中设置的`i`和`c`的乘积,则会自动调整为`i`和`c`的乘积。 如果成功提交导入命令,会显示以下示例信息: ```` ... starting the server... starting to import... exchange app id: import finished! ```` 2. 导入完成后,可以选择以下文件查看相应的导入情况: - `yueshu-graph-exchange/.json`:导入结果包含以下字段: - costSeconds:完成整体数据导入过程所花费的总秒数 - qps:每秒查询数,表示作业的处理速度 - totalSourceRecords:源数据中的总记录数 - totalSuccessRecords:处理成功的总记录数 - successNodes:处理成功的点记录数 - successEdges:处理成功的边记录数 - totalFailureRecords:处理失败的总记录数 - FailureNodes:处理失败的点记录数 - FailureEdges:处理失败的边记录数 - totalAffectedRecords:更新或删除等操作中受影响的总记录数 - affectedNodes:更新或删除等操作中受影响的点记录数 - affectedEdges:更新或删除等操作中受影响的边记录数 - `yueshu-graph-exchange/logs/import.log`:导入的实时进展情况 - `yueshu-graph-exchange/logs/.log`:每个作业的运行结果和具体错误信息 - `error.path`路径下的文件:数据迁移中的脏记录和失败记录