使用悦数数据迁移导入数据¶
本文介绍如何使用悦数数据迁移将数据导入悦数图数据库开发版。
Note
本文介绍的是标准导入方式,通过预设的数据写入模式(INSERT、INSERT IGNORE等)将数据写入悦数图数据库开发版。如需自定义写入逻辑,请参见
基于 GQL 模板导入。
前提条件¶
步骤 1:准备配置文件¶
配置文件必须采用 HOCON(Human-Optimized Config Object Notation)格式,并包含以下信息:
- 悦数图数据库开发版服务组中 Graph 服务的连接配置。
- 错误配置,如错误记录的路径和上限等配置。
- Checkpoint 文件配置,用于实现断点续传(如适用)。
- 通用配置,包含通用源配置和通用写配置。
- 数据源配置,包含:
关于配置文件结构的更多信息,请参见数据导入配置。
在本例中,我们将从本地的 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:导入数据¶
-
在
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! - 本地:使用本地文件系统中的绝对路径、相对路径或前缀
-
导入完成后,可以选择以下文件查看相应的导入情况:
-
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路径下的文件:数据迁移中的脏记录和失败记录
-