我是Presto的新手。我有两台机器为presto 0.160,一个是协调员,另一个是工人。我想在hive中查询表。现在我可以“显示表格”,“desc tablename”,但是当我想“select * from tablename”时,发生异常:“查询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
以下是我对配置单目录的配置:
connector.name=hive-cdh4
hive.metastore.uri=thrift://***:9083
hive.config.resources=/etc/hadoop/conf/core-site.xml,/etc/hadoop/conf/hdfs-site.xml
我错在哪里?
答案 0 :(得分:0)
存储表的路径需要存在于HDFS上才能使Presto成功打开。从路径看来,你的桌子是一个内部的" hive表,意思是hive应该创建路径本身。由于它没有,你可以使用类似于hdfs dfs -mkdir hdfs://cdh-test/user/hive/warehouse/employee_hive
的命令自己创建它,虽然确切的命令取决于你的HDFS设置。
答案 1 :(得分:-1)
您无法访问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表解决了上述问题。