添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

EMR-3.39.1之前版本和EMR-5.5.0之前版本的Trino新增UDF需要把JAR包上传到所有节点,然后重启服务器生效,此方式不是很方便。在on ACK场景下,如果需要使用新的UDF,还需重新打镜像,此方式不太友好。因此EMR-3.39.1及之后版本和EMR-5.5.0及之后版本的阿里云EMR Trino实现了UDF的动态加载和更新。

EMR-3.39.1及后续版本、EMR-5.5.0及后续版本的Hadoop集群或选择了Trino的集群,支持UDF的动态加载和更新。

  • 如果本文示例中的 xxxxxx 的内容为现有连接器,例如 hive mysql 等,执行DROP命令会直接删除该连接器目录下的所有内容,且无法恢复,因此请谨慎操作。
  • 集群扩容时,扩容新增的节点不含上传到原有节点的UDF包,因此在扩容前需先执行DROP命令,扩容完成后再重新执行ADD命令。
  • 如果HDFS或OSS访问失败,请尝试使用 hadoop fs -ls 命令,确认集群的每个节点能否直接访问到对应文件。如果某个Worker节点无法访问,可以在对应Worker节点的 server.log 日志文件中查找原因。
    目前UDF文件支持以下两种方式:
  • 方式一:将UDF的全部内容打成一个JAR包(例如, udfjar.jar ),上传到文件系统中。如果OSS属于其他账号,或使用的是ACK集群,则需保证该JAR包有公开的读权限。
  • 包名不可与现有连接器或UDF重名。
  • 建议包名只包含字母数字,否则可能出现不识别的情况。
  • Trino无法直接使用Presto的UDF,需修改包名后重新编译,否则可能导致添加失败。
  • 执行如下命令,增加UDF。
    此操作会在Trino安装路径的 plugin 目录下新建一个文件夹,然后将路径所对应的文件上传到新建的文件夹下,并刷新当前函数列表。语法为 add jar "xxxxxx"
  • 如果是 步骤一:环境准备 中的方式一,则对应命令如下。
    add jar "oss://路径/udfjar.jar"
  • 如果是 步骤一:环境准备 中的方式二,则对应命令如下。
    add jar "oss://路径/udfdir"

    此时Trino能够识别出要上传的是一个目录,并将目录下的所有内容下载到集群上。

  • 如果是将UDF文件保存在HDFS上,则对应命令如下。
    add jar "hdfs://xxxxxx";
  • 如果是将UDF文件保存在本地文件系统上,则对应命令如下。
    add jar "file:///xxxxxx";
    重要 在使用本地文件系统时,需要将UDF文件上传到Trino运行的所有节点的对应路径下, file 后面需要三个正斜线(/)。
  •