Misalkan saya memiliki 50 komputer di LAN saya. Setiap komputer memiliki geodatabase untuk semua poligon paket di negara bagian tertentu di AS.
Aku ingin menulis tugas geoprocessing yang menemukan semua paket bernilai lebih dari x $ / acre yang berada dalam y kaki dari paket lain yang bernilai kurang dari z $ / acre.
Saya ingin merumuskan dan menjalankan kueri ini tanpa mengetahui atau peduli bahwa data didistribusikan di 50 komputer. Ingatlah syarat-syarat batas: Saya juga ingin kueri mengembalikan kasus di mana paket mahal di satu negara dekat paket murah di negara lain.
Apakah ada arsitektur yang mendukung semacam ini geoprocessing terdistribusi?
Arsitektur dapat dijelaskan secara abstrak, atau sebagai implementasi khusus untuk Azure atau Amazon Web Services. Atau, lebih disukai, sebagai kantor biasa tempat komputer duduk diam di malam hari dengan lisensi desktop ArcGIS yang berlimpah.
sumber
Jawaban:
Kasus kegagalan yang jelas adalah ketika radius Anda dalam kueri parsel tumbuh cukup besar sehingga sebagian besar dataset Anda adalah kandidat potensial yang cocok dengan setiap parsel.
sumber
Ada slot menarik di FOSS4G pada bulan September di Barcelona tentang ini: http://2010.foss4g.org/presentations_show.php?id=3584
Itu menjadi lebih dari diskusi panel daripada presentasi.
Di tengah posting blog ini Paul Ramsey memberikan semacam ringkasan dari itu.
sumber
Mungkin lihat pada kertas putih "ArcGIS Server dalam Seri Praktek: Geocoding Batch Besar" di kertas putih esri .
Ini tentang geocoding tetapi proses umum menggunakan layanan geoprocessing asinkron mungkin berlaku untuk kasus Anda.
sumber
Hal pertama yang harus diperhatikan tentang masalah ini adalah data apa yang dibutuhkan di mana dan kapan. Untuk melakukannya, saya biasanya mulai dengan versi serial masalah yang bodoh.
Temukan semua paket bernilai lebih dari x $ / acre yang berada dalam y kaki dari paket lain yang dihargai kurang dari z $ / acre.
Meskipun algoritma ini tidak dioptimalkan, itu akan menyelesaikan masalah.
Saya memecahkan masalah yang sama untuk tesis Master saya yang menemukan paket terdekat untuk setiap poin dalam dataset. Saya mengimplementasikan solusi di PostGIS , Hadoop , dan MPI . Versi lengkap dari tesis saya ada di sini , tetapi saya akan merangkum poin-poin penting yang berlaku untuk masalah ini.
MapReduce bukan platform yang baik untuk menyelesaikan masalah ini karena membutuhkan akses ke seluruh dataset (atau subset yang dipilih dengan cermat) untuk memproses paket sin gle. MapReduce tidak menangani dataset sekunder dengan baik.
Namun, MPI dapat menyelesaikannya dengan cukup mudah. Bagian tersulit adalah menentukan cara membagi data. Pemisahan ini didasarkan pada berapa banyak data yang ada, berapa banyak prosesor yang harus Anda jalankan, dan berapa banyak memori yang Anda miliki per prosesor. Untuk penskalaan terbaik (dan karenanya kinerja), Anda harus memiliki beberapa salinan dataset paket dalam memori (di semua komputer Anda) sekaligus.
Untuk menjelaskan cara kerjanya, saya akan berasumsi bahwa masing-masing dari 50 komputer Anda memiliki 8 prosesor. Saya kemudian akan menugaskan masing-masing komputer tanggung jawab untuk memeriksa 1/50 dari paket. Pemeriksaan ini akan dilakukan oleh 8 proses di komputer, yang masing-masing memiliki salinan 1/50 bagian dari paket dan 1/8 dari dataset paket. Harap dicatat bahwa grup tidak terbatas pada satu mesin saja, tetapi dapat melewati batas mesin.
Proses ini akan menjalankan algoritma, mendapatkan parsel untuk p dari set parsel 1/50, dan parsel untuk q dari set 1/8. Setelah loop dalam, semua proses pada komputer yang sama akan berbicara bersama untuk menentukan apakah paket tersebut harus dipancarkan.
Saya menerapkan algoritma yang mirip dengan ini untuk masalah saya. Anda dapat menemukan sumbernya di sini .
Bahkan dengan algoritma yang tidak dioptimalkan semacam ini saya dapat memperoleh hasil yang mengesankan yang sangat dioptimalkan untuk waktu programmer (yang berarti bahwa saya bisa menulis algoritma sederhana yang bodoh dan komputasinya masih cukup cepat). Tempat berikutnya untuk mengoptimalkan (jika Anda benar-benar membutuhkannya), adalah untuk mengatur indeks quadtree dari dataset kedua (di mana Anda mendapatkan q dari) untuk setiap proses.
Untuk menjawab pertanyaan awal. Ada arsitektur: MPI + GEOS. Lemparkan sedikit bantuan dari implementasi ClusterGIS saya dan cukup banyak yang bisa dilakukan. Semua perangkat lunak ini dapat ditemukan sebagai sumber terbuka, sehingga tidak ada biaya lisensi. Saya tidak yakin bagaimana portabel untuk Windows itu (mungkin dengan Cygwin) karena saya bekerja di linux. Solusi ini dapat digunakan pada EC2, Rackspace, atau cloud apa pun yang tersedia. Ketika saya mengembangkannya saya menggunakan cluster komputasi khusus di sebuah Universitas.
sumber
Metodologi pemrograman paralel sekolah tua adalah hanya menyimpan keadaan + paket yang menyentuhnya pada setiap prosesor maka memalukan mudah untuk diparalelkan. Tetapi mengingat variasi ukuran negara bagian AS Anda akan mendapatkan kinerja yang lebih baik dengan memecah negara menjadi sel-sel grid (sekali lagi dengan lingkaran hal menyentuh) dan mengirimkan setiap sel grid ke prosesor menggunakan konfigurasi master slave.
sumber
Anda mungkin ingin memberi tampilan pada Appistry . Ini dimaksudkan untuk memungkinkan migrasi aplikasi yang sudah ada ke infrastruktur cloud pribadi. Mungkin ada proyek lain dengan tujuan yang sama: daripada mencari tahu lagi dan lagi untuk setiap aplikasi kacang yang sangat kompleks dari mogok dan mendistribusikan tugas ke pemrosesan paralel, membuat perpustakaan atau platform yang melakukan itu secara otomatis.
sumber
Untuk jenis masalah ini, saya akan menggunakan kerangka peta / pengurangan. Kerangka kerja Appistry "mentah" bagus untuk masalah "paralel yang memalukan", yang dekat dengan ini. Kondisi tepi tidak memungkinkan. Map / Reduce (pendekatan Google untuk komputasi terdistribusi) sangat bagus untuk masalah jenis ini.
Kemajuan terbesar di Appistry sejak kertas 08 adalah rilis produk CloudIQ Storage. Ini memungkinkan untuk fasilitas penyimpanan "s3" seperti memanfaatkan disk pada server lokal Anda. Kemudian, produk CloudIQ Engine dapat mengaktifkan layanan volume tinggi atau menyebarkan / mengumpulkan aplikasi gaya apa pun (kami telah membuktikan skalabilitas menggunakan runtime ESRI dan lib sumber terbuka lainnya). Jika Anda beroperasi pada data berbasis file, Anda mendistribusikannya menggunakan CloudIQ Storage, dan merutekan pekerjaan pemrosesan ke replika file lokal sehingga tidak harus dipindahkan di jaringan. (jadi setiap node tidak memerlukan semua data)
Untuk Map / Reduce, Anda dapat melapisi sesuatu seperti Hadoop (kerangka kerja M / R open source) pada CloudIQ Storage. Saya akan melihat Hadoop untuk masalah seperti yang dijelaskan, tetapi Anda benar-benar perlu menyelam, tidak mudah untuk memulai, dan M / R adalah penyok otak. Ada juga distribusi yang didukung secara komersial yang ditawarkan oleh Cloudera. Ada produk Appistry lain, CloudIQ Manger yang merupakan pelengkap yang bagus untuk Hadoop (Cloudera atau lainnya) untuk distribusi dan manajemen.
Saya akan mulai dengan Hadoop (M / R dan filesystem HDFS), dan jika Anda membutuhkan solusi yang dapat diskalakan yang didukung secara komersial, lihat Appistry CloudIQ Manager and Storage, bersama dengan distro Cloudera Hadoop.
Jika Anda menginginkan arsitektur yang lebih sederhana untuk tugas "memalukan paralel", lihat juga CloudIQ Engine. (pendekatan yang diuraikan dalam makalah yang dirujuk oleh Kirk masih berlaku)
sumber
Lihatlah OGSA-DQP. "DQP memungkinkan tabel dari beberapa basis data relasional terdistribusi untuk dipertanyakan, menggunakan SQL, seolah-olah ada beberapa tabel dalam satu basis data" http://ogsa-dai.sourceforge.net/documentation/ogsadai4.0/ogsadai4.0- axis / DQPOverview.html
sumber