24 votos

Hay una arquitectura distribuida de geoprocesamiento?

Supongamos que tengo 50 equipos de mi LAN. Cada equipo tiene una geodatabase para todos los polígonos de parcela en un estado en particular en los estados unidos.

Me gustaría escribir una tarea de geoprocesamiento que se encuentra en todas las parcelas con valores de más de x $/acre que están dentro y los pies de otra parcela en la que está valorado en menos de z $/acre.

Me gustaría formular y ejecutar esta consulta sin saber, sin importarle que los datos se distribuyen a lo largo de 50 equipos. Tenga en cuenta las condiciones de frontera: yo también quiero que la consulta devuelva los casos donde caros parcelas en un estado cerca barato parcelas en otro.

Hay una arquitectura que soporta este tipo de la distribución de geoprocesamiento?

La arquitectura puede ser descrito de una manera abstracta, o como una aplicación específica de Azure o Amazon Web Services. O, preferiblemente, como una oficina típica donde las computadoras están parados en la noche con abundante licencias de ArcGIS desktop.

13voto

NilObject Puntos 7874
  1. almacenar todos sus paquetes en una base de datos central
  2. formular una cuadrícula sobre el hecho en EE.UU. de los cuadrados de los N pies en un lado, donde N es tal que el número de paquetes que se ajustan a N no sople la memoria de uno de sus nodos
  3. crear una tabla en tu base de datos con una fila por cada cuadrado de la cuadrícula, una columna de id de la geometría de la columna y columna de estado
  4. cada nodo se ejecuta un pequeño programa que
    1. buscar la siguiente sin procesar de la plaza
    2. la marca como en el proceso de
    3. tira todas las parcelas ST_DWithin(plaza de la parcela,maxfeet)
    4. hace la consulta real
    5. escribe de nuevo la consulta respuesta a una solución de la tabla en la base de datos central
    6. las marcas de la plaza al completo
    7. volver a 1

El obvio caso de falla es como su radio de interés en la parcela de consulta crece lo suficientemente grande que una gran parte de su conjunto de datos son candidatos potenciales para que coincida con cada paquete.

7voto

Lars Mæhlum Puntos 4569

Hubo un interesante ranura en FOSS4G en septiembre en Barcelona acerca de esto: http://2010.foss4g.org/presentations_show.php?id=3584

Se convirtió en más de un panel de discusión de una presentación.

En medio de este post en el blog de Paul Ramsey le da algún tipo de resumen de eso.

3voto

jerhinesmith Puntos 5425

La primera cosa que se preocupa con este problema es lo que se necesitan los datos de donde y cuando. Para ello, por lo general comienzan con el estúpido de serie de la versión del problema.

Encontrar todos los paquetes valorados en más de $x/acre que están dentro y los pies de otra parcela en la que está valorado en menos de z $/acre.

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

Mientras que este algoritmo no está optimizado, se va a resolver el problema.

He resuelto un problema similar para mi tesis de Maestría que se encuentra la más cercana a la parcela por cada punto en un conjunto de datos. He implementado la solución en PostGIS, Hadoop y MPI. La versión completa de mi tesis es aquí, pero voy a resumir los puntos importantes ya que se aplica a este problema.

MapReduce no es una buena plataforma para resolver este problema, ya que requiere el acceso a todo el conjunto de datos (o una cuidadosamente seleccionada subconjunto) para procesar un pecado gle parcela. MapReduce no controla secundaria conjuntos de datos.

MPI, sin embargo, puede resolver muy fácilmente. La parte más difícil es determinar cómo dividir los datos. Esta división se basa en la cantidad de datos que hay, cómo muchos p rocessors tiene que ejecutar, y cuánto de memoria por procesador. Para la mejor escala (y por lo tanto el rendimiento), es necesario tener varios copias de las parcelas del conjunto de datos en la memoria (a través de todos los ordenadores) a la vez.

Para explicar cómo funciona esto, voy a suponer que cada una de las 50 computadoras tiene 8 procesadores. A continuación, voy a asignar a cada equipo la responsabilidad de revisar los 1/50 de las parcelas. Esta comprobación será ejecutado por 8 procesos en el equipo, cada uno de los cuales tiene una copia de la misma 1/50 parte de las parcelas y 1/8 de la parcela conjunto de datos. Por favor, tenga en cuenta que los grupos no se limitan a una sola máquina, pero puede cruzar la máquina de fronteras.

El proceso se va a ejecutar el algoritmo, obteniendo las parcelas p a partir de la 1/50th conjunto de parcelas, y las parcelas para q desde el 1/8 de conjunto. Después de que el interior bucle, todos los procesos en el mismo equipo va a hablar juntos para determinar si el paquete debe ser emitida.

He implementado un algoritmo similar a este para mi problema. Usted puede encontrar la fuente aquí.

Incluso con este tipo de no-algoritmo optimizado que yo era capaz de obtener impresionantes resultados que fueron muy optimizado para el programador de tiempo (lo que significa que podría escribir un estúpido algoritmo simple y el cálculo sería todavía lo suficientemente rápido). El siguiente punto a optimizar (si realmente lo necesita), es la instalación de un quadtree índice del segundo conjunto de datos (donde se obtiene q) para cada proceso.


Para responder a la pregunta original. Existe una arquitectura: MPI + GEOS. El tiro en un poco de ayuda de mis ClusterGIS aplicación, y mucho se puede hacer. Todo este software se puede encontrar como de código abierto, por lo que no pago de licencias. No estoy seguro de cómo portátil para Windows es (tal vez con Cygwin) como trabajé en linux. Esta solución se puede implementar en EC2, Rackspace, o lo que sea en la nube está disponible. Cuando yo se desarrolló yo estaba usando un dedicado compute cluster en una Universidad.

2voto

Adam Ernst Puntos 6939

La vieja escuela en paralelo metodología de programación es simplemente almacenar un estado de + las parcelas que toque en cada procesador, entonces es vergonzosamente fácil para paralelizar. Pero teniendo en cuenta la variación en tamaño de los estados de los estados unidos le gustaría obtener un mejor rendimiento de dividir el país en las celdas de la cuadrícula (de nuevo con el toque halo de parcelas) y el envío de cada celda de la cuadrícula para procesadores utilizando una configuración maestro esclavo.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X