Apache Drill 集群中的动态 UDF

Dynamic UDF in Apache Drill cluster

我有钻头组,有 4 个钻头(钻头 1.14)。但由于某种原因,我无法在集群中使用动态 UDF 功能。每次,我都遇到了麻烦。

让我展示 2 个场景:

场景一
这是配置(所有钻头的配置都相同):

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 - 我收到 'already registered' 错误 - 但无法使用它。(未找到错误) hdfs://vm29.local:9000/drill/udf/registry 中的 JAR 文件和 ZK 注册表中的元数据。

场景二
配置相同,唯一不同的是 - 所有钻头都将其本地文件系统用于 UDF 文件夹。

在那种情况下 - 我可以 register/unregister 发挥作用 - 但我不能在每个钻头上使用它(未发现错误)。 /UDF/registry 文件夹中的 Jar 文件和 zk 注册表中的元数据 - 但不起作用。

我做错了什么?
我找不到关于在集群中使用动态 UDF 功能的分步说明的任何描述。也许你知道一个?

谢谢。

更新:

我只是想: 我使用网络控制台进行查询。也许它有区别 - 通过网络控制台或 jdbc:zk 连接创建功能? (我会测试)

原因与结果
这是 drill 1.14
中的错误 已在 Drill Jira
中报告 修复并说明:Drill GitHub repository

这是自1.13以来的回归,我们开了一个Jira ticket - https://issues.apache.org/jira/browse/DRILL-6762. Meanwhile, you can add custom udfs manually - https://drill.apache.org/docs/manually-adding-custom-functions-to-drill/.