本文为您介绍如何使用IntelliJ IDEA开发实时计算自定义函数,包括搭建开发环境和自定义函数引用实时计算作业。

说明
  • 本文基于IntelliJ IDEA开发工具,请单击下载工具
  • 仅独享模式支持自定义函数功能。

下载及配置Maven

  1. 下载Maven
    1. 登录Maven官网下载页面 ,下载apache-maven-3.5.3-bin.tar.gz
    2. 解压下载的安装包到指定目录,例如/Users/<userName>/Documents/maven
  2. 配置环境变量
    1. 执行vim ~/.bash_profile命令。
    2. .bash_profile文件中添加如下命令,设置环境变量。
      export M2_HOME=/Users/<userName>/Documents/maven/apache-maven-3.5.3
      export PATH=$PATH:$M2_HOME/bin
    3. 保存.bash_profile文件,并退出。
    4. 执行source ~/.bash_profile命令使配置生效。
  3. 查看配置是否生效

    执行mvn -v命令,如果打印如下信息,则配置生效。

    Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-04T03:39:06+08:00)
    Maven home: /Users/<userName>/Documents/maven/apache-maven-3.5.0
    Java version: 1.8.0_121, vendor: Oracle Corporation
    Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre
    Default locale: zh_CN, platform encoding: UTF-8
    OS name: "mac os x", version: "10.12.6", arch: "x86_64", family: "mac"

搭建开发环境

  1. 环境搭建页面下载Demo(RealtimeCompute-udxDemo.gz文件)。
  2. 在Linux环境下解压RealtimeCompute-udxDemo.gz
    tar xzvf RealtimeCompute-udxDemo.gz                
  3. 打开IntelliJ IDEA,单击Open打开下载的Demo。

操作步骤

  1. 创建Package。
    1. 右键单击java > New > Package
    2. New Package中输入Package名称。本文以com.hjc.test.blink.sql.udx为例。
    3. 单击OK
  2. 创建Class。
    1. 右键单击com.hjc.test.blink.sql.udx > New > Java Class
    2. Create New Class中,输入Class名称。
      说明 King保持默认选择Class
    3. 单击OK
  3. 在Class中输入以下代码。
    package com.hjc.test.blink.sql.udx;
    
    import org.apache.flink.table.functions.FunctionContext;
    import org.apache.flink.table.functions.ScalarFunction;
    
    public class StringLengthUdf extends ScalarFunction {
        // 可选,0pen方法可以不写。
        // 需要添加代码"import org.apache.flink.table.functions.FunctionContext;"。
        @Override
        public void open(FunctionContext context) {
            }
        public long eval(String a) {
            return a == null ? 0 : a.length();
        }
        public long eval(String b, String c) {
            return eval(b) + eval(c);
        }
        //可选,Close方法可以不写。
        @Override
        public void close() {
            }
    }
  4. 在Terminal中输入mvn packagemvn assembly:assembly,将项目写入JAR包。
    说明
    1. 如果需要将第三方依赖写入JAR包,请使用mvn assembly:assembly
    2. 编译后的JAR包为RealtimeCompute-udxDemo/target/RTCompute-udx-1.0-SNAPSHOT.jarRealtimeCompute-udxDemo/target/RTCompute-udx-1.0-SNAPSHOT-jar-with-dependencies.jar(将第三方依赖写入JAR包)。
  5. 将JAR包引用到实时计算作业中。
    说明 在上传JAR包时,JAR包大小上限为300M。如果JAR包超过300M,请在集群绑定的OSS上上传JAR,或通过OpenAPI的方式上传 JAR。
    1. 登录实时计算控制台
    2. 单击顶部菜单中的开发,进入开发页面。
    3. 在左侧的导航栏中单击资源引用
    4. 资源引用页签的右上角,单击新建资源
    5. 上传资源页面输入资源配置信息。
      参数名称 说明
      上传方式 当前仅支持本地上传。
      说明 在上传JAR包时,JAR包大小上限为300M。如果JAR包超过300M,请在集群绑定的OSS上上传JAR,或通过OpenAPI的方式上传 JAR。
      资源选择 单击选择资源,选择需要引用的资源。
      资源名称 输入资源名称。
      资源备注 输入资源备注信息。
      资源类型 选择引用资源类型,JAR、DICTIONARY或PYTHON。
    6. 资源引用页签中,将鼠标悬停在对应作业的右侧的更多上。
    7. 选择下拉列表中的引用,将资源中的代码输入实时计算作业编辑窗口。
    8. 在作业的编辑窗口的顶部,输入自定义函数声明,示例如下。
      CREATE FUNCTION stringLengthUdf AS 'com.hjc.test.blink.sql.udx.StringLengthUdf';