如何使用Presto查询Hive数据。

9

我刚刚安装了Presto,但是当我使用presto-cli查询hive数据时,出现了以下错误:

$ ./presto --server node6:8080 --catalog hive --schema default
presto:default> show tables;
Query 20131113_150006_00002_u8uyp failed: Table hive.information_schema.tables does not exist

config.properties 是:

coordinator=true
datasources=jmx,hive
http-server.http.port=8080
presto-metastore.db.type=h2
presto-metastore.db.filename=/root/h2
task.max-memory=1GB
discovery-server.enabled=true
discovery.uri=`http://node6:8080`

并且hive.properties的内容如下:

connector.name=hive-cdh4
hive.metastore.uri=thrift://node6:9083

我使用的Hadoop发行版是CDH 4.4。我相信它已经正确安装,Hive可以独立成功地处理查询。
有人能帮我解决这个问题吗?任何想法都会受到赞赏。
3个回答

2
根据“入门指南”的建议,我创建了一个控制器(仅限jmx)和一个单独的工作节点(jmx,hive),分别在不同的机器上。
最终解决这个问题的方法是将“worker”的主机名和“http-server.http.port”指定为“presto”的“--server”参数。当指定控制器时,它没有起作用。
这一切都说得通,但我还想知道当我有两个Presto-Hive工作节点时会发生什么...

如果我理解正确的话,你应该在worker的discovery.uri中指定协调器(控制器)的主机名和http.port。然后,你可以使用--server参数指向协调器来启动Presto。无论如何,这就是我所做的,而且它对我有效。 - Rui Li
我不确定发生了什么变化。我已经仔细检查了“discovery.uri”设置,它已经是正确的。我重新启动了协调器和工作节点,现在我可以使用presto-cli查询并指向协调器。 - itzg

0

我刚刚弄清楚了我的问题所在: 您还需要将以下行添加到$HIVE_HOME/conf/hive-env.sh中,以通知Hive打开Thrift端口(与hive-site.xml文件中的hive.metastore.uris属性中提到的相同)。此端口由Hive客户端通过RPC连接到Metastore。

export METASTORE_PORT=9084

在conf文件夹中的hive-env.sh文件中。 这应该使您的Hive与Presto同步。


0

在etc/catalog/hive.properties中添加更多行 "hive.config.resources=/etc/hadoop/conf/core-site.xml,/etc/hadoop/conf/hdfs-site.xml" 当然,在执行之前检查路径的值。

presto-metastore.db.filename= <- 这是Hive Warehouse目录的值吗? => 这是Presto的元数据存储,不是Hive。


1
我的问题是我为Presto配置了错误的hive-metastore。愚蠢的错误...无论如何,感谢您的帮助。 - Rui Li

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接