Presto 查询 HIVE 表异常:无法列出目录

Posted

技术标签:

【中文标题】Presto 查询 HIVE 表异常:无法列出目录【英文标题】:Presto Query HIVE Table Exception: Failed to list directory 【发布时间】:2018-01-04 12:55:38 【问题描述】:

我是 Presto 的新手。我有两台机器用于 presto 0.160,一台是协调器,另一台是工人。我想查询配置单元中的表。现在我可以“显示表”、“desc 表名”,但是当我想“从表名中选择 *”时,出现异常:“查询 20170728_123013_00011_q4s3a 失败:无法列出目录:hdfs://cdh-test/user/hive/仓库/employee_hive"

presto> desc hive.default.employee_hive;


Column    |  Type   | Comment 
-------------+---------+---------
 eid         | integer |         
 name        | varchar |         
 salary      | varchar |         
 destination | varchar |         
(4 rows)

Query 20170728_123001_00010_q4s3a, FINISHED, 2 nodes
Splits: 2 total, 2 done (100.00%)
0:00 [4 rows, 268B] [40 rows/s, 2.68KB/s]

presto> select * from hive.default.employee_hive;

Query 20170728_123013_00011_q4s3a, FAILED, 1 node
Splits: 1 total, 0 done (0.00%)
0:00 [0 rows, 0B] [0 rows/s, 0B/s]

Query 20170728_123013_00011_q4s3a failed: Failed to list directory: hdfs://cdh-test/user/hive/warehouse/employee_hive

这是我对 hive 目录的配置:

connector.name=hive-cdh4
hive.metastore.uri=thrift://***:9083
hive.config.resources=/etc/hadoop/conf/core-site.xml,/etc/hadoop/conf/hdfs-site.xml

我哪里错了?

【问题讨论】:

没有错,可能是暂时的问题...再次运行。 【参考方案1】:

存储表的路径需要存在于 HDFS 上,Presto 才能成功打开它。从路径看来,您的表是一个“内部”配置单元表,这意味着配置单元应该自己创建了路径。由于没有,您可以使用类似于hdfs dfs -mkdir hdfs://cdh-test/user/hive/warehouse/employee_hive 的命令自己创建它,但具体的命令取决于您的 HDFS 设置。

【讨论】:

【参考方案2】:

您无法访问 hadoop 目录目录。我希望您已将表创建为文本文件,并存储各个用户的内部目录。

您只需将表创建为外部表,您就可以通过 presto 访问

Create External Table tablename (columnames datatypes) row format delimited fields terminated by '\t' stored as textfile;

load data inpath 'Your_hadoop_directory' into table tablename;

否则您只需创建一个内部表并将其加载到外部 ORC 表并通过 presto 访问

Create Table tablename (columnames datatypes) row format delimited fields terminated by '\t' stored as textfile;

load data inpath 'Your_hadoop_directory' into table tablename;

Create external Table tablename (columnames datatypes) STORED AS ORC;

insert into orc_tablename select * from internal_tablename

我通过创建 ORC 表解决了上述问题。

【讨论】:

以上是关于Presto 查询 HIVE 表异常:无法列出目录的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 CSV 文件中的 Presto 创建 Hive 表

Presto 无法查询配置单元表

Presto 和 Hive

Presto 查询无法将数据插入 Hive

Presto查询引擎简单分析

Presto统计信息