CREATE TABLE AS SELECT 返回错误“无法打开 HDFS 文件进行写入”
Posted
技术标签:
【中文标题】CREATE TABLE AS SELECT 返回错误“无法打开 HDFS 文件进行写入”【英文标题】:CREATE TABLE AS SELECT returns error 'Failed to open HDFS file for writing' 【发布时间】:2017-01-18 20:45:00 【问题描述】:我为 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
是我通过 SSH 连接到的 HDFS 数据节点/impala 守护程序的主机名,而不是名称节点的主机名。这让我很担心,因为DNhostname
最初是我的名称节点所在的位置;出于此问题范围之外的原因,我将其移至其他主机。 CREATE TABLE AS SELECT
是否有可能出于某种原因仍然期望名称节点为 DNhostname
?
【问题讨论】:
您通常不会使用 CREATE TABLE 语法执行插入 @TMcKeown 在 Impala 中是可能的:cloudera.com/documentation/enterprise/latest/topics/… 【参考方案1】:您正在使用默认数据库路径创建一个新表,因为您没有在 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;'
【讨论】:
以上是关于CREATE TABLE AS SELECT 返回错误“无法打开 HDFS 文件进行写入”的主要内容,如果未能解决你的问题,请参考以下文章
何时将 CREATE TABLE AS SELECT 与 CREATE TABLE LIKE?
oracle中,用create table ... as select * from table_a...语句备份或者其他用途会不会产生归档日志,