我有一个大数据集(约10亿个节点和几十亿个关系),我正在尝试将其导入到Neo4j中。我正在使用Neo4j导入工具。节点在一个小时内完成导入,但是自那时以来,导入器已经在节点索引准备阶段停滞了超过12个小时(除非我错误地读取下面的输出)。
... 可用内存: 空闲机器内存:184.49 GB 最大堆内存:26.52 GB
节点 [>:23.39 MB/s---|属性|节点:|标签|*v:37.18 MB/s---------------------------------------------] 1B 在1小时7分钟18秒54毫秒内完成 准备节点索引 [*排序:11.52 GB--------------------------------------------------------------------------------]881M ...
我的问题是如何加快这个速度?我在考虑以下内容: 1. 将节点和关系的导入命令拆分并进行节点导入。 2. 在节点上创建索引 3. 进行合并/匹配以消除重复项 4. 进行关系导入。
这样会有帮助吗?还有其他我应该尝试的方法吗?堆大小太大了吗(我认为不是,但想要一个意见)?
谢谢。
更新 我也尝试在同一台机器上导入完全相同的一半数据,并且它再次在大约相同的时间(比例上)在那个阶段卡住了。因此,我基本上排除了磁盘空间和内存问题。 我还检查了我的标头(因为我注意到其他人在拥有不正确的标头时遇到了这个问题),它们对我来说似乎是正确的。您对我应该看什么还有其他建议吗?
进一步更新 好吧,现在变得有点荒谬了。我将数据大小缩小到只有一个大文件(约3G)。它只包含单一类型的节点,并且仅具有ID。因此,数据看起来像这样
1|作者 2|作者 3|作者
标头(在单独的文件中)如下所示
authorID:ID(作者)|:LABEL
我的导入仍然在排序阶段卡住了。我很确定我在这里做错了什么。但是我真的不知道是什么。这是我调用此命令行的方式
/var/lib/neo4j/bin/neo4j-import --into data/db/graph.db --id-type string --delimiter "|" \ --bad-tolerance 1000000000 --skip-duplicate-nodes true --stacktrace true --ignore-empty-strings true \ --nodes:Author "data/author/author_header_label.csv,data/author/author_half_label.csv.gz"
大多数 bad-tolerance 和 skip-duplicate-nodes 的选项都是为了看看是否可以使其至少通过一次导入。
... 可用内存: 空闲机器内存:184.49 GB 最大堆内存:26.52 GB
节点 [>:23.39 MB/s---|属性|节点:|标签|*v:37.18 MB/s---------------------------------------------] 1B 在1小时7分钟18秒54毫秒内完成 准备节点索引 [*排序:11.52 GB--------------------------------------------------------------------------------]881M ...
我的问题是如何加快这个速度?我在考虑以下内容: 1. 将节点和关系的导入命令拆分并进行节点导入。 2. 在节点上创建索引 3. 进行合并/匹配以消除重复项 4. 进行关系导入。
这样会有帮助吗?还有其他我应该尝试的方法吗?堆大小太大了吗(我认为不是,但想要一个意见)?
谢谢。
更新 我也尝试在同一台机器上导入完全相同的一半数据,并且它再次在大约相同的时间(比例上)在那个阶段卡住了。因此,我基本上排除了磁盘空间和内存问题。 我还检查了我的标头(因为我注意到其他人在拥有不正确的标头时遇到了这个问题),它们对我来说似乎是正确的。您对我应该看什么还有其他建议吗?
进一步更新 好吧,现在变得有点荒谬了。我将数据大小缩小到只有一个大文件(约3G)。它只包含单一类型的节点,并且仅具有ID。因此,数据看起来像这样
1|作者 2|作者 3|作者
标头(在单独的文件中)如下所示
authorID:ID(作者)|:LABEL
我的导入仍然在排序阶段卡住了。我很确定我在这里做错了什么。但是我真的不知道是什么。这是我调用此命令行的方式
/var/lib/neo4j/bin/neo4j-import --into data/db/graph.db --id-type string --delimiter "|" \ --bad-tolerance 1000000000 --skip-duplicate-nodes true --stacktrace true --ignore-empty-strings true \ --nodes:Author "data/author/author_header_label.csv,data/author/author_half_label.csv.gz"
大多数 bad-tolerance 和 skip-duplicate-nodes 的选项都是为了看看是否可以使其至少通过一次导入。
[*SORT:19,93 GB--------------------------------------------------------------------------------] 2B
也就是说,已经确认已经超过了你的程序卡住的点。导入完成后,“准备节点索引”阶段花费了20分钟。 - Mattias Finné