百度数据工厂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的使用权限。文件权限更多内容请参考文件管理-文件权限管理

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