Un origen de datos de Hive le permite leer y escribir datos en Hive. Este tema describe cómo DataWorks sincroniza los datos de Hive.
Funcionamiento
Hive es una herramienta de almacenamiento de datos construida sobre Hadoop que se utiliza para el análisis estadístico de registros estructurados a gran escala. Hive asigna archivos de datos estructurados a tablas y ofrece capacidades de consulta SQL. Funciona como un motor de análisis SQL que usa MapReduce para analizar datos, HDFS para almacenarlos y YARN para ejecutar los programas de MapReduce convertidos desde HiveQL (HQL).
El plugin Hive Reader accede al servicio HiveMetastore para obtener los metadatos de las tablas que configuró. Los datos se pueden leer de dos maneras:
-
Lectura de datos mediante archivos de HDFS
El plugin Hive Reader accede al servicio HiveMetastore para obtener la ruta de almacenamiento del archivo de HDFS, el formato de archivo y los delimitadores de la tabla configurada. Después, el plugin lee los datos directamente de los archivos subyacentes de HDFS.
-
Lectura de datos mediante una conexión JDBC de Hive
El plugin Hive Reader se conecta al servicio HiveServer2 para leer los datos. Este método admite el filtrado de datos con una cláusula where y permite leer los datos directamente mediante instrucciones SQL.
El plugin Hive Writer accede al servicio HiveMetastore para obtener información como la ruta de almacenamiento del archivo de HDFS, el formato de archivo y los delimitadores de la tabla configurada. Escribe los datos en archivos de HDFS y luego ejecuta una instrucción LOAD DATA SQL a través de un cliente JDBC de Hive para cargar los datos de los archivos de HDFS en la tabla de Hive.
La lógica subyacente del plugin Hive Writer es la misma que la del plugin HDFS Writer. Es posible configurar parámetros de HDFS Writer en el plugin Hive Writer, los cuales se transmiten después al plugin HDFS Writer.
Versiones compatibles
Límites
El origen de datos de Hive admite Serverless resource groups (recomendado) y exclusive resource groups for Data Integration.
Para las lecturas, solo se admiten los formatos TextFile, ORCFile y ParquetFile.
-
Durante una sincronización sin conexión hacia un clúster de Hive, Data Integration crea archivos temporales en el servidor. Estos archivos se eliminan automáticamente cuando finaliza la tarea de sincronización. Supervise la cantidad de archivos en el directorio de HDFS para evitar que alcance el límite máximo, ya que esto podría dejar el sistema de archivos de HDFS no disponible. DataWorks no garantiza que la cantidad de archivos se mantenga dentro del límite del directorio de HDFS.
NotaEn el servidor, modifique el parámetro dfs.namenode.fs-limits.max-directory-items para definir la cantidad máxima de directorios o archivos no recursivos dentro de un solo directorio. El valor predeterminado es 1,048,576 y puede oscilar entre 1 y 6,400,000. Para resolver este problema, aumente el valor del parámetro de HDFS dfs.namenode.fs-limits.max-directory-items o elimine los archivos innecesarios.
Al acceder a un origen de datos de Hive, actualmente se admite la autenticación Kerberos y la
SSL authentication. Si no requiere autenticación, seleccione No Authentication en Authentication Method cuando agregue un nuevo origen de datos.-
Si usa DataWorks para acceder a un origen de datos de Hive con autenticación Kerberos, y tanto HiveServer2 como el metastore tienen habilitada esta autenticación pero usan principals distintos, agregue la siguiente configuración en el campo Extension Parameters:
{ "hive.metastore.kerberos.principal": "<your metastore principal>" }
Tipos de datos compatibles
El plugin Hive Reader admite los siguientes tipos de datos:
|
Categoría |
Tipo de dato de Hive |
|
Cadena |
CHAR, VARCHAR, STRING |
|
Entero |
TINYINT, SMALLINT, INT, INTEGER, BIGINT |
|
Punto flotante |
FLOAT, DOUBLE, DECIMAL |
|
Fecha y hora |
TIMESTAMP, DATE |
|
Booleano |
BOOLEAN |
Requisitos previos
Los requisitos previos varían según el modo de configuración del origen de datos.
Modo de instancia de Alibaba Cloud
Si desea sincronizar una tabla basada en OSS, seleccione una Access Identity. Puede usar una Alibaba Cloud Account, un Alibaba Cloud RAM User o un RAM Role. Asegúrese de que la identidad seleccionada tenga los permisos de OSS obligatorios. De lo contrario, la sincronización de datos fallará por falta de permisos de lectura y escritura.
La prueba de conectividad no verifica los permisos de lectura y escritura de datos.
Modo de cadena de conexión
Data Lake Formation (DLF)
Si su origen de datos de Hive es un clúster de EMR que usa Data Lake Formation (DLF) para gestionar metadatos, agregue lo siguiente en el campo Extension Parameters cuando configure el origen de datos:
{"dlf.catalog.id" : "my_catalog_xxxx"}
Reemplace my_catalog_xxxx con el valor del parámetro dlf.catalog.id de su configuración de Hive en EMR.
Alta disponibilidad (HA)
Si el clúster de Hive de EMR que desea sincronizar tiene habilitada la high availability (HA) (alta disponibilidad), habilite el interruptor Enable High Availability Mode y configure la información relacionada con HA en la sección Extension Parameters con el siguiente formato. Para obtener los valores de configuración correspondientes, vaya a la consola de EMR, busque el clúster de destino y haga clic en Cluster Services en la columna Operations.
{
// The following code provides an example of HA configurations.
"dfs.nameservices":"testDfs",
"dfs.ha.namenodes.testDfs":"namenode1,namenode2",
"dfs.namenode.rpc-address.testDfs.namenode1": "",
"dfs.namenode.rpc-address.testDfs.namenode2": "",
"dfs.client.failover.proxy.provider.testDfs":"org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider"
// (Optional) If the underlying storage is OSS, configure the following parameters in Extension Parameters to connect to the OSS service.
"fs.oss.accessKeyId":"<yourAccessKeyId>",
"fs.oss.accessKeySecret":"<yourAccessKeySecret>",
"fs.oss.endpoint":"oss-cn-<yourRegion>-internal.aliyuncs.com"
}
Tabla externa de OSS
Si el almacenamiento subyacente es OSS, tome en cuenta lo siguiente:
Establezca defaultFS con el prefijo oss://. Por ejemplo,
oss://bucketName.-
Si sincroniza una tabla externa de OSS, debe agregar la configuración de OSS en el campo Extension Parameters cuando configure el origen de datos de Hive.
{ "fs.oss.accessKeyId":"<yourAccessKeyId>", "fs.oss.accessKeySecret":"<yourAccessKeySecret>", "fs.oss.endpoint":"oss-cn-<yourRegion>-internal.aliyuncs.com" } -
Si sincroniza una tabla externa de OSS-HDFS, debe agregar la configuración de OSS-HDFS en el campo Extension Parameters cuando configure el origen de datos de Hive.
{ "fs.oss.accessKeyId":"<yourAccessKeyId>", "fs.oss.accessKeySecret":"<yourAccessKeySecret>", "fs.oss.endpoint":"cn-<yourRegion>.oss-dls.aliyuncs.com" }
Modo CDH
Si desea configurar un origen de datos de Hive en modo CDH, debe register the CDH cluster with DataWorks.
Crear un origen de datos
Antes de desarrollar una tarea de sincronización de datos, cree un origen de datos en DataWorks. Consulte las instrucciones en Data source management. Para conocer la descripción detallada de los parámetros, consulte las sugerencias integradas en la página de configuración.
A continuación se describen los parámetros correspondientes a cada Authentication Method.
Autenticación Kerberos
|
Parámetro |
Descripción |
|
keytab file |
El archivo .keytab que se genera cuando se registra el principal del servicio en el entorno de Kerberos. |
|
conf file |
El archivo
|
|
principal |
Una identidad, que puede ser un usuario o un servicio, con un nombre único y una clave de cifrado asociada.
|
Autenticación SSL
|
Parámetro |
Descripción |
|
Truststore certificate file |
El archivo de certificado de Truststore (por ejemplo, |
|
Truststore password |
La contraseña que estableció cuando generó el archivo de certificado de Truststore para la autenticación SSL. |
|
Keystore certificate file |
El archivo de certificado de Keystore que se genera al habilitar la autenticación SSL, como el archivo |
|
Keystore password |
La contraseña que estableció cuando generó el archivo de certificado de Keystore para la autenticación SSL. |
Desarrollo de tareas de sincronización
Para conocer el punto de entrada y el procedimiento de configuración de una tarea de sincronización, consulte las siguientes guías de configuración.
Sincronización sin conexión de una sola tabla
Consulte el procedimiento en Configure a task in the codeless UI y Configure a task in the code editor.
Consulte la lista completa de parámetros y los ejemplos de script para el editor de código en Appendix: Script demos and parameter reference.
Sincronización sin conexión de una base de datos completa
Consulte el procedimiento en Offline sync task for an entire database.
Apéndice: ejemplos de scripts y referencia de parámetros
Configurar una tarea de sincronización por lotes con el editor de código
Si desea configurar una tarea de sincronización por lotes con el editor de código, debe establecer los parámetros correspondientes en el script de acuerdo con los requisitos unificados de formato de scripts. Para más información, consulte Script mode configuration. A continuación se describen los parámetros que debe configurar para los orígenes de datos cuando utilice el editor de código.
Ejemplos de scripts de Reader
Los datos se pueden leer mediante archivos de HDFS o mediante una conexión JDBC de Hive.
-
Lectura de datos mediante archivos de HDFS
{ "type": "job", "steps": [ { "stepType": "hive", "parameter": { "partition": "pt1=a,pt2=b,pt3=c", // Partition information "datasource": "hive_not_ha_****", // Data source name "column": [ // Columns to read "id", "pt2", "pt1" ], "readMode": "hdfs", // Read mode "table": "part_table_1", "fileSystemUsername" : "hdfs", "hivePartitionColumn": [ { "type": "string", "value": "Partition Name 1" }, { "type": "string", "value": "Partition Name 2" } ], "successOnNoFile":true }, "name": "Reader", "category": "reader" }, { "stepType": "hive", "parameter": { }, "name": "Writer", "category": "writer" } ], "version": "2.0", "order": { "hops": [ { "from": "Reader", "to": "Writer" } ] }, "setting": { "errorLimit": { "record": "" // The number of error records allowed }, "speed": { "concurrent": 2, // The concurrency level for the task. "throttle": true, // Enables or disables throttling. If false, the mbps parameter is ignored. "mbps":"12" // The maximum transfer rate in MBps. } } } -
Lectura de datos mediante una conexión JDBC de Hive
{ "type": "job", "steps": [ { "stepType": "hive", "parameter": { "querySql": "select id,name,age from part_table_1 where pt2='B'", "datasource": "hive_not_ha_****", // Data source name "session": [ "mapred.task.timeout=600000" ], "column": [ // Columns to read "id", "name", "age" ], "where": "", "table": "part_table_1", "readMode": "jdbc" // Read mode }, "name": "Reader", "category": "reader" }, { "stepType": "hive", "parameter": { }, "name": "Writer", "category": "writer" } ], "version": "2.0", "order": { "hops": [ { "from": "Reader", "to": "Writer" } ] }, "setting": { "errorLimit": { "record": "" }, "speed": { "concurrent": 2, // The concurrency level for the task. "throttle": true, // Enables or disables throttling. If false, the mbps parameter is ignored. "mbps":"12" // The maximum transfer rate in MBps. } } }
Parámetros de Reader
|
Parámetro |
Descripción |
Obligatorio |
Predeterminado |
|
datasource |
El nombre del origen de datos que creó en DataWorks. |
Sí |
Ninguna |
|
table |
El nombre de la tabla que desea sincronizar. Nota
El nombre de la tabla distingue entre mayúsculas y minúsculas. |
Sí |
Ninguna |
|
readMode |
El modo de lectura. Valores válidos:
Nota
|
No |
Ninguna |
|
partition |
La información de partición de la tabla de Hive.
|
No |
Ninguna |
|
session |
Las configuraciones a nivel de sesión para leer datos a través de una conexión JDBC de Hive. Puede establecer parámetros de cliente como |
No |
Ninguna |
|
column |
Las columnas que se van a leer; por ejemplo,
|
Sí |
Ninguna |
|
querySql |
Cuando lee datos mediante una conexión JDBC de Hive, puede configurar directamente el parámetro querySql para leerlos. |
No |
Ninguna |
|
where |
Cuando lee datos mediante una conexión JDBC de Hive, puede usar una cláusula where para filtrarlos. |
No |
Ninguna |
|
fileSystemUsername |
Las lecturas de datos que usan el método de HDFS utilizan de forma predeterminada el usuario configurado en la página Hive data source. Si configuró un inicio de sesión anónimo en la página del origen de datos, se usará la cuenta |
No |
Ninguna |
|
hivePartitionColumn |
Si desea sincronizar los valores de los campos de partición hacia sistemas posteriores, cambie al editor de código para configurar el parámetro hivePartitionColumn. |
No |
Ninguna |
|
successOnNoFile |
En el modo de lectura de HDFS, especifica si la tarea de sincronización se considera exitosa cuando el directorio está vacío. |
No |
Ninguna |
Ejemplo de script de Writer
{
"type": "job",
"steps": [
{
"stepType": "hive",
"parameter": {
},
"name": "Reader",
"category": "reader"
},
{
"stepType": "hive",
"parameter": {
"partition": "year=a,month=b,day=c", // Partition configuration
"datasource": "hive_ha_shanghai", // Data source
"table": "partitiontable2", // Destination table
"column": [ // Column configuration
"id",
"name",
"age"
],
"writeMode": "append" ,// Write mode
"fileSystemUsername" : "hdfs"
},
"name": "Writer",
"category": "writer"
}
],
"version": "2.0",
"order": {
"hops": [
{
"from": "Reader",
"to": "Writer"
}
]
},
"setting": {
"errorLimit": {
"record": ""
},
"speed": {
"throttle":true, // If you set throttle to false, the mbps parameter does not take effect, which indicates that no throttling is triggered. If you set throttle to true, throttling is enabled.
"concurrent":2, // The number of concurrent jobs.
"mbps":"12" // Throttling rate
}
}
}
Parámetros de Writer
|
Parámetro |
Descripción |
Obligatorio |
Predeterminado |
|
datasource |
El nombre del origen de datos. Debe coincidir con el nombre del origen de datos que creó. |
Sí |
Ninguna |
|
column |
Las columnas que se van a escribir; por ejemplo,
|
Sí |
Ninguna |
|
table |
El nombre de la tabla de Hive en la que desea escribir los datos. Nota
El nombre de la tabla distingue entre mayúsculas y minúsculas. |
Sí |
Ninguna |
|
partition |
La información de partición de la tabla de Hive.
|
No |
Ninguna |
|
writeMode |
El modo de escritura para los datos de la tabla de Hive. Una vez que los datos se escriben en un archivo de HDFS, el plugin Hive Writer ejecuta el comando El parámetro writeMode define el comportamiento de carga de datos:
Nota
El parámetro writeMode es de alto riesgo. Preste mucha atención al directorio de salida de datos y al comportamiento de writeMode para evitar eliminar datos por accidente. El comportamiento de carga de datos requiere el parámetro hiveConfig. Compruebe su configuración. |
Sí |
Ninguna |
|
hiveConfig |
Puede configurar más parámetros de extensión de Hive en hiveConfig, incluidos hiveCommand, jdbcUrl, username y password.
|
Sí |
Ninguna |
|
fileSystemUsername |
Cuando escribe datos en una tabla de Hive, se usa de forma predeterminada el usuario configurado en la página Hive data source. Si configuró un inicio de sesión anónimo en la página del origen de datos, se utilizará la cuenta admin de manera predeterminada. Si ocurre un problema de permisos durante la tarea de sincronización, cambie al editor de código y configure el parámetro fileSystemUsername. |
No |
Ninguna |
|
enableColumnExchange |
Si establece este parámetro en True, se habilita la reordenación de columnas. Nota
Este parámetro solo es compatible con el formato Text. |
No |
Ninguna |
|
nullFormat |
Data Integration usa el parámetro nullFormat para definir qué valores de cadena se tratan como nulos. Por ejemplo, si configura Nota
La cadena "null" (los cuatro caracteres n, u, l, l) es distinta de un valor nulo real. |
No |
Ninguna |