CREATE TABLE AS SELECT返回错误'无法打开HDFS文件以便编写'

时间:2017-01-18 20:45:01

标签: sql hdfs cloudera create-table impala

我为Impala创建了一个Cloudera集群。

  • Cloudera版本:Cloudera Express 5.8.1
  • Impala版本:2.6.0-cdh5.8.0 RELEASE

如果我通过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

1 个答案:

答案 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;'