Tối ưu hóa nhập khẩu osm2pgsql cho dữ liệu OSM


27

Tôi hiện đang xây dựng một phiên bản trên EC2 để nhập toàn bộ ảnh chụp nhanh của Planet.osm cho toàn bộ dữ liệu của Trái đất cho một số dự án chúng tôi đang thực hiện. Tôi đã tạo ra một phiên bản Ubuntu x64 lớn và đính kèm nhiều bộ lưu trữ riêng biệt trên một ổ EBS cho cơ sở dữ liệu Postgres và sửa đổi nó để lưu trữ dữ liệu PGQuery ở đó.

Bây giờ máy chủ đang gặp sự cố khi sử dụng osm2pgsqlđể nhập ảnh chụp nhanh ... Sau một vài lần thử với các cấu hình bộ nhớ khác nhau và không có gì, quá trình tiếp tục xuất ra "Bị giết" sau khi đã hoàn thành; một khi nó đã bị giết trong khi "vượt qua các cách chờ xử lý" và lần tiếp theo, sau khi điều chỉnh một chút bộ đệm mỏng, nó đã đạt đến "các cách xử lý" trước khi thoát ra. Từ những gì tôi đã đọc, điều này thường là do vấn đề bộ nhớ.

Đây là nỗ lực mới nhất của tôi để chạy nhập:

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

Và đây là thông số kỹ thuật cho một ví dụ lớn trên EC2:

Bộ nhớ lớn 7,5 GB bộ nhớ, 4 đơn vị tính toán EC2 (2 lõi ảo với 2 đơn vị tính toán EC2 mỗi đơn vị), bộ nhớ lưu trữ cục bộ 850 GB, nền tảng 64 bit

Câu hỏi của tôi là - có một số tài nguyên điểm chuẩn tốt để xác định các yêu cầu điều chỉnh cho osm2pgsql và Postgres? Tốc độ nhập thậm chí không quan trọng đối với tôi, tôi chỉ muốn có thể đảm bảo quá trình hoàn tất an toàn, ngay cả khi phải mất 4 hoặc 5 ngày ... Tôi đã đọc qua " Tối ưu hóa kết xuất của Frederick Ramm" chuỗi "(PDF) tài liệu từ SOTM năm ngoái, nhưng có ý kiến ​​/ tài nguyên tốt nào khác không?


Sẽ không tốn kém lắm khi làm điều đó trên EC2?
Pablo

Nó không rẻ để duy trì hoạt động, nhưng kế hoạch tạm thời là quay nó lên, tạo ra một lát rồi tắt nó và sử dụng bộ đó trong một thời gian cho đến khi chúng ta cần áp dụng các bản cập nhật. Nó vẫn rẻ hơn rất nhiều so với việc mua một máy chủ khổng lồ ...
colemanm

1
Hấp dẫn! Tôi chưa bao giờ thử cái này trên XP-Home-Box cũ của tôi. Nó thực sự hoạt động? Tôi đang hỏi bởi vì nó được viết để chuyển đổi các trích đoạn từ Geofabrik hoặc CloudADE không dành cho toàn bộ hành tinh. Hành tinh dường như là XML không hợp lệ. Làm thế nào bạn giải quyết vấn đề này?

@Carsten Khi di chuyển phản hồi của bạn sang mẫu nhận xét, tôi đã vô tình xóa một nhận xét của @jvangeld. Đây là: Xin chào Carsten, chào mừng bạn đến với GIS.se. Thật tuyệt vời khi các nhà phát triển đến đây để giúp mọi người với các chương trình của họ. Nhưng câu trả lời của bạn ở đây có lẽ sẽ tốt hơn khi bình luận cho bài đăng của @ winwaed. Một lần nữa, thật tuyệt khi có bạn ở đây!
whuber

Câu trả lời:


8

Như tài liệu nói rằng bạn có thể cần nhiều hơn 256gb ram để làm điều đó.

Tôi không biết nhiều về EC2, nhưng bạn có thể thử chế độ mỏng (--slim) hoặc thử Thẩm thấu .

Có một bài viết thú vị: http://weait.com/content/build-your-own-openstreetmap-server Nó nói, 'bạn phải sử dụng chế độ mỏng'.


Vâng, tôi cũng hiểu rằng chế độ mỏng là cần thiết để áp dụng diffs cho các bản cập nhật.
colemanm

4

Do những hạn chế về bộ nhớ, tôi thậm chí đã không thử sử dụng osm2pgsql để tải dữ liệu định tuyến của hành tinh.osm. Thay vào đó tôi đã sử dụng osm2po:

http://osm2po.de/

Hầu hết các tài liệu bằng tiếng Đức nhưng với một chút thử nghiệm tôi đã xoay sở để làm cho nó hoạt động. Mất vài ngày trên Core 2 Quad chuyên dụng (nhưng nó chỉ sử dụng một luồng).


2

Tôi đã đi qua những điều sau đây trong khi tìm kiếm một cái gì đó khác http://aws.amazon.com/datasets/2844 - Tôi không chắc liệu nó có giúp bạn ra ngoài hay không nhưng nó có thể là điểm khởi đầu.


Điều đó chắc chắn có thể hoạt động ngay bây giờ, mặc dù đó là từ năm 2009 ...
colemanm

2

Bạn đã có được một giải pháp cho vấn đề của mình, ngoài việc sử dụng gói được tạo trước cũ? Tôi dường như có vấn đề rất giống trong ví dụ EC2. Tôi đang sử dụng hành tinh pbf từ http://doad.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

Cập nhật: có vẻ như tôi đã tìm thấy giải pháp - sau khi giảm bộ nhớ yêu cầu xuống còn 6 GB (tham số -C 6000), quy trình hoạt động (ít nhất là đã hoạt động được vài ngày rồi, tôi sẽ kết thúc vào hôm nay).

Có vẻ như phiên bản m1.lund với bộ nhớ 7.5GB hơi quá ít để phù hợp với tất cả các nút vào bộ nhớ (hiện tại cần khoảng 11GB). Osm2pgsql dường như cần thêm 700 MB cho bộ nhớ cần thiết, vì vậy với -C 7000, nó chỉ thiếu bộ nhớ, nhưng với -C 6000 (hoặc có thể là -C 6500) thì nó hoạt động.

Ngoài ra, tôi khuyên bạn nên sử dụng ví dụ bộ nhớ cao hơn với ít nhất 15 GB RAM, việc này sẽ giúp nhập nhanh hơn nhiều. Hoặc thậm chí tăng gấp đôi thể hiện bộ nhớ lớn sẽ có giá gấp đôi, nhưng có thể thực hiện nhập toàn hành tinh ở chế độ không mỏng trong vòng <5 giờ (nhanh hơn khoảng 3-4 lần so với chế độ mỏng). Vì vậy, nó sẽ thực sự rẻ hơn.


1

Tôi đã có osm2pgsql để hoạt động trên EC2 bằng cách sử dụng ít cpu hơn và nhiều RAM hơn. Nó không thành công do các vấn đề về bộ nhớ cho đến khi tôi nâng cấp phiên bản lên một bộ nhớ cao cực lớn với 17 hợp đồng ram.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.