当尝试按照https://muncca.com/2019/02/14/wikidata-import-in-apache-jena/中描述的过程加载当前的 Wikidata 转储时,如获取您自己的 WikiData 副本中所述,我正在运行Apache Jenas tdbloader 命令的一些性能问题和限制。
它似乎有两个版本:
TDB1 tdbloader 的名称 tdbloader2 令人困惑,因此首次尝试使用它。
使用 TDB1/tdbloader2 的经验是,前几十亿个三元组的加载非常好。
最初的速度是 150 k 三倍/秒。然后它以大约 90 亿三倍的速度下降到大约 100k 三倍/秒。在 100 亿三倍时,速度在大约 100 亿三倍时下降到 15000 三倍/秒,当向 110 亿三倍移动时,速度保持在 5000 三倍/秒左右。
我曾预计到那时导入已经完成,所以目前我什至怀疑进度是计算三元组,而是海龟输入的行数,这可能不一样,因为输入有大约 150 亿行,但预计只有大约 110 亿个三元组.
由于此时导入已经运行了 3.5 天,我不得不决定是中止它并寻找更好的导入选项还是等待一段时间。
所以我把这个问题放在stackoverflow上。根据 AndyS 的提示,有两个版本的 tdbloader,我在大约 4.5 天后中止了 TDB1 导入,据报道在“数据”阶段导入了超过 110 亿个三元组。那时性能下降到 2.3 k 三倍/秒。
使用 tdb2.tdbloader 修改脚本后,导入已再次运行多次尝试,如 wiki 中所述。两次导入 tdb2.tdbloader 尝试已经因 Java VM 崩溃而失败,所以我再次将硬件从我的 MacPro 更改为旧的 linux 机器(不幸的是速度较慢),然后又回来了。
在较旧的 Oracle JVM 首次尝试使用 tdb2.tdbloader 崩溃后,我将 Java 虚拟机更改为最近的 OpenJDK。此 Java VM 以相同的症状崩溃 # 内部错误 (safepoint.cpp:310),请参阅例如https://bugs.java.com/bugdatabase/view_bug.do?bug_id=8169477
对于 tdb2.tdbloader 的尝试,我假设需要导入 157 亿个三元组(turtle 文件的每一行一个)。对于一个真实的数据集,三元组的数量约为 130 亿个三元组。
如果您查看 wiki 文章中显示的性能结果,您会发现当存在对数性能下降时。对于旋转磁盘,退化非常严重,以至于导入需要很长时间,等待结果是不值得的(我们在这里谈论了几个月......)
在下图中,两个轴都有一个对数刻度。x 轴显示导入的三元组总数的日志(导入中止时最多 30 亿个)y 轴显示批次/平均大小的日志 - 在给定时间范围内导入的三元组数量。导入的三元组越多,速度就越慢,从每秒 300.000 个三元组降低到每秒只有 300 个三元组。 在第 4 次尝试中,11 天后的性能约为 1k 三倍/秒,并且导入了约 20% 的数据。这意味着估计在 230 天后完成导入的时间 - 考虑到速度的下降可能要长得多(一年多)。
目标数据库大小为 320 GB,因此希望结果适合为目标分配的 4 TerraByte 磁盘空间,而不是限制因素。
由于 Jonas Sourlier 在使用 SSD 磁盘大约 7 天后报告了他的成功,我终于要求我的项目负责人为 4 TB SSD 磁盘提供资金并将其借给我进行实验。使用该磁盘,现在对于真实数据集的第五次尝试是成功的,大约 4 1/2 天后导入了大约 52 亿个三元组。坏消息是,这正是我不想要的——我曾希望通过软件和配置设置来解决问题,而不是通过更快、更昂贵的硬件来解决问题。不过这里是这个导入的图表:
我打算尽快导入全部 120 亿个三元组,因此知道如何通过软件/配置设置或其他非硬件方法提高速度仍然是件好事。
我还没有调整 Java VM Args 或拆分文件,如2017 年底 Apache 用户邮件列表讨论所述
目前的导入速度显然是不能接受的。另一方面,由于预算有限,不能选择大量投资额外的硬件。
上面提到的 wiki 文章中的链接没有回答一些问题:
- https://www.wikidata.org/wiki/Wikidata:Database_download#RDF_dumps
- 未能安装 wikidata-query-rdf / Blazegraph
- 本地 Blazegraph 上的 Wikidata:此处应为 RDF 值,找到 '' [第 1 行]
- 维基数据导入大师
- Virtuoso 系统要求
- https://muncca.com/2019/02/14/wikidata-import-in-apache-jena/
- https://users.jena.apache.narkive.com/J1gsFHRk/tdb2-tdbloader-performance
什么被证明可以在不投资额外硬件的情况下加快导入速度?
例如拆分文件、更改虚拟机参数、运行多个进程……
是什么解释了在更高数量的三元组下速度下降的原因以及如何避免这种情况?
您知道耶拿有哪些成功的数十亿三倍进口,这些情况是什么?