Ab Initio

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 7

Formas de paralelismo

Bookmark this page


Existen tres formas de paralelismo:

 Paralelismo de flujo

 Paralelismo de componentes

 Paralelismo de datos

En el paralelismo de flujo un registro pasa de un componente a


otro para su procesamiento, sin tener que esperar a que el primer
componente procese todos los registros desde su entrada.
El paralelismo de componentes implica organizar los
componentes en el canvas del grafo de modo que los componentes
de ramas diferentes procesen registros al mismo tiempo. En
el paralelismo de datos los datos se particionan para procesar
los datos en cada partición por separado y al mismo tiempo.

A continuación se muestran ejemplos de cada tipo de paralelismo.


Note que estos tipos de paralelismo se pueden combinar para
disminuir aun más los tiempos de ejecución de los grafos.

Paralelismo de flujo
La imagen de grafo siguiente muestra una vista simplificada de
cómo funciona el paralelismo de flujo. Después de que el
componente Deduplicate termina de procesar el registro 99, éste
fluye corriente abajo hasta el componente Cleanse, que empieza a
procesarlo. Mientras tanto, el componente Deduplicate comienza a
trabajar en el registro 100. Cuando termina de procesar el registro
100, éste fluye corriente abajo hasta el componente Cleanse, y
Deduplicate comienza a trabajar en el registro 101. Esto continúa
hasta que todos los registros de entrada se hayan procesado. Es
mucho más eficiente que si el componente Cleanse tuviera que
esperar a que Deduplicate procese todos sus registros de entrada.

En algunos grafos, todos los componentes pueden segmentar la


secuencia de procesamiento (arquitectura en pipeline). Esto
significa que el grafo puede empezar a escribir datos en la salida
incluso antes de que haya leído todos los registros de entrada del
origen.

Algunos componentes, tales como SORT, no pueden producir


ningún registro de salida mientras que no se hayan procesado
todos los registros de entrada. Para SORT, no hay manera de saber
cuál debería ser el primer registro de salida hasta que todos los
registros de entrada hayan sido examinados. Estos componentes
'interrumpen' el paralelismo de flujo.

Paralelismo de componentes
Los componentes también pueden ejecutarse en paralelo
procesando datos en 'ramas’ separadas. Dependiendo de la
arquitectura del grafo, esos flujos de datos pueden o no
combinarse corriente abajo. Independientemente de ello, esto se
llama "paralelismo de componentes". En el grafo siguiente, la
rama superior lee datos desde el archivo Customers, vuelve a
formatear los nombres de clientes y desduplica esos registros
según Customer_id. Al mismo tiempo, la rama inferior lee
transacciones desde un archivo, las limpia y calcula los totales de
facturación. Los registros fluyen a través de las ramas superior e
inferior simultáneamente antes de combinarse.
Paralelismo de datos
Al utilizar layouts con paralelismo de datos, los datos se pueden
procesar simultáneamente en varios flujos. Los grafos con
orígenes de datos en serie utilizan componentes de
particionamiento para crear los flujos de datos en paralelo. Los
grafos con destinos de datos en serie utilizan componentes de
desparticionamiento para combinar los flujos de datos en paralelo.
En el grafo siguiente, el componente PARTITION BY ROUND-ROBIN
lee datos desde un origen en serie y distribuye los registros a
particiones de flujo separadas. El número de particiones viene
determinado por el layout del componente Filter (etiquetado "L1"),
que se propaga a los componentes Deduplicate, Cleanse y Score
(etiquetados "L1*"). Todos esos componentes se ejecutan con
layouts con paralelismo de datos. Finalmente, el componente
GATHER desparticiona los flujos y el conjunto de datos Updated
Customers se escribe en un archivo serial en el disco. Note los
flujos de abanico de salida y entrada, que indican visualmente
dónde se están particionando y desparticionando los registros.
La primera imagen a continuación proporciona una "vista global"
de un grafo sencillo que se ejecuta completamente con layouts
con paralelismo de datos. La vista global es lo que se ve en el
GDE. En este grafo, tanto el origen como el destino de datos son
multiarchivos y ambos componentes tienen layouts con
paralelismo de datos. Vamos a suponer que ambos layouts, L1 y
L2, tienen 3 particiones.

La segunda imagen a continuación proporciona una "vista


expandida" del aspecto que tendría. Esto es lo que hace el
Co>Operating System cuando se ejecuta el grafo. El archivo de
origen tiene 3 particiones, cada una de las cuales se lee
independientemente al mismo tiempo. Se ejecutan tres instancias
de los componentes SORT y REFORMAT. El archivo de salida
también tiene tres partes, de modo que cada una de las tres
particiones del componente ROLLUP también puede escribir sus
salidas simultáneamente. Las particiones no se comunican ni
comparten datos entre sí. Es decir, la partición 1 de SORT no
comparte datos con la partición 2 de SORT ni se comunica con
ella. La salida de un componente SORT con paralelismo de datos
no está ordenada globalmente. En su lugar, la partición 1 de SORT
ordena registros de entrada localmente solo dentro de esa
partición, la partición 2 hace lo mismo, y así sucesivamente. Esta
forma de procesamiento en paralelo se llama paralelismo 'shared-
nothing' (cada partición es independiente y autosuficiente).
¿Por qué el paralelismo?
Bookmark this page
El objetivo del paralelismo es procesar más datos en menos
tiempo. Para lograr este objetivo, todas las formas de paralelismo
(de flujo, de componentes y de datos) aumentan el consumo de
recursos durante la ejecución del grafo. Los grafos que utilizan el
paralelismo para procesar más datos en menos tiempo requieren
más consumo de CPU, de memoria, de ancho de banda de red y así
sucesivamente. En particular, el paralelismo de datos a menudo
requiere el uso de componentes adicionales para particionar,
desparticionar o reparticionar datos.

Entonces, ¿por qué utilizar el paralelismo?

Porque, de no existir una contención de recursos, el paralelismo


puede reducir significativamente el tiempo de ejecución del grafo.
En particular, el paralelismo de datos es escalable. Suponiendo
que se cuenta con los recursos necesarios, un grafo que ejecuta
sus componentes con layouts con 16 niveles de paralelismo tendrá
una rapidez casi 16 veces mayor que si se ejecutan los mismos
componentes en serie. Es decir, un grafo que demora 16 horas en
ejecutarse con layouts seriales se completaría en poco más de 1
hora si los componentes se ejecutaran con 16 niveles de
paralelismo. Esto resulta de sumo valor especialmente cuando el
grafo procesa volúmenes altos de datos.

repaso de sistemas multiarchivo


Bookmark this page
Un sistema multiarchivo de Ab Initio (MFS, por sus siglas en
inglés) es una estructura de directorio que permite el paralelismo
de datos en grafos. Según aprendió en la sección "Uso de
multiarchivos" del curso Grafos básicos (GD101), el Co>Operating
System entiende cómo leer y escribir en el MFS, y los
multiarchivos son exclusivos de los sistemas de multiarchivo de
Ab Initio. La prueba siguiente pone a prueba sus conocimientos de
multiarchivos y de sistemas multiarchivo, los cuales son
sumamente importantes para el diseño de grafos paralelos.

principios de diseño para grafos paralelos

Hablemos de los principios de diseño que se aplican a los gráficos paralelos.


El primer principio es "Ir en paralelo lo antes posible", el corolario será "Mantenerse en paralelo lo
más tarde posible".
Aquí podemos ver un diseño eficiente e ineficiente.
El diseño ineficiente procesa todos los registros a través de este componente de filtro.
antes de la partición; en el diseño eficiente, particionamos antes de procesar con el componente
Filtro.
Pero, ¿cuántos registros estamos filtrando?
Serían todos ellos.
A diferencia de lo que sucede en el segundo gráfico, donde dividimos primero, por lo que el filtro
está ejecutando dos copias o N copias si estamos ejecutando N vías en paralelo.
Así que sacamos más provecho de nuestro filtro; estamos obteniendo más paralelismo en ese
punto.
Ahora queremos permanecer en paralelo el mayor tiempo posible.
En este ejemplo en particular, el primer gráfico lo divide con Gather,
y el segundo gráfico lee el archivo que ahora es serial y lo particiona por segunda vez.
Podemos evitar todo ese trabajo adicional simplemente dejándolo como un multifile.
Esto funciona siempre que ningún gráfico que no sea de Ab Initio necesite acceder a los datos.
Si todos los puntos de acceso son a través de gráficos Ab Initio, entonces estás en buena forma.

También podría gustarte