Mengoptimalkan impor osm2pgsql untuk data OSM

27

Saat ini saya sedang membangun sebuah instance di EC2 untuk mengimpor seluruh snapshot Planet.osm dari seluruh data Bumi untuk beberapa proyek yang sedang kami kerjakan. Saya telah memutar contoh besar Ubuntu x64 dan melampirkan banyak penyimpanan terpisah pada volume EBS untuk database Postgres dan memodifikasinya untuk menampung data PGSQL di sana.

Sekarang server mengalami kesulitan menggunakan osm2pgsqluntuk mengimpor snapshot ... Setelah beberapa upaya dengan konfigurasi memori yang berbeda dan yang lainnya, proses terus menghasilkan "Dibunuh" setelah mendapatkan sebagian besar jalan melalui; setelah itu terbunuh ketika "pergi cara tertunda" dan waktu berikutnya, setelah sedikit menyesuaikan cache ramping, itu mencapai "cara pemrosesan" sebelum crash. Dari apa yang saya baca, ini umumnya karena masalah memori.

Inilah upaya terakhir saya untuk menjalankan impor:

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

Dan berikut adalah spesifikasi untuk contoh besar pada EC2:

Memori Instance Besar 7,5 GB, 4 Unit Komputasi EC2 (2 core virtual dengan 2 Unit Komputasi EC2), penyimpanan instance lokal 850 GB, platform 64-bit

Pertanyaan saya adalah - apakah ada beberapa sumber daya tolok ukur yang baik untuk menentukan persyaratan penyetelan untuk osm2pgsql dan Postgres? Kecepatan impor bahkan tidak terlalu penting bagi saya, saya hanya ingin memastikan prosesnya selesai dengan aman, bahkan jika perlu 4 atau 5 hari ... Saya sudah membaca " Mengoptimalkan rendering dari Frederick Ramm dokumen rantai "(PDF) dari SOTM tahun lalu, tetapi apakah ada pendapat / sumber daya lain yang bagus?

colemanm
sumber
Bukankah itu sangat mahal untuk melakukan itu pada EC2?
Pablo
Ini tidak murah untuk membuatnya tetap berjalan, tetapi rencana sementara adalah untuk memutarnya, menghasilkan tileset kemudian mematikannya dan menggunakan yang ditetapkan untuk sementara waktu sampai kita perlu menerapkan pembaruan. Ini masih jauh lebih murah daripada membeli server besar ...
colemanm
1
Menarik! Saya belum pernah mencoba ini di XP-Home-Box lama saya. Apakah ini benar-benar berfungsi? Saya bertanya karena ini ditulis untuk mengkonversi ekstrak dari Geofabrik atau Cloudmade bukan untuk seluruh planet. Planet ini tampaknya tidak valid XML. Bagaimana Anda mengatasi masalah ini?
@Carsten Dalam memigrasikan respons Anda ke formulir komentar, secara tidak sengaja saya menghapus komentar oleh @jvangeld. Ini dia: Hai Carsten, selamat datang di GIS.se. Luar biasa ketika pengembang datang ke sini untuk membantu orang-orang dengan program mereka. Tapi jawaban Anda di sini mungkin akan lebih baik sebagai komentar untuk posting @ winwaed. Sekali lagi, senang Anda ada di sini!
whuber

Jawaban:

8

Sebagai dokumentasi mengatakan Anda mungkin perlu lebih dari 256GB ram untuk melakukan itu.

Saya tidak tahu banyak tentang EC2, tetapi Anda dapat mencoba mode ramping (--slim) atau mencoba Osmosis .

Ada posting yang menarik: http://weait.com/content/build-your-own-openstreetmap-server Disebutkan, 'Anda harus menggunakan mode ramping'.

Pablo
sumber
Ya, saya juga mengerti bahwa mode ramping diperlukan untuk menerapkan diff untuk pembaruan.
colemanm
4

Karena keterbatasan memori, saya bahkan tidak mencoba menggunakan osm2pgsql untuk memuat data routing planet.osm. Sebagai gantinya saya menggunakan osm2po:

http://osm2po.de/

Sebagian besar dokumentasi dalam bahasa Jerman tetapi dengan sedikit eksperimen saya berhasil membuatnya berfungsi. Membutuhkan beberapa hari pada Core 2 Quad khusus (tetapi hanya menggunakan satu utas).

menang
sumber
2

Saya menemukan yang berikut sambil mencari sesuatu yang lain http://aws.amazon.com/datasets/2844 - Saya tidak yakin apakah itu akan membantu Anda atau tidak, tetapi itu mungkin merupakan titik awal.

Ian Turton
sumber
Itu pasti bisa bekerja untuk saat ini, meskipun itu dari 2009 ...
colemanm
2

Apakah Anda mendapatkan solusi untuk masalah Anda, selain menggunakan paket lama yang dibuat sebelumnya? Saya tampaknya memiliki masalah yang sangat mirip dalam contoh EC2. Saya menggunakan pbf planet dari 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

Pembaruan: sepertinya saya menemukan solusi - setelah mengurangi memori yang diminta hingga 6 GB (parameter -C 6000) proses bekerja (setidaknya telah bekerja selama beberapa hari sekarang, akan selesai hari ini saya harap).

Tampaknya contoh m1.large dengan memori 7.5GB sedikit terlalu kecil untuk memuat semua node ke memori (yang seharusnya membutuhkan sekitar 11GB saat ini). The osm2pgsql tampaknya membutuhkan di bawah 700MB ekstra untuk memori yang diperlukan, jadi dengan -C 7000 itu berjalan hanya kehabisan memori, tetapi dengan -C 6000 (atau mungkin juga -C 6500) berfungsi.

Saya juga menyarankan menggunakan contoh memori yang lebih tinggi dengan setidaknya 15GB RAM, itu harus membuat impor lebih cepat. Atau bahkan dua kali lipat contoh memori ekstra besar yang biayanya dua kali lipat, tetapi harus mampu melakukan impor planet penuh dalam mode non-ramping dalam waktu <5 jam (sekitar 3-4 kali lebih cepat daripada mode ramping). Jadi sebenarnya akan lebih murah.

JaakL
sumber
1

Saya menggunakan osm2pgsql untuk bekerja pada EC2 menggunakan lebih sedikit CPU dan lebih banyak RAM. Itu gagal karena masalah memori sampai saya menaikkan instance ke memori besar ekstra besar dengan 17 gigs of ram.

datdo
sumber