【问题标题】:Dynamic UDF in Apache Drill clusterApache Drill 集群中的动态 UDF
【发布时间】: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


【解决方案1】:

这是自 1.13 以来的回归,我们已经打开了 Jira 票证 - https://issues.apache.org/jira/browse/DRILL-6762。同时,您可以手动添加自定义 udfs - https://drill.apache.org/docs/manually-adding-custom-functions-to-drill/

【讨论】:

  • 谢谢!我看到了带有修复的拉取请求。 github.com/apache/drill/pull/1482 Kunal Khatua 的原因描述:“问题在于注册表版本值 -1 既是有效版本号,又表明(远程)注册表无法访问。DRILL-6053 加剧了这种歧义。解决方法是为无法访问的注册表版本提供不同的值。在这种情况下,我们选择了 Integer.MIN_VALUE,即
猜你喜欢
  • 1970-01-01
  • 2022-01-26
  • 1970-01-01
  • 1970-01-01
  • 2020-01-29
  • 1970-01-01
  • 2019-02-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多