Presto 无法获取 HIVE 表中的内容

Posted

技术标签:

【中文标题】Presto 无法获取 HIVE 表中的内容【英文标题】:Presto can't fetch content in HIVE table 【发布时间】:2014-02-02 06:58:47 【问题描述】:

我的环境: Hadoop 1.0.4 蜂巢 0.12 hbase 0.94.14 快0.56

所有软件包都安装在伪机器上。这些服务不在本地主机上运行,​​但是 在具有静态 IP 的主机名上。

presto conf:

coordinator=false
datasources=jmx,hive
http-server.http.port=8081
presto-metastore.db.type=h2
presto-metastore.db.filename=/root
task.max-memory=1GB
discovery.uri=http://<HOSTNAME>:8081

在 presto cli 中我可以成功获取 hive 中的表:

presto:default> show tables;
       Table
-------------------
ht1
k_business_d_
k_os_business_d_
...
tt1_
(11 rows)

Query 20140114_072809_00002_5zhjn, FINISHED, 1 node
Splits: 2 total, 2 done (100.00%)
0:11 [11 rows, 291B] [0 rows/s, 26B/s]

但是当我尝试从任何表中查询数据时,结果总是为空:(没有错误信息)

presto:default> select * from k_business_d_;
 key | business | business_name | collect_time | numofalarm | numofhost | test
-----+----------+---------------+--------------+------------+-----------+------
(0 rows)

Query 20140114_072839_00003_5zhjn, FINISHED, 1 node
Splits: 1 total, 1 done (100.00%)
0:02 [0 rows, 0B] [0 rows/s, 0B/s]

如果我在 HIVE 中执行相同的 sql,结果显示表中有 1 行。

hive> select * from k_business_d_;
OK
9223370648089975807|2   2       测试机       2014-01-04 00:00:00     NULL    1.0         NULL
Time taken: 2.574 seconds, Fetched: 1 row(s)

为什么 presto 不能从 HIVE 表中获取?

【问题讨论】:

您的表格使用什么文件格式?请在 Hive 中显示“DESCRIBE FORMATTED table”的输出。 感谢您的帮助。它是 HBASE 上的一个外部表 hive> 描述格式化 k_business_d_; OK # col_name data_type comment key string from deserializer business int from deserializer business_name string from deserializer collect_time string from deserializer numofalarm double from deserializer numofhost double from deserializer test double 来自解串器 # 详细表信息数据库:默认所有者:root 创建时间:Thu Jan 09 16:04:37 CST 2014 LastAccessTime: UNKNOWN 保护模式:无保留:0 位置:hdfs://allinone:9000/ user/hive/warehouse/k_business_d_ 表类型:EXTERNAL_TABLE 表参数:EXTERNAL TRUE hbase.table.name K_BUSINESS_D storage_handler org.apache.hadoop.hive.hbase.HBaseStorageHandler transient_lastDdlTime 1389254677 # Storage Information SerDe Library: org.apache.hadoop.hive.hbase.HBaseSerDe InputFormat: org.apache.hadoop.hive.hbase.HiveHBaseTableInputFormat OutputFormat: org.apache.hadoop.hive.ql。 io.HivePassThroughOutputFormat 【参考方案1】:

看起来这是一个通过 org.apache.hadoop.hive.hbase.HBaseStorageHandler 使用 HBase 的外部表。目前尚不支持此功能,但一篇邮件列表帖子表明,如果您将适当的 jar 复制到 Hive 插件目录,则有可能:https://groups.google.com/d/msg/presto-users/U7vx8PhnZAA/9edzcK76tD8J

【讨论】:

以上是关于Presto 无法获取 HIVE 表中的内容的主要内容,如果未能解决你的问题,请参考以下文章

Presto odbc 无法读取 HIVE 中的时间戳字段

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

检查 presto/hive 表中是不是存在列名

获取特定表中特定列的数据类型的 Presto 查询是啥?

为啥从 Presto 中的 dtap:// hive 表读取时总是得到 0 条记录作为输出?

根据 Presto/Hive 中的列值聚合列