Викиданные на локальном Blazegraph: здесь ожидается значение RDF, найдено "" [строка 1]

Мы (Томас и Вольфганг) установили локально викиданные и blazegraph, следуя инструкциям здесь: https://github.com/wikimedia/wikidata-query-rdf/blob/master/docs/getting-started.md

В

mvn package command was successful

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] parent ............................................. SUCCESS [ 54.103 s]
[INFO] Shared code ........................................ SUCCESS [ 23.085 s]
[INFO] Wikidata Query RDF Testing Tools ................... SUCCESS [ 11.698 s]
[INFO] Blazegraph extension to improve performance for Wikibase SUCCESS [02:12 min]
[INFO] Blazegraph Service Package ......................... SUCCESS [01:02 min]
[INFO] Wikidata Query RDF Tools ........................... SUCCESS [02:19 min]
[INFO] Wikibase RDF Query Service ......................... SUCCESS [ 25.466 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS

Мы оба используем

java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)

Мы оба скачали файл latest-all.ttl.gz, например.

31064651574 Jan  3 19:30 latest-all.ttl.gz

из https://dumps.wikimedia.org/wikidatawiki/entities/, на что потребовалось около 4 часы.

.Munge создал 424 файла как "wikidump-000000001.ttl.gz" в data / split.

~/wikidata/wikidata-query-rdf/dist/target/service-0.3.0-SNAPSHOT$ ./munge.sh -f data/latest-all.ttl.gz -d data/split -l en,de 
#logback.classic pattern: %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
08:23:02.391 [main] INFO  org.wikidata.query.rdf.tool.Munge - Switching to data/split/wikidump-000000001.ttl.gz
08:24:21.249 [main] INFO  org.wikidata.query.rdf.tool.Munge - Processed 10000 entities at (105, 47, 33)
08:25:07.369 [main] INFO  org.wikidata.query.rdf.tool.Munge - Processed 20000 entities at (162, 70, 41)
08:25:56.862 [main] INFO  org.wikidata.query.rdf.tool.Munge - Processed 30000 entities at (186, 91, 50)
08:26:43.594 [main] INFO  org.wikidata.query.rdf.tool.Munge - Processed 40000 entities at (203, 109, 59)
08:27:24.042 [main] INFO  org.wikidata.query.rdf.tool.Munge - Processed 50000 entities at (224, 126, 67)
08:28:00.770 [main] INFO  org.wikidata.query.rdf.tool.Munge - Processed 60000 entities at (244, 142, 75)
08:28:32.670 [main] INFO  org.wikidata.query.rdf.tool.Munge - Processed 70000 entities at (272, 161, 84)
08:29:12.529 [main] INFO  org.wikidata.query.rdf.tool.Munge - Processed 80000 entities at (261, 172, 91)
08:29:47.764 [main] INFO  org.wikidata.query.rdf.tool.Munge - Processed 90000 entities at (272, 184, 98)
08:30:20.254 [main] INFO  org.wikidata.query.rdf.tool.Munge - Processed 100000 entities at (286, 196, 105)
08:30:20.256 [main] INFO  org.wikidata.query.rdf.tool.Munge - Switching to data/split/wikidump-000000002.ttl.gz
08:30:55.058 [main] INFO  org.wikidata.query.rdf.tool.Munge - Processed 110000 entities at (286, 206, 112)

Когда Томас попытался загрузить один файл на blazegraph с помощью

./loadRestAPI.sh -n wdq -d data/split/wikidump-000000001.ttl.gz

он получил ошибку ниже. Попытка импорта из вкладки ОБНОВЛЕНИЕ в blazegraph также не сработала.

Что можно сделать, чтобы это исправить?

Скрипт loadRestAPI.sh в основном тот, что упоминается в:


person Thomas Scialom    schedule 29.12.2017    source источник
comment
Я загружаю его с помощью ./loadRestAPI.sh -n wdq -d _1_ / data / split / wikidump-000000001.ttl.gz или с сервера blazgraph localhost: 9999 / bigdata / # update   -  person UninformedUser    schedule 29.12.2017
comment
Удалось ли улучшить эту статистику? Как вы думаете, как быстрее всего получить локальную службу Wikidata SPARQL?   -  person Thomas Scialom    schedule 29.12.2017


Ответы (1)


https://wiki.blazegraph.com/wiki/index.php/Bulk_Data_Load#Command_line

поэтому должна быть возможность использовать инструмент командной строки напрямую вместо REST API.

К тому же весь процесс кажется довольно неудобным. Инструмент использует файл .gz, который на 25% больше, чем файл .bz2, и его загрузка занимает больше времени. Распаковка файла .bz2 происходит быстрее, чем процедура munge. Я предполагаю, что обработка распакованного файла 230 ГБ, например.

230033083334 4 января, 07:29 wikidata-20180101-all-BETA.ttl

"по частям" может работать лучше. Но сначала нам нужно посмотреть, что мешает импорту.

Моя первая проблема заключалась в том, что сценарий оболочки runBlazegraph.sh выдавал ошибку при отсутствии файла mwservices.json.

Я предполагаю, что файл вроде https://github.com/wikimedia/wikidata-query-deploy/blob/master/mwservices.json.

Итак, я попытался исправить это с помощью

хотя я сомневаюсь, что это имеет большое значение.

wget https://raw.githubusercontent.com/wikimedia/wikidata-query-deploy/master/mwservices.json

Фактический звонок

работал у меня на сервере Ubuntu 16.04 LTS с Java 1.8.0_151, поэтому я считаю, что нам нужно изучить более подробную информацию, чтобы исправить проблему Томаса.

./loadRestAPI.sh -n wdq -d data/split/wikidump-000000001.ttl.gz 
Loading with properties...
quiet=false
verbose=0
closure=false
durableQueues=true
#Needed for quads
#defaultGraph=
com.bigdata.rdf.store.DataLoader.flush=false
com.bigdata.rdf.store.DataLoader.bufferCapacity=100000
com.bigdata.rdf.store.DataLoader.queueCapacity=10
#Namespace to load
namespace=wdq
#Files to load
fileOrDirs=data/split/wikidump-000000001.ttl.gz
#Property file (if creating a new namespace)
propertyFile=/home/wf/wikidata/wikidata-query-rdf/dist/target/service-0.3.0-SNAPSHOT/RWStore.properties
<?xml version="1.0"?><data modified="0" milliseconds="493832"/>DATALOADER-SERVLET: Loaded wdq with properties: /home/wf/wikidata/wikidata-query-rdf/dist/target/service-0.3.0-SNAPSHOT/RWStore.properties

см. также https://wikitech.wikimedia.org/wiki/Nova_Resource:Wikidata-query/Documentation

Больше подробностей.

Чтобы проверить результаты, я использовал ssh-туннель к моему серверу ubuntu

а потом

ssh -L 9999:localhost:9999 user@server

http://localhost:9999/bigdata/namespace/wdq/sparql

в браузере моего локального компьютера (ноутбука) браузер.

Второй импорт тоже работал нормально.

Затем я проверил содержимое базы данных с помощью следующего запроса SPARQL:

давая результат

SELECT ?type (COUNT(?type) AS ?typecount)
WHERE {
  ?subject a ?type.
}
GROUP by ?type
ORDER by desc(?typecount)
LIMIT 7

учитывая опыт импорта, я бы сказал, что вызовы munge и loadRestAPI могут выполняться несколько параллельно, поскольку шаг loadRestAPI, по-видимому, медленнее.

type                                          typecount
<http://wikiba.se/ontology#BestRank>            2938060
schema:Article                                  2419109
<http://wikiba.se/ontology#QuantityValue>.        78105
<http://wikiba.se/ontology#TimeValue>.            61553
<http://wikiba.se/ontology#GlobecoordinateValue>  57032
<http://wikiba.se/ontology#GeoAutoPrecision>       3462
<http://www.wikidata.org/prop/novalue/P17>.         531

Для импорта каждого файла gz требуется около 5 минут. Позже это исчезнет, ​​и некоторые файлы фактически заняли до 1 часа 15 минут на сервере Вольфганга.

Загрузка всех данных, вероятно, займет 10 или более дней на первой машине Вольфганга, поэтому, пожалуйста, следите за окончательным результатом.

В настоящее время 358 из 440 файлов импортируются через 158 часов на этом компьютере. В настоящее время размер файлов wikidata.jnl составляет 250 ГБ, и было импортировано около 1700 миллионов операторов.

Статистика загрузки довольно неудобная. Загрузка одного из файлов * .ttl.gz на машине Вольфганга занимает от 87 до 11496 секунд. Среднее значение на данный момент составляет 944 секунды. Похоже, что на определенных этапах импорта время на файл gz увеличивается, например от 805 до 4943 секунд или с 4823 до 11496 - после этого время, кажется, стабилизируется на более высоком уровне и возвращается всего к 293 или 511 секундам. Такое временное поведение очень затрудняет прогнозирование того, сколько времени займет полный импорт.

Учитывая, что загрузка заняла так много времени, Вольфганг настроил вторую машину импорта несколько иначе.

у второй машины есть данные для импорта на жесткий диск 7.200 об / мин и файл журнала blazegraph на SSD.

  1. Машина: 8 ядер, 32 ГБ ОЗУ, 1 512 ГБ жесткий диск со скоростью 7.200 об / мин и 1480 ГБ SSD.
  2. Как вы загружаете данные?

Второй импорт машин показывает лучшее временное поведение после 3,8 дня, когда импорт завершился со следующей статистикой:

первая машина все еще не закончена через 10 дней

    |  sum d |   sum h |         mins |         secs |
----+--------+---------+--------------+--------------+
MIN |  0.0 d |   0.0 h |     1.2 mins |      74 secs |      
MAX |  0.0 d |   1.1 h |    64.4 mins |    3863 secs |
AVG |  0.0 d |   0.2 h |    12.3 mins |     738 secs | 
TOT |  3.8 d |  90.2 h |  5414.6 mins |  324878 secs |

Машина: 8 ядер, 56 ГБ ОЗУ, 6 террабайтных жестких диска со скоростью 5,400 об / мин

SUM | 10.5 d | 252.6 h | 15154.7 mins |  909281 secs |
----+--------+---------+--------------+--------------+
MIN |  0.0 d |   0.0 h |     1.5 mins |      87 secs |
MAX |  0.3 d |   7.3 h |   440.5 mins |   26428 secs |
AVG |  0.0 d |   0.6 h |    36.4 mins |    2185 secs |
TOT | 11.1 d | 267.1 h | 16029.0 mins |  961739 secs |
----+--------+---------+--------------+--------------+
ETA |  0.6 d |  14.6 h |   874.3 mins |   52458 secs |
person Wolfgang Fahl    schedule 05.01.2018
comment
@cheesus - спасибо за вопрос - я еще ни разу не пробовал, но склонен. Я собираюсь задокументировать вещи на wiki.bitplan.com/index.php/Get_your_own_copy_of_WikiData - person cheesus; 08.05.2020
comment
ОШИБКА: uri = [файл: /home/tsc/projects/TestSPARQL/wikidata-query-rdf-0.2.1/dist/target/service-0.2.1/data/split/wikidump-000000001.ttl.gz], context -uri = [] java.util.concurrent.ExecutionException: org.openrdf.rio.RDFParseException: здесь ожидается значение RDF, найдено '' [строка 1] в java.util.concurrent.FutureTask.report (FutureTask.java:122 ) на java.util.concurrent.FutureTask.get (FutureTask.java:192) на com.bigdata.rdf.sail.webapp.BigdataServlet.submitApiTask (BigdataServlet.java:281) на com.bigdata.rdapp.sail.web. InsertServlet.doPostWithURIs (InsertServlet.java:397) в com.bigdata.rdf.sail.webapp.InsertServlet.doPost (InsertServlet.java:116) в com.bigdata.rdf.sail.webapp.RESTServlet.doPost (RESTServlet.doPost 303) в com.bigdata.rdf.sail.webapp.MultiTenancyServlet.doPost (MultiTenancyServlet.java:192) в javax.servlet.http.HttpServlet.service (HttpServlet.java:707) в javax.letplet.http: (HttpServlet.java:790) на org.eclipse.j etty.servlet.ServletHolder.handle (ServletHolder.java:808) на org.eclipse.jetty.servlet.ServletHandler.doHandle (ServletHandler.java:587) на org.eclipse.jetty.server.handler.ScopedHandler.handle (. java: 143) на org.eclipse.jetty.security.SecurityHandler.handle (SecurityHandler.java:577) на org.eclipse.jetty.server.session.SessionHandler.doHandle (SessionHandler.java:223) на org.eclipse.jetty .server.handler.ContextHandler.doHandle (ContextHandler.java:1127) в org.eclipse.jetty.servlet.ServletHandler.doScope (ServletHandler.java:515) в org.eclipse.jetty.server.session.SessionHandlerHandler.doScope (SessionHandler.doScope .java: 185) в org.eclipse.jetty.server.handler.ContextHandler.doScope (ContextHandler.java:1061) в org.eclipse.jetty.server.handler.ScopedHandler.handle (ScopedHandler.java:141) в org. eclipse.jetty.server.handler.ContextHandlerCollection.handle (ContextHandlerCollection.java:215) в org.eclipse.jetty.server.handler.H andlerCollection.handle (HandlerCollection.java:110) в org.eclipse.jetty.server.handler.HandlerWrapper.handle (HandlerWrapper.java:97) в org.eclipse.jetty.server.Server.handle (Server.java:497) в org.eclipse.jetty.server.HttpChannel.handle (HttpChannel.java:310) на org.eclipse.jetty.server.HttpConnection.onFillable (HttpConnection.java:257) в org.eclipse.jettyConnection.Abject. запустите (AbstractConnection.java:540) в org.eclipse.jetty.util.thread. QueuedThreadPool.runJob (QueuedThreadPool.java:635) в org.eclipse.jetty.util.thread.QueuedThreadPool $ 3.run (QueuedThreadPool.java:555) в java.lang.Thread.run (Thread.java:748) Вызвано: org.openrdf.rio.RDFParseException: здесь ожидается значение RDF, найдено '' [строка 1] в org.openrdf.rio.helpers.RDFParserHelper.reportFatalError (RDFParserHelper.java:441) в org.openrdf.rio.helpers.helpers. .reportFatalError (RDFParserBase.java:671) в org.openrdf.rio.turtle.TurtleParser.reportFatalError (TurtleParser.java:1306) в org.openrdf.rio.turtle.TurtleParser.javag:Val37 openrdf.rio.turtle.TurtleParser.parseSubject (TurtleParser.java:449) по адресу org.openrdf.rio.turtle.TurtleParser.parseTriples (TurtleParser.java:383) по адресу org.openrdf.serser. java: 261) на org.openrdf.rio.turtle.TurtleParser.parse (TurtleParser.java:216) на org.openrdf.rio.turtle.TurtleParser.parse (TurtlePars er.java:159) на com.bigdata.rdf.sail.webapp.InsertServlet $ InsertWithURLsTask.call (InsertServlet.java:556) на com.bigdata.rdf.sail.webapp.InsertServlet $ InsertWithURLsTask.call (InsertServlet 414) по адресу com.bigdata.rdf.task.ApiTaskForIndexManager.call (ApiTaskForIndexManager.java:68) в java.util.concurrent.FutureTask.run (FutureTask.java:266) в java.util.concurrent.concurrent .java: 1149) at java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:624) ... еще 1 - person Wolfgang Fahl; 09.05.2020