Java Neo4j导入工具碰撞过多
我试图使用导入工具将一个~52GB的节点文件导入neo4j,我已经运行了两次,并尝试使用文件上的“uniq”Linux命令清除文件中的重复项 我在专用服务器上运行neo4jJava Neo4j导入工具碰撞过多,java,database,import,neo4j,cypher,Java,Database,Import,Neo4j,Cypher,我试图使用导入工具将一个~52GB的节点文件导入neo4j,我已经运行了两次,并尝试使用文件上的“uniq”Linux命令清除文件中的重复项 我在专用服务器上运行neo4j Ubuntu服务器16.04“Xenial Xerus”LTS 内存:64GB 硬盘驱动器:SoftRAID 3x2 TB服务器 处理器:英特尔至强E5-1620四核(4核)3.60 千兆赫 我的配置文件设置: dbms.memory.heap.initial_size=10G dbms.memory.heap.max
- Ubuntu服务器16.04“Xenial Xerus”LTS
- 内存:64GB
- 硬盘驱动器:SoftRAID 3x2 TB服务器
- 处理器:英特尔至强E5-1620四核(4核)3.60 千兆赫
- dbms.memory.heap.initial_size=10G
- dbms.memory.heap.max_size=20G
- dbms.memory.pagecache.size=20G
******** DETAILS 2018-06-15 05:17:41.913+0000 ********
Nodes
[*Nodes---------------------------------------------------------------------------------------]2.36B
Memory usage: 18.65 GB
I/O throughput: 79.33 MB/s
VM stop-the-world time: 631ms
Duration: 47m 48s 468ms
Done batches: 236827
Prepare node index
[*DETECT--------------------------------------------------------------------------------------]6.96B
Memory usage: 29.67 GB
Duration: 14h 22m 16s 475ms
Done batches: 696830
Environment information:
Free physical memory: 3.32 GB
Max VM memory: 13.99 GB
Free VM memory: 285.40 MB
VM stop-the-world time: 631ms
Duration: 15h 10m 4s 943ms
java.lang.RuntimeException:org.neo4j.unsafe.impl.batchimport.input.InputException:冲突太多:232071971
位于org.neo4j.unsafe.impl.batchimport.staging.AbstractStep.issuePanic(AbstractStep.java:150)
位于org.neo4j.unsafe.impl.batchimport.staging.AbstractStep.issuePanic(AbstractStep.java:142)
在org.neo4j.unsafe.impl.batchimport.staging.LonelyProcessingStep.lambda$receive$0(LonelyProcessingStep.java:58)
运行(Thread.java:748)
原因:org.neo4j.unsafe.impl.batchimport.input.InputException:冲突太多:232071971
位于org.neo4j.unsafe.impl.batchimport.cache.idmapping.string.EncodingIdMapper.detectAndMarkCollisions(EncodingIdMapper.java:451)
在org.neo4j.unsafe.impl.batchimport.cache.idmapping.string.EncodingIdMapper.prepare(EncodingIdMapper.java:234)上
位于org.neo4j.unsafe.impl.batchimport.IdMapperPreparationStep.process(IdMapperPreparationStep.java:56)
在org.neo4j.unsafe.impl.batchimport.staging.LonelyProcessingStep.lambda$receive$0(LonelyProcessingStep.java:53)
…还有一个
输入数据错误
原因:碰撞过多:232071971
警告导入失败。/home/databases/instaGraphPostPurge.db中的存储文件保持原样,尽管它们可能处于不可用状态。在这些存储文件上启动数据库可能会失败或观察到不一致的记录,因此启动或手动删除存储将自担风险
org.neo4j.unsafe.impl.batchimport.input.InputException:冲突太多:232071971
位于org.neo4j.unsafe.impl.batchimport.cache.idmapping.string.EncodingIdMapper.detectAndMarkCollisions(EncodingIdMapper.java:451)
在org.neo4j.unsafe.impl.batchimport.cache.idmapping.string.EncodingIdMapper.prepare(EncodingIdMapper.java:234)上
位于org.neo4j.unsafe.impl.batchimport.IdMapperPreparationStep.process(IdMapperPreparationStep.java:56)
在org.neo4j.unsafe.impl.batchimport.staging.LonelyProcessingStep.lambda$receive$0(LonelyProcessingStep.java:53)
运行(Thread.java:748)
意外错误:碰撞太多:232071971
太多冲突:232071971
告诉您冲突的数量是232071971
,这对于导入程序来说太多了,无法处理。现在,在3.4中,这不再是事实,在3.4中,有了冲突管理的改进,因此该限制已经取消,但是导入程序出于某种原因仍然进行此检查
现在,这是可以修复的,但是>23亿次冲突是相当多的冲突,并且指向一些非常脏或未完全清理的输入数据。删除此检查可以使其正常工作,但存储这些冲突的内存量也可能非常大,因此无论如何,在尝试分配该内存时,导入可能仍然失败
您所能做的最好的事情就是以某种方式减少输入中重复节点ID的数量。供您参考:巨大的导入时间:15h 10m!如果是graph db初始化,另一个解决方案是使用BatchInserter,它可以直接处理db文件,而且速度非常快。但您需要用Java编写一些代码。下面是一些示例(但我不知道这些示例是否基于Neo4j的最新版本)你能分享你的头和每个文件的前几行吗?导入命令的完整输出你能结合这两个关系吗?我不知道oyu可以在命令行上有多个相同类型的命令我不得不删除更多的重复项,我的数据最终不是我认为的格式,而且必须进行排序,然后删除重复项。谢谢您的帮助