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

Posted

技术标签:

【中文标题】Apache Drill 无法从 HDFS 读取文件(资源错误:无法创建模式树)【英文标题】:Apache Drill unable to read files from HDFS (Resource error: Failed to create schema tree) 【发布时间】:2017-08-23 16:23:52 【问题描述】:

在我们的 HDFS 集群的一个边缘节点上设置 Drill 后,我无法读取任何 hdfs 文件。我可以从本地文件中查询数据(只要它们在具有 777 权限的文件夹中),但是从 hdfs 查询数据失败并出现以下错误:

错误:资源错误:创建架构树失败。

[错误 ID:d9f7908c-6c3b-49c0-a11e-71c004d27f46 on 服务器名称:31010](状态=,代码=0)

查询:

0: jdbc:drill:zk=local> select * from hdfs.`/names/city.parquet` limit 2;

从本地文件查询可以正常工作:

0: jdbc:drill:zk=local> select * from dfs.`/tmp/city.parquet` limit 2;

我的 HDFS 设置类似于 DFS 设置,除了连接 U​​RL 是服务器地址而不是 file:///

我在网上找不到任何有关此钻孔错误的信息。

【问题讨论】:

您在钻头日志中看到任何信息吗?您可以使用 $DRILL_CONF/logback.xml 启用 DEBUG 级别的日志记录。您还启用了模拟和身份验证吗?请同时包含您的 Drill-override.conf 和存储插件定义。 【参考方案1】:

“..在边缘节点之一上..”

Drill-bits 也可以在 Hadoop 集群的数据节点上运行,而不仅仅是在边缘节点上。这将有助于数据局部性。

现在,出现您看到的错误,看起来您的一个钻头可能已关闭,或者您的工头节点(您连接的那个)无法连接到其他节点。

如果您可以提供更多信息,例如您的集群中有多少钻头,这将进一步提供帮助。

一个好的起点应该是,检查:

select * from sys.drillbits;

这将告诉您哪些节点已启动/已关闭。

【讨论】:

我在嵌入式模式下运行drill,所以我只在其中一个节点上安装了它。运行该查询也会返回相同的错误:错误:资源错误:无法创建架构树。【参考方案2】:

在您的 Apache Drill 的 conf 目录中,您需要将以下行添加到您的 Drill-override.conf 文件中

drill.exec: 
cluster-id: "drillbits1",
zk.connect: "localhost:2181",
sys.store.provider.local.path="/mypath"

在这里,您需要提供系统路径来代替“/mypath”,drill 将在其中保存存储插件。

https://community.mapr.com/thread/20905-re-help-with-error-resource-error-failed-to-create-schema-tree 您可以查看上面的链接。

【讨论】:

以上是关于Apache Drill 无法从 HDFS 读取文件(资源错误:无法创建模式树)的主要内容,如果未能解决你的问题,请参考以下文章

使用 Apache Drill 进行多表连接

Apache Drill 与 Kerberos

无法使用 apache Drill 1.2 配置 postgreSQL JDBC 驱动程序

快速 Hadoop 分析(Cloudera Impala vs Spark/Shark vs Apache Drill)

Apache Drill 查询 HBase 表

Apache Drill 0.9 和 SQuirreL SQL 客户端 - 无法列出 JDBC 驱动程序