Apache Drill集群中的动态UDF

时间:2018-09-24 13:05:17

标签: user-defined-functions apache-drill

我有钻头群集,有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”文件夹中并运行“使用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

1 个答案:

答案 0 :(得分:3)

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