hadoop - summoners - ¿Cómo cargar datos a colmena desde HDFS sin eliminar el archivo fuente?
hive summoners war (3)
Encontré que, cuando usa EXTERNAL TABLE y LOCATION juntos, Hive crea una tabla e inicialmente no se presentarán datos (suponiendo que su ubicación de datos es diferente de la ''UBICACIÓN'' de la Colmena).
Cuando utiliza el comando ''LOAD DATA INPATH'', los datos se MUDAN (en lugar de copiar) de la ubicación de los datos a la ubicación que usted especificó al crear la tabla Hive.
Si no se proporciona la ubicación cuando crea la tabla Hive, usa la ubicación interna del almacén Hive y los datos se moverán de su ubicación de datos de origen a la ubicación interna del almacén de datos Hive (es decir, / usuario / colmena / almacén /).
Cuando carga datos de HDFS a Hive, usando
LOAD DATA INPATH ''hdfs_file'' INTO TABLE tablename;
comando, parece que está moviendo el hdfs_file al directorio hive/warehouse
. ¿Es posible (¿Cómo?) Copiarlo en lugar de moverlo, en orden, para que el archivo sea utilizado por otro proceso.
Está disponible una alternativa a ''LOAD DATA'' 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 la colmena.
Puede usar el comando ALTER TABLE con la opción ''LOCATION''. Aquí está debajo del 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 solucione el problema.
de su pregunta, supongo que ya tiene sus datos en HDF. Por lo tanto, no es necesario LOAD DATA
, lo que mueve los archivos a la ubicación de la colmena predeterminada /user/hive/warehouse
. Simplemente puede definir la tabla utilizando la palabra clave external
, que deja los archivos en su lugar, pero crea la definición de la tabla en el metastore de la colmena. Ver aquí: Crear tabla DDL, por ejemplo:
create external table table_name (
id int,
myfields string
)
location ''/my/location/in/hdfs'';
Tenga en cuenta que el formato que use puede diferir del predeterminado (como menciona JigneshRawal en los comentarios). Puede usar su propio delimitador, por ejemplo cuando usa Sqoop:
row format delimited fields terminated by '',''