การเพิ่มประสิทธิภาพการนำเข้า osm2pgsql สำหรับข้อมูล OSM


27

ขณะนี้ฉันกำลังสร้างอินสแตนซ์บน EC2 ที่จะนำเข้าภาพรวม Planet.osm ทั้งหมดของมูลค่าข้อมูลทั่วโลกสำหรับบางโครงการที่เรากำลังดำเนินการ ฉันได้ปั่นอินสแตนซ์ Ubuntu x64 ขนาดใหญ่และแนบหน่วยเก็บข้อมูลแยกต่างหากมากมายบนไดรฟ์ EBS สำหรับฐานข้อมูล Postgres และปรับเปลี่ยนเพื่อเก็บข้อมูล PGSQL ที่นั่น

ตอนนี้เซิร์ฟเวอร์กำลังมีปัญหาในการใช้งานosm2pgsqlการนำเข้าสแน็ปช็อต ... หลังจากสองสามครั้งที่มีการกำหนดค่าหน่วยความจำที่แตกต่างกันและ whatnot กระบวนการจะส่งเอาต์พุต "ฆ่า" หลังจากผ่านไปเกือบตลอดเวลา เมื่อมันถูกฆ่าตายในขณะที่ "ไปทางที่รอดำเนินการ" และในครั้งต่อไปหลังจากปรับแคชที่เพรียวบางเล็กน้อยมันจะไปถึง "วิธีการประมวลผล" ก่อนที่จะหยุดทำงาน จากสิ่งที่ฉันอ่านนี่เป็นเรื่องปกติเนื่องจากปัญหาด้านความจำ

นี่คือความพยายามครั้งล่าสุดของฉันในการเรียกใช้การนำเข้า:

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

และนี่คือรายละเอียดสำหรับอินสแตนซ์ขนาดใหญ่บน EC2:

อินสแตนซ์ขนาดใหญ่หน่วยความจำ 7.5 GB, หน่วยคำนวณ EC2 4 หน่วย (แกนประมวลผลเสมือน 2 แกนพร้อมหน่วยคำนวณ EC2 2 หน่วย), พื้นที่จัดเก็บอินสแตนซ์ภายในเครื่อง 850 GB, แพลตฟอร์ม 64 บิต

คำถามของฉันคือ - มีทรัพยากรมาตรฐานที่ดีในการกำหนดความต้องการในการปรับแต่งสำหรับ osm2pgsql และ Postgres หรือไม่? ความเร็วในการนำเข้านั้นไม่สำคัญสำหรับฉันฉันแค่อยากให้แน่ใจว่ากระบวนการทำงานเสร็จสมบูรณ์อย่างปลอดภัยแม้ว่าจะใช้เวลา 4 หรือ 5 วัน ... ฉันได้อ่านผ่านทาง Frederick Ramm ของ " การปรับการเรนเดอร์ให้เหมาะสมที่สุด chain "(PDF) เอกสารจาก SOTM ของปีที่แล้ว แต่มีความคิดเห็น / ทรัพยากรอื่น ๆ ที่ดีบ้างไหม?


การทำเช่นนี้กับ EC2 แพงหรือไม่
Pablo

มันไม่ถูกที่จะให้มันทำงานได้ แต่แผนชั่วคราวคือการหมุนมันสร้างชุดไพ่จากนั้นปิดมันและใช้ชุดนั้นสักครู่จนกว่าเราจะต้องใช้การอัพเดท ก็ยังคงมากราคาถูกกว่าการซื้อเซิร์ฟเวอร์ขนาดใหญ่ ...
colemanm

1
! ที่น่าสนใจ ฉันไม่เคยลองสิ่งนี้ใน XP-Home-Box เครื่องเก่าของฉัน มันใช้งานได้จริงเหรอ? ฉันถามเพราะมันถูกเขียนขึ้นเพื่อแปลงสารสกัดจาก Geofabrik หรือ Cloudmade ไม่ใช่สำหรับโลกทั้งใบ ดูเหมือนว่าดาวเคราะห์จะเป็น XML ที่ไม่ถูกต้อง คุณแก้ปัญหานี้ได้อย่างไร

@Carsten ในการย้ายการตอบกลับของคุณไปยังแบบฟอร์มแสดงความคิดเห็นฉันได้ลบความคิดเห็นโดย @jvangeld โดยไม่ได้ตั้งใจ นี่คือ: สวัสดี Carsten ยินดีต้อนรับสู่ GIS.se มันยอดเยี่ยมมากเมื่อนักพัฒนามาที่นี่เพื่อช่วยเหลือผู้คนในโปรแกรม แต่คำตอบของคุณที่นี่น่าจะดีกว่าหากเป็นความคิดเห็นที่โพสต์ของ @ winwaed เป็นการดีที่มีคุณมาที่นี่!
whuber

คำตอบ:


8

ตามเอกสารบอกว่าคุณอาจต้องใช้ RAM มากกว่า 256gb เพื่อทำเช่นนั้น

ผมไม่ทราบว่ามากเกี่ยวกับ EC2 แต่คุณสามารถลองใช้โหมดบาง (--slim) หรือลองOsmosis

มีโพสต์ที่น่าสนใจคือ: http://weait.com/content/build-your-own-openstreetmap-server มันบอกว่า 'คุณต้องใช้โหมดเพรียวบาง'


ใช่ฉันยังเข้าใจว่าต้องใช้โหมดเพรียวบางเพื่อใช้ diffs สำหรับการอัปเดต
โคลแมนมาน

4

เนื่องจากข้อ จำกัด ของหน่วยความจำฉันไม่ได้ลองใช้ osm2pgsql เพื่อโหลดข้อมูลการกำหนดเส้นทางของ planet.osm ฉันใช้ osm2po แทน:

http://osm2po.de/

เอกสารส่วนใหญ่เป็นภาษาเยอรมัน แต่ด้วยการทดลองเล็กน้อยฉันจัดการเพื่อให้มันทำงานได้ ใช้เวลาสองสามวันใน Core 2 Quad เฉพาะ (แต่ใช้เพียงหนึ่งเธรด)


2

ฉันเจอสิ่งต่อไปนี้ขณะมองหาสิ่งอื่นhttp://aws.amazon.com/datasets/2844 - ฉันไม่แน่ใจว่ามันจะช่วยคุณได้หรือไม่ แต่อาจเป็นจุดเริ่มต้น


ว่าการทำงานจะทำได้แน่นอนสำหรับตอนนี้แม้ว่าจะเป็นจาก 2009 ...
colemanm

2

คุณได้รับการแก้ไขปัญหาของคุณนอกเหนือจากการใช้แพ็คเกจที่สร้างไว้ล่วงหน้าหรือไม่? ฉันดูเหมือนจะมีปัญหาที่คล้ายกันมากในอินสแตนซ์ EC2 ฉันใช้ pbf planet จาก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

อัปเดต: ดูเหมือนว่าฉันจะพบวิธีแก้ปัญหา - หลังจากลดหน่วยความจำที่ถามไปถึง 6 GB (พารามิเตอร์ -C 6000) กระบวนการทำงาน (อย่างน้อยก็ใช้ได้หลายวันแล้วจะเสร็จในวันนี้ฉันหวังว่า)

ดูเหมือนว่าอินสแตนซ์ m1. large ที่มีหน่วยความจำ 7.5GB นั้นน้อยเกินไปเล็กน้อยเพื่อให้พอดีกับโหนดทั้งหมดไปยังหน่วยความจำ (ซึ่งปัจจุบันประมาณ 11GB ต้องการในปัจจุบัน) osm2pgsql ดูเหมือนจะต้องการหน่วยความจำที่ต้องการต่ำกว่า 700MB ดังนั้นด้วย -C 7000 จะใช้หน่วยความจำไม่เพียงพอ แต่ด้วย -C 6000 (หรืออาจเป็น -C 6500)

นอกจากนี้ฉันขอแนะนำให้ใช้อินสแตนซ์หน่วยความจำที่สูงขึ้นอย่างน้อย 15GB RAM มันควรทำให้การนำเข้าเร็วขึ้นมาก หรือแม้กระทั่งอินสแตนซ์หน่วยความจำขนาดใหญ่พิเศษสองเท่าซึ่งน่าจะแพงเป็นสองเท่า แต่ควรสามารถนำเข้าดาวเคราะห์ทั้งโลกในโหมดที่ไม่ใช่แบบบางภายใน <5 ชั่วโมง (เร็วกว่าโหมดบางประมาณ 3-4 เท่า) ดังนั้นมันจะถูกกว่าจริง


1

ฉันได้รับ osm2pgsql เพื่อทำงานบน EC2 โดยใช้ซีพียูน้อยลงและ RAM เพิ่มขึ้น มันล้มเหลวเนื่องจากปัญหาหน่วยความจำจนกว่าฉันจะเพิ่มอินสแตนซ์ให้กับหน่วยความจำขนาดใหญ่พิเศษด้วย ram 17 กิกะไบต์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.