Чи існує архітектура розподіленої геопроцедури?


24

Припустимо, у мене в мережі LAN 50 комп’ютерів. Кожен комп'ютер має базу даних геоданих для всіх полігонів посилок у певному штаті США.

Я хотів би написати задачу геообработки , яка знаходить все ділянки на суму понад х $ / акр, що знаходяться в межах у ніг іншої ділянки , який оцінюється в менш ніж г $ / акр.

Я б хотів сформулювати та запустити цей запит, не знаючи і не піклуючись про те, що дані поширюються на 50 комп'ютерах. Майте на увазі граничні умови: я також хочу, щоб запит повертав випадки, коли дорогі посилки в одному штаті знаходяться поблизу недорогих посилок в іншому.

Чи існує архітектура, яка підтримує такий вид розподіленої геопроцедури?

Архітектура може бути описана абстрактно, або як реалізація, специфічна для веб-служб Azure або Amazon. Або, бажано, як типовий офіс, де комп’ютери сидять у режимі очікування вночі з рясними ліцензіями на настільний ArcGIS.


1
Приємне запитання. У цьому конкретному прикладі вам потрібен спосіб автоматичної паралельної побудови та використання структури просторових даних, наприклад квадрату. Якщо ви цього не зробите, а натомість просто поширюєте пошук на грубі сили на 50 комп’ютерах, ви можете фактично уповільнити запит, а не прискорити його. Я впевнений, що така загальна архітектура ще не існує, тому, можливо, вам пощастить, спочатку поміркуйте, які типи запитів можуть отримати вигоду від розподіленої обробки, а потім заглянувши в потрібні їм архітектури. Можливо, опублікуйте це запитання на сайті TCS?
качан

@whuber Спасибі, що таке сайт TCS?
Кірк Куйкендалл

@Kirk вибачте за криптовалюту - я був ледачий. cstheory.stackexchange.com
whuber

1
основна теорія CS, ймовірно, не допоможе, оскільки хлопці з CS рідко отримують просторовий характер :-)
Ian Turton

1
@iant Там не дуже багато людей з ГІС, які будуть багато знати про гайки та болти розподілених обчислень (я не кидаю ніяких розбіжностей на членів цього сайту, які, очевидно, є винятковими). Я вірю, що люди з ТКС матимуть знання, щоб відповісти на початкове запитання щодо існування архітектури. Мене хвилює лише те, чи вважають вони це питання цікавим! Я думаю, якби це було правильним чином, можливо. (Наприклад, можна переробити це в структурі даних.)
whuber

Відповіді:


13
  1. зберігайте всі ваші посилки в одній центральній базі даних
  2. сформулюйте сітку над США з квадратів N футів збоку, де N таке, що кількість посилок, що вміщуються в межах N, не вибухне пам'ять на одному з ваших вузлів
  3. створити таблицю у вашій базі даних з одним рядком на квадрат сітки, стовпцем id, стовпцем геометрії та стовпцем статусу
  4. кожен вузол запускає невелику програму, яка
    1. знайти наступний необроблений квадрат
    2. позначає це як процес
    3. тягне всі посилки ST_DWithin (квадрат, посилка, maxfeet)
    4. робить власне запит
    5. записує відповідь на запит у таблицю рішення в центральну базу даних
    6. позначає квадрат як завершений
    7. повернутися до 1

Очевидний випадок відмови полягає в тому, що ваш радіус інтересу до запиту про посилку зростає досить великим, що великі частини вашого набору даних є потенційними кандидатами для відповідності кожній посилці.


Дякую Паулу, чи потрібен би мені один вузол, який виконує функції координатора для інших вузлів?
Кірк Куйкендалл

База даних виконує функцію неявного "координатора", оскільки вона містить стан черги, але вузли не потрібно узгоджувати після запуску та вказівки на базу даних. Не впевнений, відповідь це чи ні.
Пол Рамзі

7

У вересні в Барселоні був цікавий слот на FOSS4G: http://2010.foss4g.org/presentations_show.php?id=3584

Це стало більше панельною дискусією, ніж презентацією.

У середині цього допису в блозі Пол Рамзі дає певну резюме з цього.


Це виглядає перспективно, вони розмістили презентацію де-небудь?
Кірк Куйкендалл

Ну а оскільки Шюлер Ерле став модератором дискусії на панелі замість того, щоб проводити заплановану презентацію, я не думаю, що про неї буде набагато більше інформації. Але оскільки Ерле планував цю презентацію, він, мабуть, має деякі відомості про це. Він є скрізь, якщо здійснити пошук у Google. Це може бути ідея запитати його безпосередньо. Не знаю. Більшість дискусій були вище моїх розумінь, тому я не можу дати кращого резюме, ніж Пол у своєму блозі.
Nicklas Avén

4

Можливо, погляньте на білий документ "ArcGIS Server у практичній серії: Велике пакетне геокодування " у документах esri .

Йдеться про геокодування, але загальний процес використання асинхронної служби геообробки може бути застосований у вашому випадку.


Виглядає добре, мені цікаво, чи можна це узагальнити до інших форм геообробки. Схоже, мені потрібно перекриття між наборами даних.
Кірк Куйкендалл

3

Перше, що має хвилювати цю проблему, - які дані потрібні, де і коли. Для цього я зазвичай починаю з дурної, серійної версії проблеми.

Знайдіть усі посилки, оцінені понад x $ / акр, які знаходяться в межах футів іншої посилки, яка оцінюється менше ніж $ z / акр.

foreach p in parcels {
  if value(p) > x {
    foreach q in parcels {
      if (dist(p,q) <= y) and (value(q) < z) {
        emit(p)
      }
    }
  }
}

Поки цей алгоритм не оптимізований, він вирішить проблему.

Я вирішив аналогічну проблему для моєї магістерської роботи, яка знайшла найближчу посилку для кожного пункту набору даних. Я реалізував рішення в PostGIS , Hadoop та MPI . Повна версія моєї дипломної роботи є тут , але я підсумую важливі моменти, що стосуються цієї проблеми.

MapReduce не є хорошою платформою для вирішення цієї проблеми, оскільки для обробки посилки з гріха потрібен доступ до всього набору даних (або ретельно вибраного підмножини). MapReduce не працює добре з вторинними наборами даних.

Однак MPI може вирішити це досить зручно. Найважча частина - це визначення способів поділу даних. Цей розкол базується на тому, скільки даних є, скільки п-ризолетів вам потрібно запустити, і скільки пам’яті у вас на процесор. Для найкращого масштабування (і, отже, продуктивності) вам потрібно буде мати декілька копій набору даних про посилки в пам'яті (на всіх ваших комп'ютерах) одночасно.

Щоб пояснити, як це працює, я припускаю, що кожен з ваших 50 комп’ютерів має 8 процесорів. Потім я покладу на кожен комп’ютер відповідальність за перевірку 1/50 посилок. Ця перевірка буде виконана 8 процесами на комп'ютері, кожен з яких має копію тієї ж 1/50 частини посилок та 1/8 набору даних про посилку. Зверніть увагу, що групи не обмежуються однією машиною, але можуть перетинати межі машини.

Процес виконує алгоритм, отримуючи посилки для p з 1/50-го набору посилок, а посилки для q з 1/8-го набору. Після внутрішнього циклу всі процеси на одному комп’ютері будуть спілкуватися разом, щоб визначити, чи слід випускати посилку.

Я реалізував подібний алгоритм до цього для своєї проблеми. Ви можете знайти джерело тут .

Навіть за допомогою такого неоптимізованого алгоритму мені вдалося отримати вражаючі результати, які були оптимізовані за програмістського часу (це означає, що я можу написати дурний простий алгоритм, і обчислення все одно будуть досить швидкими). Наступне місце для оптимізації (якщо вам це справді потрібно) - це встановлення квадратурного індексу другого набору даних (звідки ви отримуєте q) для кожного процесу.


Щоб відповісти на оригінальне запитання. Є архітектура: MPI + GEOS. Додайте трохи допомоги від моєї реалізації ClusterGIS і можна зробити дуже багато. Все це програмне забезпечення можна знайти як відкритий код, тому плата за ліцензування не вимагає. Я не впевнений, наскільки він портативний для Windows (можливо, з Cygwin), коли я працював над ним в Linux. Це рішення можна розгорнути на EC2, Rackspace або будь-якій іншій хмарі. Коли я його розробив, я використовував спеціалізований обчислювальний кластер в університеті.


2

Стара методологія паралельного програмування школи полягає в тому, щоб просто зберігати стан + посилки, які торкаються його на кожному процесорі, тоді їх паразитно легко. Але, враховуючи різницю у розмірі штатів США, ви отримаєте кращі показники, розділивши країну на комірки сітки (знову з дотиком ореолу посилок) та відправивши кожну клітинку сітки процесорам, використовуючи конфігурацію головного ведомого.


Замість посилок, які торкаються, мені знадобляться посилки із сусідніх штатів у межах відстані y.
Кірк Куйкендалл

Я припускаю, що Y достатньо менший, що він не є значно більшим, ніж невелика кількість посилок. Якщо це велика частка держави, то, мабуть, вам краще буде просто використовувати довільну сітку для проведення розрахунків.
Ян Тертон

2

Ви можете поглянути на Appistry . Це передбачає можливість переміщення існуючих додатків до приватної хмарної інфраструктури. Можуть бути й інші проекти з подібною метою: замість того, щоб розраховувати знову і знову для кожної програми дуже складну гайку розбиття та розподілу завдань на паралельну обробку, зробити бібліотеку або платформу, яка робить це автоматично.


Дякую Метт, це виглядає багатообіцяюче. Погуглити я знайшов цю презентацію FedUC 2008 proceedings.esri.com/library/userconf/feduc08/papers / ... Мені було б цікаво побачити оновлену інформацію про те , що вони зробили з тих пір.
Кірк Куйкендалл

2

Для цього типу проблем я б використав карту / зменшити рамку. "Сирий" рамки Appistry чудово підходить для "бентежно паралельних" проблем, до яких ця близька. Крайові умови не дозволяють цього бути. Карта / зменшення (підхід Google до розподілених обчислень) чудово підходить для цього типу проблем.

Найбільший прогрес в Appistry з паперу 08 - це випуск продукту CloudIQ Storage. Це дозволяє використовувати схожий сховище "s3", використовуючи диски на локальних серверах. Тоді продукт CloudIQ Engine може надавати послуги високого обсягу або розповсюджувати / збирати програми будь-якого типу (ми довели масштабування за допомогою режиму виконання ESRI та інших ліній з відкритим кодом). Якщо ви працюєте на даних, заснованих на файлах, ви поширюєте їх за допомогою CloudIQ Storage та обробляйте маршрутні завдання на локальні репліки файлів, щоб їх не потрібно було переміщувати по мережі. (тому кожному вузлу потрібні не всі дані)

Для карт / зменшення ви можете нанести на CloudIQ Storage щось на зразок Hadoop (з відкритим кодом M / R). Я хотів би поглянути на Hadoop на проблему, як описано, але вам справді потрібно зануритися, починати непросто, а M / R - це загін мозку. Існує також комерційно підтримувана дистрибуція, пропонована Cloudera. Є ще один продукт Appistry, CloudIQ Manger, який є приємним доповненням до Hadoop (Cloudera чи іншим чином) для розповсюдження та управління.

Я б почав з Hadoop (файлова система M / R та HDFS), і якщо вам потрібно більш комерційно підтримуване масштабоване рішення, подивіться на Appistry CloudIQ Manager і Storage у поєднанні з дистрибутивом Cloudera Hadoop.

Якщо ви хочете простішу архітектуру для "незручно паралельних" завдань, перегляньте також CloudIQ Engine. (підходи, викладені в роботі, на яку посилається Кірк, досі діють)


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.