Apache Drill 查询 HBase 表

Posted

技术标签:

【中文标题】Apache Drill 查询 HBase 表【英文标题】:Apache Drill query HBase table 【发布时间】:2016-12-04 08:28:59 【问题描述】:

我正在使用 Drill-embedded 执行 SQL,我可以看到 HBase 中的表。这是终端输出..

但是,我无法对它们执行查询,这是引发以下错误:

 0: jdbc:drill:zk=local> SELECT * FROM students;


Error: SYSTEM ERROR: IllegalAccessError: tried to access method
com.google.common.base.Stopwatch.<init>()V from class
org.apache.hadoop.hbase.zookeeper.MetaTableLocator

[Error Id: 9c656263-c774-4aaf-a789-d4e374adb69b on localhost:31010]
(state=,code=0)

请让我知道我必须做什么才能在 Drill 上执行查询,提前致谢。

【问题讨论】:

你能运行这个看看它给出了什么:select count(*) from hbase.`students`; 感谢@SrihariKaranth,学生表包含 4 条记录,我刚刚用钻 1.6 试了一下,它工作正常,因为一些博客表明依赖关系存在一些问题。 现在我的配置是 hadoop 2.7、hbase 1.2.4 和 Drill 1.6... 使用相同的 hbase 和 hadoop 配置的 Drill 1.8 可能存在一些问题...但是我将运行查询您建议并让您知道... 【参考方案1】:

这个问题与 Hbase 的关系更大。

com.google.common.base.Stopwatch 类存在于番石榴罐中。

构造函数在版本 17 或 18 更改为包私有。

自 Guava v.17 起,Stopwatch 类的默认构造函数变为 private,并且更早标记为已弃用。

好像你用的是最新版本的番石榴,你可以降低版本再试一次,有合适的构造函数。

如果您使用的是 maven/gradle,则必须调整依赖项以适应上述方式。

请看一下这个问题HBASE-14126 解释清楚了

【讨论】:

亲爱的 Ram,我是新用户,这是我的第一个问题/帖子,所以当时我不能承认,这是不允许的(因为我当时的声誉不到 15 ),现在您可以看到更改...再次感谢您的回复...【参考方案2】:

这对我有用:

用 apache-drill-1.9.0/jars/3rdparty 文件夹中的 Guava 16 jar 替换 Guava 18 jar。你可以在这里找到番石榴 16 罐:

https://github.com/google/guava/wiki/Release16

来源:https://blogs.perficient.com/delivery/blog/2017/05/15/how-to-configure-tableau-and-drill-to-show-data-from-hbase-hive/

【讨论】:

以上是关于Apache Drill 查询 HBase 表的主要内容,如果未能解决你的问题,请参考以下文章

使用 Apache Drill 进行多表连接

使用 Apache Drill 查询嵌套的复杂 json 结构

Apache Drill 与 mongodb。在地图中查询具有特定键和值的文档

我可以在 Raspberry Pi 上运行 Apache Drill 并发现查询计划的物理成本吗?

Apache Drill - hiveserver2 jdbc 错误

Apache Drill 无法从 HDFS 读取文件(资源错误:无法创建模式树)