Optimieren von osm2pgsql-Importen für OSM-Daten

27

Momentan baue ich eine Instanz auf EC2, auf der der gesamte Planet.osm-Snapshot der gesamten Datenmenge der Erde für einige Projekte, an denen wir arbeiten, importiert werden kann. Ich habe eine große Ubuntu x64-Instanz hochgefahren und viel separaten Speicher auf einem EBS-Volume für die Postgres-Datenbank hinzugefügt und geändert, um die PGSQL-Daten dort unterzubringen.

Jetzt hat der Server Probleme osm2pgsqlbeim Importieren des Snapshots ... Nach einigen Versuchen mit verschiedenen Speicherkonfigurationen und so weiter gibt der Prozess "Killed" aus, nachdem er den größten Teil des Weges hinter sich gebracht hat. Sobald es getötet wurde, während "ausstehende Wege durchlaufen", und beim nächsten Mal, nachdem der schmale Cache leicht angepasst wurde, erreichte es "verarbeitende Wege", bevor es abstürzte. Nach dem, was ich gelesen habe, ist dies im Allgemeinen auf Speicherprobleme zurückzuführen.

Hier ist mein letzter Versuch, den Import auszuführen:

osm2pgsql -v -U osm -s -C 4096 -S default.style -d osm /data/osm/planet-latest.osm.bz2

Und hier sind die Spezifikationen für eine große Instanz von EC2:

Große Instanz 7,5 GB Speicher, 4 EC2-Recheneinheiten (2 virtuelle Kerne mit jeweils 2 EC2-Recheneinheiten), 850 GB lokaler Instanzspeicher, 64-Bit-Plattform

Meine Frage ist - gibt es einige gute Benchmark-Ressourcen, um die Optimierungsanforderungen für osm2pgsql und Postgres zu bestimmen? Die Importgeschwindigkeit ist mir nicht einmal so wichtig, ich möchte nur sicherstellen, dass der Vorgang sicher abgeschlossen wird, auch wenn es 4 oder 5 Tage dauert ... Ich habe Frederick Ramms " Optimierung des Renderings " gelesen chain "(PDF) aus dem letztjährigen SOTM, aber gibt es noch andere gute Meinungen / Ressourcen?

Colemanm
quelle
Wäre das mit EC2 nicht sehr teuer?
Pablo
Es ist nicht billig, es am Laufen zu halten, aber der vorläufige Plan ist, es hochzufahren, ein Kachelset zu generieren, es dann herunterzufahren und dieses Set für eine Weile zu verwenden, bis wir Updates anwenden müssen. Es ist immer noch viel billiger als der Kauf eines riesigen Servers ...
Colemanm
1
Interessant! Ich habe das noch nie auf meiner alten XP-Home-Box ausprobiert. Funktioniert es wirklich Ich frage, weil es geschrieben wurde, um Auszüge aus Geofabrik oder Cloudmade nicht für den gesamten Planeten zu konvertieren. Der Planet scheint ungültiges XML zu sein. Wie haben Sie dieses Problem gelöst?
@Carsten Bei der Migration Ihrer Antwort auf ein Kommentarformular habe ich versehentlich einen Kommentar von @jvangeld gelöscht. Hier ist es: Hallo Carsten, herzlich willkommen bei GIS.se. Es ist großartig, wenn Entwickler hierher kommen, um Menschen mit ihren Programmen zu helfen. Aber Ihre Antwort hier wäre wahrscheinlich besser als Kommentar zu @ winwaeds Post gewesen. Auch hier ist es schön, Sie hier zu haben!
whuber

Antworten:

4

Aufgrund der Speicherbeschränkungen habe ich nicht einmal versucht, osm2pgsql zum Laden der Routing-Daten von planet.osm zu verwenden. Stattdessen habe ich osm2po verwendet:

http://osm2po.de/

Der Großteil der Dokumentation ist auf Deutsch, aber mit ein wenig Experimentieren konnte ich es zum Laufen bringen. Dauert ein paar Tage auf einem dedizierten Core 2 Quad (aber es wird nur ein Thread verwendet).

winwaed
quelle
2

Ich bin auf Folgendes gestoßen, als ich nach etwas anderem gesucht habe: http://aws.amazon.com/datasets/2844 - Ich bin nicht sicher, ob es Ihnen helfen wird oder nicht, aber es könnte ein Ausgangspunkt sein.

Ian Turton
quelle
Das könnte jetzt definitiv funktionieren, obwohl es aus dem Jahr 2009 stammt ...
Colemanm
2

Haben Sie eine Lösung für Ihr Problem gefunden, außer dass Sie ein altes, vorgeneriertes Paket verwendet haben? Ich habe anscheinend ein sehr ähnliches Problem in der EC2-Instanz. Ich verwende pbf planet von http://download.bbbike.org/osm/

time ./osm2pgsql -S default.style --slim -d gis -C 7000 --hstore /mnt/planet/planet-latest.osm.pbf
osm2pgsql SVN version 0.70.5
...(creating db tables)
Reading in file: /mnt/planet/planet-latest.osm.pbf
Processing: Node(741920k) Way(0k) Relation(0)Killed

real    276m47.695s

Update: Ich habe anscheinend eine Lösung gefunden - nachdem der angeforderte Speicher auf 6 GB (Parameter -C 6000) reduziert wurde, funktioniert der Prozess (zumindest seit einigen Tagen, wird hoffentlich heute beendet).

Es scheint, dass die m1.large-Instanz mit 7,5 GB Speicher etwas zu wenig ist, um alle Knoten an den Speicher anzupassen (was heutzutage ungefähr 11 GB erfordern sollte). Das osm2pgsql scheint weniger als 700 MB zusätzlichen Arbeitsspeicher zu benötigen, so dass es mit -C 7000 nur wenig Arbeitsspeicher hat, aber mit -C 6000 (oder möglicherweise auch -C 6500) funktioniert.

Außerdem würde ich vorschlagen, eine höhere Speicherinstanz mit mindestens 15 GB RAM zu verwenden, um den Import zu beschleunigen. Oder sogar eine doppelt so große Speicherinstanz, die das Doppelte kosten würde, aber in der Lage sein sollte, den vollständigen Planetenimport im Nicht-Slim-Modus innerhalb von <5 Stunden durchzuführen (ungefähr 3-4-mal schneller als im Slim-Modus). Also wäre es eigentlich billiger.

JaakL
quelle
1

Ich habe osm2pgsql auf EC2 mit weniger CPU und mehr RAM arbeiten. Es schlug aufgrund von Speicherproblemen fehl, bis ich die Instanz auf einen besonders großen Speicher mit 17 GB RAM erhöhte.

datdo
quelle