UDF管理
所有文档

          百度数据工厂 Pingo

          UDF管理

          概述

          在Pingo中,永久性UDF不使用SQL语句创建,而是使用文件系统来管理。此管理方式,相比于使用SQL的方式由如下几个显著的优点:

          1. UDF的文件与元数据统一存储,不会出现已经在元数据系统中注册了UDF,但错误删除了对应资源的情况。
          2. 拥有版本管理功能,同一个名字的函数可以存在多个版本,方便更新与回滚。
          3. 拥有测试版本概念,可以先小范围使用一个函数的新版本,待稳定后再更新为正式版。

          使用方法

          总体来讲,Pingo的UDF管理功能使用起来分为以下几个步骤:

          1. 生成符合Pingo UDF规范的jar包。
          2. 将jar包上传到Pingo的文件系统的指定路径,并使用指定的名称。
          3. 在Spark中使用。

          UDF打包规范

          UDF开发依然遵循Hive,Spark的UDF开发方法。当打包时,需将此UDF对应的类名写入到jar包的Manifest当中。写入规范如下:

          section 意义 可选
          PINGO udf-class-name udf class name udf的类名,对应create function时的class name 必选的
          PINGO udf-flag NORMAL or TEST UDF版本 可选的,不指定时,默认为为NORMAL

          例子

          Manifest-Version: 1.0
          Archiver-Version: Plexus Archiver
          Built-By: vinson
          Created-By: Apache Maven 3.5.0
          Build-Jdk: 1.8.0_45
          Name: PINGO
          udf-class-name: com.baidu.pingo.udfdemo.UdfDemo

          推荐的实现方法

          <build>
              <plugins>
                  <plugin>
                      <groupId>org.apache.maven.plugins</groupId>
                      <artifactId>maven-jar-plugin</artifactId>
                      <configuration>
                          <archive>
                              <manifestSections>
                                  <manifestSection>
                                      <name>PINGO</name>
                                      <manifestEntries>
                                          <udf-class-name>YOUR_UDF_CLASS_NAME</udf-class-name>
                                          <udf-flag>YOUR_UDF_FLAG</udf-flag>
                                      </manifestEntries>
                                  </manifestSection>
                              </manifestSections>
                          </archive>
                      </configuration>
                  </plugin>
              </plugins>
          </build>

          UDF上传路径与名称规范

          打包好的UDF必须以一定的规范命名,并上传到指定的文件系统路径才可生效。

          文件命名规范

          UDF文件名被'.'分割为4个部分,所有部分都区分大小写。

          UDF.FUNC_NAME.VERSION.jar
          部分 意义 规范
          1 UDF文件标识符 必须写为大写的 UDF
          2 UDF的名字 符合正则表达[\w_]+,即只包含数字字母和下划线
          3 UDF的版本 int范围内的正数
          4 文件后缀 必须写为小写的 jar

          路径规范

          SYSTEM_UDF_PATH/NS_NAME/UDF_FILE
          部分 意义 规范
          1 Pingo指定的放置UDF的根路径 Pingo指定。现在设置为文件系统的/lib
          2 UDF所属的命名空间 符合正则表达[\w_]+,即只包含数字字母和下划线
          3 UDF 文件 符合上一小节文件命名规范

          上传方法

          • Web上传

          进入数据管理-文件管理菜单下的/lib路径,点击上传按钮,将符合命名规范的UDF文件包进行上传。

          spark中的使用方法

          调用UDF时,需要使用全名,即:

          NS_NAME.UDF_NAME[.VERSION]  

          例子

          select test.udfdemo(name) from test_table;
          --注意下面的例子,由于Spark的语法分析会将"DIGIT"优先分析为小数,所以当使用指定版本的UDF时,需要在版本号上使用反引号
          select test.udfdemo.`2`(name) from test_table;

          权限控制

          通过控制文件的读权限,控制UDF的使用权限。文件权限更多内容请参考文件管理-文件权限管理

          上一篇
          计算资源
          下一篇
          数据安全