如何使用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数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在 python 上使用 presto 连接到 Azure 数据湖存储?

如何将 presto 查询输出转换为 python 数据框

使用Presto重写Hive分区表数据

使用Presto重写Hive分区表数据

赵强老师大数据分析引擎:Presto

使用Presto实现Hive动态分区