Migración de datos entre clústeres de DWS mediante GDS
Esta práctica demuestra cómo migrar 15 millones de filas de datos entre dos clústeres de DWS en cuestión de minutos, basándose en la alta concurrencia de importación y exportación de GDS.
- Esta función solo es compatible con clústeres de la versión 8.1.2 o posterior.
- GDS es una herramienta de importación y exportación de alta concurrencia desarrollada por DWS. Para obtener más información, consulte Guía de uso de GDS.
- Esta sección describe solo la práctica de operación. Para obtener más información sobre la interconexión de GDS y la descripción de la sintaxis, consulte Interconexión entre clústeres basada en GDS.
Esta práctica dura unos 90 minutos. Los servicios en la nube utilizados en esta práctica son DWS, Elastic Cloud Server (ECS) y Virtual Private Cloud (VPC). El proceso básico es el siguiente:
- Requisitos previos
- Paso 1: Creación de dos clústeres de DWS
- Paso 2: Preparación de los datos de origen
- Paso 3: Instalación e inicio del servidor GDS
- Paso 4: Implementación de la interconexión de datos entre clústeres de DWS
Regiones admitidas
La Tabla 1 describe las regiones donde se han cargado los datos de OBS.
| Región | Bucket de OBS |
|---|---|
| CN North-Beijing1 | dws-demo-cn-north-1 |
| CN North-Beijing2 | dws-demo-cn-north-2 |
| CN North-Beijing4 | dws-demo-cn-north-4 |
| CN North-Ulanqab1 | dws-demo-cn-north-9 |
| CN East-Shanghai1 | dws-demo-cn-east-3 |
| CN East-Shanghai2 | dws-demo-cn-east-2 |
| CN South-Guangzhou | dws-demo-cn-south-1 |
| CN South-Guangzhou-InvitationOnly | dws-demo-cn-south-4 |
| CN-Hong Kong | dws-demo-ap-southeast-1 |
| AP-Singapore | dws-demo-ap-southeast-3 |
| AP-Bangkok | dws-demo-ap-southeast-2 |
| LA-Santiago | dws-demo-la-south-2 |
| AF-Johannesburg | dws-demo-af-south-1 |
| LA-Mexico City1 | dws-demo-na-mexico-1 |
| LA-Mexico City2 | dws-demo-la-north-2 |
| RU-Moscow2 | dws-demo-ru-northwest-2 |
| LA-Sao Paulo1 | dws-demo-sa-brazil-1 |
Restricciones
En esta práctica, se despliegan dos conjuntos de servicios DWS y ECS en la misma región y VPC para garantizar la conectividad de red.
Requisitos previos
- Ha obtenido el AK y el SK de la cuenta.
- Ha creado una VPC y una subred. Para obtener más información, consulte Creación de una VPC.
Paso 1: Creación de dos clústeres de DWS
Cree dos clústeres de DWS. Para obtener más información, consulte Creación de un clúster. Se recomienda crear los clústeres en la región CN-Hong Kong. Nombre los dos clústeres dws-demo01 y dws-demo02.
Paso 2: Preparación de los datos de origen
- Inicie sesión en la consola de DWS y seleccione Clusters en el panel de navegación. En la lista de clústeres, localice el clúster dws-demo01 y haga clic en Login en la columna Operation.
Este modo de inicio de sesión solo está disponible para clústeres de la versión 8.1.3.x. Para los clústeres de la versión 8.1.2 o anterior, debe usar gsql para iniciar sesión.
- Una vez que el inicio de sesión se realiza correctamente, se muestra el editor SQL.
- Copie las siguientes sentencias SQL en la ventana SQL y haga clic en Execute SQL para crear la tabla de prueba TPC-H ORDERS.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
CREATE TABLE ORDERS ( O_ORDERKEY BIGINT NOT NULL , O_CUSTKEY BIGINT NOT NULL , O_ORDERSTATUS CHAR(1) NOT NULL , O_TOTALPRICE DECIMAL(15,2) NOT NULL , O_ORDERDATE DATE NOT NULL , O_ORDERPRIORITY CHAR(15) NOT NULL , O_CLERK CHAR(15) NOT NULL , O_SHIPPRIORITY BIGINT NOT NULL , O_COMMENT VARCHAR(79) NOT NULL) with (orientation = column) distribute by hash(O_ORDERKEY) PARTITION BY RANGE(O_ORDERDATE) ( PARTITION O_ORDERDATE_1 VALUES LESS THAN('1993-01-01 00:00:00'), PARTITION O_ORDERDATE_2 VALUES LESS THAN('1994-01-01 00:00:00'), PARTITION O_ORDERDATE_3 VALUES LESS THAN('1995-01-01 00:00:00'), PARTITION O_ORDERDATE_4 VALUES LESS THAN('1996-01-01 00:00:00'), PARTITION O_ORDERDATE_5 VALUES LESS THAN('1997-01-01 00:00:00'), PARTITION O_ORDERDATE_6 VALUES LESS THAN('1998-01-01 00:00:00'), PARTITION O_ORDERDATE_7 VALUES LESS THAN('1999-01-01 00:00:00') );
- Ejecute las sentencias SQL siguientes para crear una tabla externa de OBS. Replace AK and SK with the actual AK and SK of the account. <obs_bucket_name> is obtained from Regiones admitidas.
El uso de AK y SK codificadas de forma rígida (hard-coded) o en texto plano representa un riesgo de seguridad. Por seguridad, encripte su AK/SK y guárdelas en el archivo de configuración o en las variables de entorno.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
CREATE FOREIGN TABLE ORDERS01 ( LIKE orders ) SERVER gsmpp_server OPTIONS ( ENCODING 'utf8', LOCATION 'obs://<obs_bucket_name>/tpch/orders.tbl', FORMAT 'text', DELIMITER '|', ACCESS_KEY 'access_key_value_to_be_replaced', SECRET_ACCESS_KEY 'secret_access_key_value_to_be_replaced', CHUNKSIZE '64', IGNORE_EXTRA_DATA 'on' );
- Ejecute la sentencia SQL a continuación para importar datos de la tabla externa de OBS al clúster de DWS de origen. La importación tarda aproximadamente 2 minutos.
Si se produce un error de importación, los valores de AK y SK de la tabla externa son incorrectos. En este caso, ejecute DROP FOREIGN TABLE order01 para eliminar la tabla externa, vuelva a crear una tabla externa y ejecute la siguiente sentencia para importar datos de nuevo.
1INSERT INTO orders SELECT * FROM orders01;
- Repita los pasos anteriores para iniciar sesión en el clúster de destino dws-demo02 y ejecute las siguientes sentencias SQL para crear la tabla de destino orders.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
CREATE TABLE ORDERS ( O_ORDERKEY BIGINT NOT NULL , O_CUSTKEY BIGINT NOT NULL , O_ORDERSTATUS CHAR(1) NOT NULL , O_TOTALPRICE DECIMAL(15,2) NOT NULL , O_ORDERDATE DATE NOT NULL , O_ORDERPRIORITY CHAR(15) NOT NULL , O_CLERK CHAR(15) NOT NULL , O_SHIPPRIORITY BIGINT NOT NULL , O_COMMENT VARCHAR(79) NOT NULL) with (orientation = column) distribute by hash(O_ORDERKEY) PARTITION BY RANGE(O_ORDERDATE) ( PARTITION O_ORDERDATE_1 VALUES LESS THAN('1993-01-01 00:00:00'), PARTITION O_ORDERDATE_2 VALUES LESS THAN('1994-01-01 00:00:00'), PARTITION O_ORDERDATE_3 VALUES LESS THAN('1995-01-01 00:00:00'), PARTITION O_ORDERDATE_4 VALUES LESS THAN('1996-01-01 00:00:00'), PARTITION O_ORDERDATE_5 VALUES LESS THAN('1997-01-01 00:00:00'), PARTITION O_ORDERDATE_6 VALUES LESS THAN('1998-01-01 00:00:00'), PARTITION O_ORDERDATE_7 VALUES LESS THAN('1999-01-01 00:00:00') );
Paso 3: Instalación e inicio del servidor GDS
- Cree un ECS. Asegúrese de que el ECS y el DWS se creen en la misma región y VPC. En este ejemplo, se utiliza la imagen CentOS 7.6.
- Descargue el paquete GDS.
- Inicie sesión en la consola de DWS.
- En el árbol de navegación de la izquierda, seleccione Management > Client Connections.
- Seleccione el cliente GDS de la versión de destino en la lista desplegable de CLI Client.
Seleccione una versión basada en la versión del clúster y el sistema operativo donde se instala el cliente.
- Haga clic en Download.
- Utilice la herramienta SFTP para cargar el cliente descargado (por ejemplo, dws_client_8.2.x_redhat_x64.zip) en el /opt directory del ECS.
- Inicie sesión en el ECS como usuario root y ejecute los siguientes comandos para ir al directorio /opt y descomprimir el paquete del cliente.
1 2
cd /opt unzip dws_client_8.2.x_redhat_x64.zip
- Cree un usuario GDS y el grupo de usuarios al que pertenece el usuario. Este usuario se utiliza para iniciar GDS y leer los datos de origen.
1 2
groupadd gdsgrp useradd -g gdsgrp gds_user
- Cambie el propietario del directorio del paquete GDS y del directorio de archivos de datos de origen al usuario GDS.
1 2
chown -R gds_user:gdsgrp /opt/gds/bin chown -R gds_user:gdsgrp /opt
- Cambie al usuario gds.
1su - gds_user
- Ejecute los siguientes comandos para ir al directorio gds y ejecutar las variables de entorno.
1 2
cd /opt/gds/bin source gds_env
- Ejecute el siguiente comando para iniciar GDS. Puede ver la dirección IP privada del ECS en la consola de ECS.
1/opt/gds/bin/gds -d /opt -p Private IP address of the ECS:5000 -H 0.0.0.0/0 -l /opt/gds/bin/gds_log.txt -D -t 2

- Habilite el puerto de red entre el ECS y el DWS.
El servidor GDS (ECS en esta práctica) debe comunicarse con DWS. El grupo de seguridad predeterminado del ECS no permite el tráfico entrante desde el puerto 5000 de GDS y el puerto 8000 de DWS. Realice los siguientes pasos:
- Vuelva a la consola de ECS y haga clic en el nombre del ECS para ir a la página de detalles del ECS.
- Haga clic en la pestaña Security Groups y haga clic en Manage Rule.
- Seleccione Inbound Rules y haga clic en Add Rule. Establezca Priority en 1, establezca Protocol & Port en 5000 y haga clic en OK.

- Repita los pasos anteriores para agregar una regla de entrada de 8000.
Paso 4: Implementación de la interconexión de datos entre clústeres de DWS
- Cree un servidor.
- Obtenga la dirección IP privada del clúster de DWS de origen. Específicamente, vaya a la consola de DWS, seleccione Dedicated Clusters > Clusters y haga clic en el nombre del clúster de origen dws-demo01.
- Vaya a la página de detalles del clúster y registre la dirección IP de la red privada.
- Vuelva a la consola de DWS y haga clic en Log In en la columna Operation del clúster de destino dws-demo02. Se muestra la ventana SQL.
Ejecute los comandos siguientes para crear un servidor.
En los comandos, Private network IP address of the source DWS cluster se obtiene en el paso anterior, Private IP address of the ECS se obtiene de la consola de ECS y Login password of user dbadmin se establece cuando se crea el clúster de DWS.
1 2 3 4 5 6 7 8 9
CREATE SERVER server_remote FOREIGN DATA WRAPPER GC_FDW OPTIONS ( address 'Private network IP address of the source DWS cluster:8000', dbname 'gaussdb', username 'dbadmin', password 'Login password of user dbadmin', syncsrv 'gsfs://Private IP address of the ECS:5000' ) ;
- Cree una tabla externa para la interconexión.
En la ventana SQL del cluster de destino dws-demo02, ejecute las siguientes sentencias para crear una tabla externa para la interconexión:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
CREATE FOREIGN TABLE ft_orders ( O_ORDERKEY BIGINT , O_CUSTKEY BIGINT , O_ORDERSTATUS CHAR(1) , O_TOTALPRICE DECIMAL(15,2) , O_ORDERDATE DATE , O_ORDERPRIORITY CHAR(15) , O_CLERK CHAR(15) , O_SHIPPRIORITY BIGINT , O_COMMENT VARCHAR(79) ) SERVER server_remote OPTIONS ( schema_name 'public', table_name 'orders', encoding 'SQL_ASCII' );
- Importe todos los datos de la tabla.
En la ventana SQL, ejecute la siguiente sentencia SQL para importar todos los datos de la tabla externa ft_orders: Espere aproximadamente 1 minuto.
1INSERT INTO orders SELECT * FROM ft_orders;
Ejecute la siguiente sentencia SQL para verificar que se hayan importado 15 millones de filas de datos.
1SELECT count(*) FROM orders;
- Importe datos según los criterios de filtrado.
1INSERT INTO orders SELECT * FROM ft_orders WHERE o_orderkey < '10000000';
