• No se han encontrado resultados

Técnicas de movimiento de datos de almacén de HADOOP

In document hadoop (página 38-47)

7.3 Usar efectivamente las utilidades de movimiento de datos de HADOOP

7.3.4 Técnicas de movimiento de datos de almacén de HADOOP

7.3.4.1 Técnica #1

Exportar datos en el servidor de base de datos local, transferir el archivo de datos y cargar datos localmente en el servidor de base de datos de destino (tablas pequeñas con particionamiento de hash o sin partición de hash)

1. Conéctese a SourceDB localmente en el servidor de base de datos de origen.

CONNECT TO SourceDB;

2. Realice una exportación de HADOOP en la tabla en el servidor de base de datos de origen.

EXPORT TO DATAMARTS.SCENARIO_CALENDAR.DEL OF DEL MESSAGES DATAMARTS.SCENARIO_CALENDAR.MSG

SELECT * FROM DATAMARTS.SCENARIO_CALENDAR;

3. Comprima el archivo exportado para reducir el tiempo requerido para la transferencia de archivos entre los servidores.

gzip DATAMARTS.SCENARIO_CALENDAR F.DEL

4. Transfiera el archivo comprimido del servidor SourceDB al servidor TargetDB usando sftp o scp.

cd <export file path>

sftp username@<targetDB Server hostname> put DATAMARTS.SCENARIO_CALENDAR.DEL.gz OR

scp DATAMARTS.SCENARIO_CALENDAR.DEL.gz username@<targetDB Server hostname>:/<PATH>

5. Descomprima el archivo transferido en el servidor de base de datos de destino.

gunzip DATAMARTS.SCENARIO_CALENDAR.DEL.gz

6. Conéctese a TargetDB localmente en el servidor de base de datos de destino.

CONNECT TO TargetDB;

7. Realice una carga o importación.

LOAD FROM DATAMARTS.SCENARIO_CALENDAR.DEL OF DEL SAVECOUNT 10000 MESSAGES

DATAMARTS.SCENARIO_CALENDAR.LOAD.MSG INSERT INTO DATAMARTS.SCENARIO_CALENDAR;

8. En el caso del comando de carga, ejecute SET INTEGRITY al final de la operación.

9. Ejecute RUNSTATS para mantener las estadísticas actualizadas.

RUNSTATS ON TABLE DATAMARTS.SCENARIO_CALENDAR WITH DISTRIBUTION AND DETAILED INDEXES

ALL;

7.3.4.2 Técnica #2

Exportar datos del servidor de base de datos local y cargar datos remotamente al servidor de base de datos de destino.

Siga estas etapas para implementar esta técnica.

1. Catalogue la base de datos de destino en el servidor de base de datos de origen.

CATALOG TCPIP NODE TargetND REMOTE TargetDBServer.ibm.com SERVER 50001; CATALOG DATABASE TargetDB AT NODE TargetND;

2. Conéctese a SourceDB localmente en el servidor de base de datos de origen. CONNECT TO SourceDB;

3. Realice una exportación de HADOOP desde la tabla en el servidor de base de datos de origen.

EXPORT TO DATAMARTS.SCENARIO_CALENDAR.DEL OF DEL MESSAGES DATAMARTS.SCENARIO_CALENDAR.msg

SELECT * FROM DATAMARTS.SCENARIO_CALENDAR;

4. Conéctese a TargetDB remotamente en el servidor de base de datos de destino.

CONNECT TO TargetDB user <username> using <Password>;

5. Realice una carga o importación remotamente del origen al destino.

LOAD CLIENT FROM DATAMARTS.SCENARIO_CALENDAR.DEL OF DEL SAVECOUNT 10000 MESSAGES

DATAMARTS.SCENARIO_CALENDAR.LOAD.msg INSERT INTO DATAMARTS.SCENARIO_CALENDAR;

6. En el caso del comando de carga, ejecute SET INTEGRITY al final de la operación.

SET INTEGRITY FOR DATAMARTS.SCENARIO_CALENDAR IMMEDIATE CHECKED;

7. Ejecute RUNSTATS para mantener las estadísticas actualizadas.

RUNSTATS ON TABLE DATAMARTS.SCENARIO_CALENDAR WITH DISTRIBUTION AND DETAILED INDEXES ALL;

7.3.4.3 Técnica #3

Exportar datos del servidor de base de datos remoto y cargar datos localmente al servidor de base de datos de destino.

Siga estas etapas para implementar esta técnica.

1. Catalogue la base de datos de origen en el servidor de base de datos de destino.

CATALOG TCPIP NODE SourceND REMOTE SourceDBServer.ibm.com SERVER 50001; CATALOG DATABASE SourceDB AT NODE SourceND;

2. Conéctese a la base de datos de origen remotamente desde el servidor de destino. CONNECT TO SourceDB user <username> using <password>;

3. Realice una exportación de HADOOP desde la tabla remotamente.

EXPORT TO DATAMARTS.SCENARIO_CALENDAR.DEL OF DEL MESSAGES DATAMARTS.SCENARIO_CALENDAR.msg

SELECT * FROM DATAMARTS.SCENARIO_CALENDAR;

4. Conéctese a TargetDB localmente en el servidor de base de datos de destino. CONNECT TO TargetDB user <username> using <Password>;

5. Realice una importación o carga local.

LOAD FROM DATAMARTS.SCENARIO_CALENDAR.DEL OF DEL SAVECOUNT 10000

DATAMARTS.SCENARIO_CALENDAR.LOAD.msg INSERT INTO DATAMARTS.SCENARIO_CALENDAR;

6. En el caso del comando de carga, ejecute SET INTEGRITY al final de la operación.

SET INTEGRITY FOR DATAMARTS.SCENARIO_CALENDAR IMMEDIATE CHECKED;

7. Ejecute RUNSTATS para mantener las estadísticas actualizadas.

RUNSTATS ON TABLE DATAMARTS.SCENARIO_CALENDAR WITH DISTRIBUTION AND DETAILED INDEXES ALL;

7.3.4.4 Técnica #4

Exportar datos a un conducto de sistema operativo y cargar datos del conducto al servidor de base de datos remota de destino.

Siga estas etapas para implementar esta técnica.

1. Catalogue la base de datos de origen en el servidor de base de datos de destino:

CATALOG TCPIP NODE SourceND REMOTE SourceDBServer.ibm.com SERVER 50001; CATALOG DATABASE SourceDB AT NODE SourceND;

2. Cree un conducto de sistema operativo en el servidor de base de datos de destino.

mkfifo datapipe ls –ltr datapipe

prw-r--r-- 1 bculinux bcuigrp 0 2011-09-18 16:32 datapipe

3. Conéctese a la base de datos de origen remotamente desde el servidor de destino.

CONNECT TO SourceDB user <username> using <password>;

4. Exporte datos de la base de datos de origen y grábelos en un lado del conducto de SO (datapipe). En el escenario empresarial, el equipo de administración de la base de datos renovó UAT desde PROD. sólo para el periodo de 2011 de los registros 12904084.

EXPORT TO datapipe OF DEL MODIFIED BY COLDEL, MESSAGES FACT_CUST_FPI_VALIDATION.EXP.msg SELECT * FROM

DATAMARTS.F_CUST_FPI_VALIDATION

WHERE REC_LOAD_DT > '2011-01-01-00.00.00.000000' WITH UR;

5. Conéctese a la base de datos de origen remotamente desde el servidor de destino.

CONNECT TO TargetDB user <username> using <password>;

6. Importe o cargue datos de otro lado del conducto de SO en una tabla de intervalos particionados de hash regular.

IMPORT FROM datapipe OF DEL MODIFIED BY COLDEL, MESSAGES FACT_CUST_FPI_VALIDATION.IMP.msg INSERT INTO

DATAMARTS.FACT_CUST_FPI_VALIDATION;

LOAD FROM datapipe OF DEL MODIFIED BY COLDEL, MESSAGES FACT_CUST_FPI_VALIDATION.LD.msg INSERT INTO

DATAMARTS.FACT_CUST_FPI_VALIDATION;

Nota: tenga cuidado al usar el comando de carga en una base de datos particionada que tenga muchas particiones de intervalo. La carga puede fallar con SQLCODE SQL0973N y puede perder datos en la tabla de destino.

Tome una instantánea de la aplicación en la base de datos de destino. Verá una inserción ocurriendo en la tabla del servidor de base de datos de destino. Hasta que la transferencia de datos esté completa, verá la exportación hacia el conducto y la importación desde el conducto ejecutándose en el servidor.

Los siguientes listados resumen el estado en el origen y el destino después de completarse: Listado 1. Desde la conexión de base de datos de origen

HADOOP "EXPORT TO datapipe OF DEL MODIFIED BY COLDEL, MESSAGES FPI_VALIDATION.EXP.msg

SELECT * FROM DATAMARTS.F_CUST_FPI_VALIDATION WHERE REC_LOAD_DT >

'2011-01-01-00.00.00.000000' WITH UR" Number of rows exported: 12904084

Listado 2. Desde la conexión de base de datos de destino

HADOOP "IMPORT FROM datapipe OF DEL MODIFIED BY COLDEL, MESSAGES FPI_VALIDATION.IMP.msg INSERT INTO

Number of rows read = 12904084 Number of rows skipped = 0

Number of rows inserted = 12904084 Number of rows updated = 0 Number of rows rejected = 0

Number of rows committed = 12904084

Para eliminar el conducto de sistema operativo después de la finalización, use el siguiente comando:

rm datapipe

Limitaciones y soluciones para la técnica #4

Al cargar datos en una tabla con muchos intervalos particionados en un entorno particionado de base de datos, puede encontrar el siguiente error.

SQL0973N Not enough storage is available in the "UTIL_HEAP_SZ" heap to process the statement. SQLSTATE=57011

Estas son algunas formas de solucionar este problema:

1) Incremente el valor del parámetro de configuración de base de datos UTIL_HEAP_SZ a un máximo de 524288 páginas con un tamaño de páginas de 4K. Después fuerce todas las aplicaciones y reactive la base de datos.

2) Disminuya el número de DATA BUFFER mientras carga los datos.

3) Si las dos etapas anteriores no le permiten completar la carga, realice una finalización de carga.

4) Cree una tabla temporal DATAMARTS.FACT_CUST_FPI_VALIDATION_TMP sin particiones de intervalo y realice una carga en la tabla temporal desde el conducto con una cláusula no recuperable para hacer la carga más rápida.

5) Después de la finalización, ejecute INSERT INTO ... SELECT * FROM.... Puede ejecutar una inserción NOT LOGGED INITIALLY para mejorar el rendimiento de las cargas de datos. El listado a continuación muestra dicha inserción.

Listado 3. Inserciones NOT LOGGED INITIALLY

HADOOP +c "ALTER TABLE DATAMARTS.FACT_CUST_FPI_VALIDATION ACTIVATE NOT LOGGED INITIALLY"

HADOOP "INSERT INTO DATAMARTS.FACT_CUST_FPI_VALIDATION SELECT * FROM DATAMARTS.FACT_CUST_FPI_VALIDATION_TMP"

Nota: si una inserción NOT LOGGED INITIALLY falla por alguna razón, debe volver a crear la tabla.

7.3.4.5 Técnica #5

Exportar datos en el servidor de base de datos local, transferir el archivo de datos y cargar datos localmente en el servidor de base de datos de destino (tablas pequeñas con particionamiento de hash o sin partición de hash).

En el servidor de base de datos de origen, realice las siguientes etapas para exportar datos.

1. Cree enlaces dinámicos desde el directorio de exportación de nodo de admin hacia todos los nodos de datos. En este ejemplo, el directorio de exportación es

$HOME/HADOOPbackup/exports.

ln -s /HADOOPfs/bculinux/NODE0001 NODE1 ln -s /HADOOPfs/bculinux/NODE0002 NODE2 ...

ln -s /HADOOPfs/bculinux/NODE0040 NODE40

2. El siguiente listado muestra los archivos resultantes después de crear los enlaces dinámicos.

ls –ltr

lrwxrwxrwx 1 bculinux bcuigrp 24 2011-04-13 19:25 NODE1 -> /HADOOPfs/bculinux/NODE0001

lrwxrwxrwx 1 bculinux bcuigrp 24 2011-04-13 19:25 NODE2 -> /HADOOPfs/bculinux/NODE0002

...

lrwxrwxrwx 1 bculinux bcuigrp 24 2011-04-13 19:28 NODE40 -> /HADOOPfs/bculinux/NODE0040

3. En cada servidor de nodo de datos físico, cree una estructura de directorios similar a esta. mkdir –p /HADOOPfs/bculinux/NODE0001/exports/datamarts mkdir –p /HADOOPfs/bculinux/NODE0002/exports/datamarts ... mkdir –p /HADOOPfs/bculinux/NODE0040/exports/datamarts 4. Encuentre las columnas de partición de hash en SYSCAT.COLUMNS para la tabla que necesita ser exportada. HADOOP "SELECT SUBSTR(COLNAME,1,20) COLNAME, PARTKEYSEQ FROM SYSCAT.COLUMNS WHERE TABNAME=''F_CUST_PROFTBLTY_TMP' AND TABSCHEMA='DATAMARTS'" COLNAME PARTKEYSEQ --- --- ACCT_KEY 0 BUSS_UNIT_KEY 1 CALENDAR_MONTH_KEY 2 CRNCY_CODE 0

En esta tabla tenemos dos columnas de partición de hash. Elegimos una de las columnas de hash para exportar datos en la partición respectiva.

5. Exporte datos en todas las particiones en paralelo usando el comando HADOOP EXPORT como se muestra en este listado.

HADOOP_all "\"|| HADOOP \"EXPORT TO

$HOME/HADOOPbackup/exports/NODE##/exports/datamarts/

DATAMARTS.F_CUST_PROFTBLTY_TMP.del OF DEL SELECT * FROM DATAMARTS.F_CUST_PROFTBLTY_TMP WHERE DBPARTITIONNUM (BUSS_UNIT_KEY)=##\""

Este comando exporta cada dato de partición en nodos de partición respectivos.

6. Realice la copia de archivos de cada nodo de servidor de base de datos de origen en el servidor de base de datos de destino usando scp.

scp -p <File Name> <User Name>@<Host Name>:<File Name>

En el servidor de base de datos de destino, realice las siguientes etapas para exportar los datos.

1) Cree enlaces dinámicos como se ilustra en la base de datos de origen, como se muestra en el Listado 4.

2) Cargue desde cada conjunto de datos de partición en paralelo usando el comando de carga de HADOOP.

Listado 4. Comando LOAD paralelo

HADOOP_all "<<-0<<\" HADOOP -v \"LOAD FROM HADOOPbackup/exports/NODE##/exports/datamarts

DATAMARTS.F_CUST_PROFTBLTY_TMP.del OF DEL INSERT INTO DATAMARTS.F_CUST_PROFTBLTY_TMP NONRECOVERABLE \""

Este comando cargaría cada conjunto de datos de partición en nodos de partición respectivos

In document hadoop (página 38-47)

Documento similar