¿Cómo cargar datos a hive desde HDFS sin eliminar el archivo de origen?


Cuando cargue datos de HDFS a la colmena, usando

LOAD DATA INPATH 'hdfs_file' INTO TABLE tablename;

Comando, parece que está moviendo el archivo hdfs_file a hive/warehouse dir. Es posible (¿Cómo?) para copiarlo en lugar de moverlo, para que el archivo sea utilizado por otro proceso.

 42
Author: Athafoud, 2011-09-27

3 answers

De su pregunta asumo que ya tiene sus datos en hdfs. Por lo tanto, no necesita LOAD DATA, que mueve los archivos a la ubicación predeterminada de la colmena /user/hive/warehouse. Simplemente puede definir la tabla usando la palabra clave external, que deja los archivos en su lugar, pero crea la definición de la tabla en la colmena metastore. Ver aquí: Crear tabla DDL eg.:

create external table table_name (
  id int,
  myfields string
)
location '/my/location/in/hdfs';

Tenga en cuenta que el formato que utiliza puede diferir del predeterminado (como mencionó JigneshRawal en los comentarios). Puedes usar tu delimitador propio, por ejemplo cuando se usa Sqoop:

row format delimited fields terminated by ','
 78
Author: Dag,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-10 13:27:09

Descubrí que, cuando usas TABLA EXTERNA y UBICACIÓN juntas, Hive crea tabla e inicialmente no se presentarán datos (suponiendo que tu ubicación de datos sea diferente de la 'UBICACIÓN'de Hive).

Cuando utiliza el comando 'CARGAR ENTRADA DE DATOS', los datos se mueven (en lugar de copiar) de la ubicación de datos a la ubicación que especificó al crear la tabla de colmena.

Si no se da la ubicación cuando se crea la tabla de la colmena, utiliza la ubicación interna del almacén de la Colmena y los datos se moverán desde la ubicación de los datos de origen hasta la ubicación interna del almacén de datos de la colmena (es decir, /user/hive/warehouse/).

 4
Author: Avinash,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-06 12:46:15

Hay disponible una alternativa a 'CARGAR DATOS' en la que los datos no se moverán de su ubicación de origen existente a la ubicación del almacén de datos de hive.

Puede usar el comando ALTER TABLE con la opción 'LOCATION'. Aquí está a continuación comando requerido

ALTER TABLE table_name ADD PARTITION (date_col='2017-02-07') LOCATION 'hdfs/path/to/location/'

La única condición aquí es que la ubicación debe ser un directorio en lugar de un archivo.

Espero que esto resuelva el problema.

 3
Author: Avinash,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-06 14:05:34