我为Impala创建了一个Cloudera集群。
如果我通过impala-shell
运行以下命令:
create table test as select 1;
返回以下错误:
WARNINGS: Failed to open HDFS file for writing: hdfs://[DNhostname]:8020/user/hive/warehouse/test/_impala_insert_staging/[...]/[...].0.
Error(255): Unknown error 255
但是,如果我跑:
create table test (testcol int);
insert into test select 1;
......创建表格时没有任何障碍。
关于为什么第一个语句可能会失败而第二组命令成功的任何想法,以及我可以做些什么来解决它?我可能在本地或在HDFS上弄乱了一些目录权限,但是我将dfs.permissions
设置为false以关闭HDFS权限。我不知道要检查本地文件夹的内容,以确保正确的用户拥有正确的权限。在任何一种情况下,我都不知道为什么权限会导致CREATE TABLE AS SELECT
语句失败但不会导致CREATE
,然后INSERT
。
我还应该提到DNhostname
是我所连接的HDFS datanode / impala守护进程的主机名,而不是namenode的主机名。这让我很担心,因为DNhostname
最初是我的名字节所在的位置;我把它移到了另一个主机上,原因超出了这个问题的范围。由于某种原因,CREATE TABLE AS SELECT
是否仍然期望namenode为DNhostname
?
答案 0 :(得分:0)
您正在使用默认数据库路径创建新表,因为您没有在create语句中指定新路径。如果您尝试使用其他数据库进行此过程,则最有可能获得成功。
create database newdb
use newdb
create table test as select 1
这将证明此DB在Metastore中的位置是错误的。转到您的metastore.dbs并在那里找到您的数据库的ID。您需要正确设置数据库的位置,例如:
update <metastoreDB>.DBS set LOCATION = 'hdfs://NN_URI:8020/user/hive/warehouse' where id = id_of_your_db;'