固定格式编程汇总

固定套路编程总结

1.Hive UDF/UDTF/UDAF

(1)导入依赖

//1.导入依赖
<dependencies>
		<dependency>
			<groupId>org.apache.hive</groupId>
			<artifactId>hive-exec</artifactId>
			<version>3.1.2</version>
		</dependency>
</dependencies>

(2)编码,创建类继承GenericUDF/GenericUDTF,重写三个方法

//2.创建类继承GenericUDF
//给定一个基本数据类型
//返回一个基本数据类型长度
public class MyUDF extends GenericUDF {
   
    //重写三个方法
    
    //初始化方法
    //判断参数个数
    //判断参数类型
    //约定返回值类型
    @Override
    public ObjectInspector initialize(ObjectInspector[] arguments) throws UDFArgumentException {
        
    }
    
    //解决具体逻辑的
    @Override
    public Object evaluate(DeferredObject[] arguments) throws HiveException {

    }
    
    //用于获取解释的字符串
    @Override
    public String getDisplayString(String[] children) {
     
    }
}

​ (3).在hive的命令行窗口创建函数

###### 临时函数
# 1.将编写好的程序打成jar包上传到服务器/opt/module/hive/datas/myudf.jar
# 2.将jar包添加到hive的classpath,临时生效
hive (default)> add jar /opt/module/hive/datas/myudf.jar;
# 3.创建临时函数与开发好的java class关联
hive (default)> create temporary function 函数名 as "com.xxx.hive.udf.MyUDF";
# 4.在hql中使用自定义的临时函数
hive (default)> select ename,函数名(ename) ename_len from emp;
# 5.删除临时函数
hive (default)> drop  temporary function 函数名;

###### 永久函数
# 创建永久函数
# 注意:注意 因为add jar 本身也是临时生效,所以在创建永久函数的时候,需要制定路径(并且因为元数据的原因,这个路径还得是hdfs上的路径)
hive (default)> create function 函数名 as "com.xxx.hive.udf.MyUDF" using jar "hdfs://hadoop102:8020/udf/myudf.jar";

2.Flume自定义拦截器编码

(1)导入依赖

  <dependencies>
        <dependency>
            <groupId>org.apache.flume</groupId>
            <artifactId>flume-ng-core</artifactId>
            <version>1.9.0</version>
        </dependency>
  </dependencies>

(2)编码。

​ ①自定义类类并实现Interceptor接口

​ ②实现接口的4个方法

​ ③创建静态内部类MyBuilder实现flume的Builder接口

public class CustomInterceptor implements Interceptor {
    //初始化方法
    @Override
    public void initialize() {
    }

    //处理单条Event
    @Override
    public Event intercept(Event event) {
  		...
        // 返回event
        return event;
    }

    //调用intercept,处理多条event
    @Override
    public List<Event> intercept(List<Event> list) {
        //循环多条event
        for (Event event : list) {
            // 处理每一条event
            intercept(event);
        }
        //返回list
        return list;
    }

    //关闭
    @Override
    public void close() {
    }

    // 静态内部类MyBuilder
    public static class MyBuilder implements Builder {

        @Override
        public Interceptor build() {
            // 返回拦截器
            return new CustomInterceptor();
        }

        @Override
        public void configure(Context context) {

        }
    }
}

(3)编辑Flume配置文件

a1.sources.r1.interceptors.i1.type = com.xxx.flume.CustomInterceptor$Builder

/**************************************************************************************************************/
To Be Continued…

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值