Hive no respeta completamente el valor fs.default.name/fs.defaultFS en core-site.xml
Tengo el servicio NameNode instalado en una máquina llamadahadoop
.
loscore-site.xml
archivo tiene lafs.defaultFS
(equivalente afs.default.name
) establecido en lo siguiente:
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop:8020</value>
</property>
Tengo una mesa muy simple llamadatest_table
que existe actualmente en el servidor Hive en el HDFS. Es decir, se almacena bajo/user/hive/warehouse/test_table
. Fue creado usando un comando muy simple en Hive:
CREATE TABLE new_table (record_id INT);
Si intento cargar datos en la tabla localmente (es decir, usandoLOAD DATA LOCAL
), todo procede como se espera. Sin embargo, si los datos se almacenan en el HDFS y quiero cargarlos desde allí, ocurre un problema.
Ejecuto una consulta muy simple para intentar esta carga:
hive> LOAD DATA INPATH '/user/haduser/test_table.csv' INTO TABLE test_table;
Si lo hace, conduce al siguiente error:
FAILED: SemanticException [Error 10028]: Line 1:17 Path is not legal ''/user/haduser/test_table.csv'':
Move from: hdfs://hadoop:8020/user/haduser/test_table.csv to: hdfs://localhost:8020/user/hive/warehouse/test_table is not valid.
Please check that values for params "default.fs.name" and "hive.metastore.warehouse.dir" do not conflict.
Como indica el error, está intentando pasar dehdfs://hadoop:8020/user/haduser/test_table.csv
ahdfs://localhost:8020/user/hive/warehouse/test_table
. El primer camino es correcto porque hace referencia.hadoop:8020
; El segundo camino es incorrecto, porque hace referencia.localhost:8020
.
loscore-site.xml
archivo claramente estados para usarhdfs://hadoop:8020
. loshive.metastore.warehouse
valor enhive-site.xml
señala correctamente a/user/hive/warehouse
. Por lo tanto, dudo que este mensaje de error tenga algún valor verdadero.
¿Cómo puedo hacer que el servidor Hive use la dirección de NameNode correcta al crear tablas?