如何使用presto查询hive数据
Posted
技术标签:
【中文标题】如何使用presto查询hive数据【英文标题】:how to use presto to query hive data 【发布时间】:2013-11-26 06:34:18 【问题描述】:我刚刚安装了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 可以自行成功处理查询。
谁能帮我解决?任何想法将不胜感激。
【问题讨论】:
【参考方案1】:向 etc/catalog/hive.properties 添加更多行 “hive.config.resources=/etc/hadoop/conf/core-site.xml,/etc/hadoop/conf/hdfs-site.xml” 当然在做之前检查路径的值。
presto-metastore.db.filename= 这个 presto 的 metastore,不是 hive。
【讨论】:
我的问题是我为 Presto 配置了错误的 hive-metastore。愚蠢的错误......无论如何感谢您的帮助【参考方案2】:按照入门指南的建议,我创建了一个控制器(仅限 jmx)和一个单独的工作器(jmx、hive),每个都在不同的机器上。
最终为我解决这个问题的方法是将 worker 的 主机名和 http-server.http.port
指定为 --server
的参数 presto
。在指定控制器时,它不起作用。
这一切都说得通,但我仍然想知道当我有两个 Presto-Hive 工作人员时会发生什么......
【讨论】:
如果我理解正确的话,你应该在worker的discovery.uri中指定协调器(控制器)的主机名和http.port。然后,您可以使用指向协调器的 --server 来启动 presto。无论如何,这就是我所做的,它对我有用。 我不确定发生了什么变化。我仔细检查了discovery.uri
设置,它已经正确了。我重新启动了协调器和工作器,现在我可以使用指向协调器的 presto-cli 进行查询。【参考方案3】:
我刚刚弄清楚我的情况出了什么问题: 您还必须在 $HIVE_HOME/conf/hive-env.sh 中添加以下行,以通知 hive 打开节俭端口(与 hive-site.xml 文件中的 hive.metastore.uris 属性下所述相同)。 Hive 客户端使用此端口通过 RPC 连接到 Metastore。
导出 METASTORE_PORT=9084
在 conf 文件夹的 hive-env.sh 文件中。 这应该将您的配置单元与 presto 同步。
【讨论】:
以上是关于如何使用presto查询hive数据的主要内容,如果未能解决你的问题,请参考以下文章