【发布时间】:2018-09-27 15:04:19
【问题描述】:
我有钻头组,有 4 个钻头(钻头 1.14)。但是由于某种原因,我不能在集群中使用动态 UDF 功能。每一次,我都面临着困难。
让我介绍两个场景:
场景 1
这是配置(所有钻头的配置都相同):
drill.exec: {
cluster-id: "drill-test",
zk: {
connect: "vm29.local:2181,vm32.local:2181,vm39.local:2181",
root: "drill"
},
sys.store.provider.zk.blobroot: "hdfs://vm29.local:9000/apps/drill/pstore/",
http: {
enabled: true,
ssl_enabled: false,
port: 8047
session_max_idle_secs: 3600, # Default value 1hr
cors: {
enabled: true,
allowedOrigins: ["*"],
allowedMethods: ["GET", "POST", "HEAD", "OPTIONS"],
allowedHeaders: ["X-Requested-With", "Content-Type", "Accept", "Origin"],
}
}
}
drill.exec.udf: {
retry-attempts: 5,
directory: {
fs: "hdfs://vm29.local:9000/",
root: "/drill",
base: "/udf",
local: ${drill.exec.udf.directory.base}"/local",
staging: ${drill.exec.udf.directory.base}"/staging",
registry: ${drill.exec.udf.directory.base}"/registry",
tmp: ${drill.exec.udf.directory.base}"/tmp"
}
}
如您所见,在那种情况下,我将 hdfs 用于 UDF。
当我将 jar 文件放入“staging”文件夹并运行“CREATE FUNCTION USING JAR”时 - 它成功注册了函数。但是我只能在我注册它的钻头上使用它。
例如,如果我在 vm29 的 Web UI 中运行命令 - 我只能在 vm29 中使用函数。
如果另外,我尝试在不同的钻头中注册 jar - 我得到“已经注册”错误 - 但不能使用它。(未找到错误)
hdfs://vm29.local:9000/drill/udf/registry 中的 JAR 文件和 ZK 注册表中的元数据。
场景 2
配置相同,只有区别 - 所有钻头都将其本地文件系统用于 UDF 文件夹。
在这种情况下 - 我可以注册/取消注册功能 - 但我不能在每个钻头上使用它(未找到错误)。 /UDF/registry 文件夹中存在 Jar 文件,zk 注册表中存在元数据 - 但不起作用。
我做错了什么?
我找不到关于在集群中使用动态 UDF 功能的分步说明的任何描述。也许你认识一个?
谢谢。
更新:
我只是想: 我使用 Web 控制台进行查询。也许它有区别 - 通过 Web 控制台或 jdbc:zk 连接创建函数? (我会测试)
原因和结果
这是钻头 1.14 中的一个错误
举报于Drill Jira
修正并解释:Drill GitHub repository
【问题讨论】:
-
看起来动态 UDF 被破坏了,因为它们可以在多个节点上工作。如果可能,请提交 Apache Jira。
标签: user-defined-functions apache-drill