固定套路编程总结
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…