create table as select返回错误“无法打开hdfs文件进行写入”

dgsult0t  于 2021-06-26  发布在  Impala
关注(0)|答案(1)|浏览(393)

我为 Impala 创建了一个cloudera集群。
cloudera版本:cloudera express 5.8.1
impala版本:2.6.0-cdh5.8.0版本
如果我通过 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 原来是我的namenode所在的地方;我把它移到另一个主机上的原因超出了这个问题的范围。有没有可能 CREATE TABLE AS SELECT 仍希望namenode DNhostname 不知为什么?

a14dhokn

a14dhokn1#

因为在create语句中没有指定新路径,所以您正在使用默认db路径创建一个新表。如果您尝试在这个过程中使用另一个数据库,您很可能会成功。

create database newdb
use newdb
create table test as select 1

这将证明此数据库在元存储中的位置错误。转到metastore.dbs并在那里找到数据库的id。您需要正确设置数据库的位置,如:

update <metastoreDB>.DBS set LOCATION = 'hdfs://NN_URI:8020/user/hive/warehouse' where id = id_of_your_db;'

相关问题