用flume的intercepter作数据格式转换和清洗
来源:互联网 发布:python 频域分析 编辑:程序博客网 时间:2024/04/29 18:04
最近在工作中,用到spark streaming做数据解析和实时的数据计算,由于数据量比较大,而计算资源有限,spark的处理性能总是跟不上。观察之后发现,数据格式的解析占用了大量时间。整个数据的流程是nginx -> flume -> kafka -> spark,除了数据量较大,spark 无法及时处理之外,还存在kafka各个partition的数据分布不均衡,spark的job只有少数几个有数据,其他完全无数据输入。为改善这种情况,决定自定义flume的拦截器,由于flume的source读到的是nginx的原始日志,需要做解析后才能进行后续计算,而在spark中,此处又成了影响性能的最主要的因素,于是想到在拦截器中,将数据解析也完成。
flume自定义拦截器只需要实现Interceptor接口即可,具体方法如下:
public class FormatInterceptor implements Interceptor {@Overridepublic void initialize() {// TODO Auto-generated method stub}@Overridepublic Event intercept(Event event) {//此处做自己的处理return event;}@Overridepublic List<Event> intercept(List<Event> events) { List<Event> list = Lists.newArrayListWithCapacity(events.size()); for (Event event : events) { Event e = intercept(event); if (interceptedEvent != null) { list.add(e); } } return list;}@Overridepublic void close() {// TODO Auto-generated method stub}public static class Builder implements Interceptor.Builder { //使用Builder初始化Interceptor @Override public Interceptor build() { return new FormatInterceptor(); }@Overridepublic void configure(Context context) {// TODO Auto-generated method stub} }}
打包并放到flume的lib目录下
在配置文件里添加
hdp2.sources.s1.interceptors = i1
hdp2.sources.s1.interceptors.i1.type = com.xx.flume.interceptor.FormatInterceptor$Builder
这样就可以了
经测试发现,之前spark 2min为一个batch,数据解析放在后边,而且数据倾斜的情况下,要将近20min才能完成,改进之后,只要几秒就可以了
除此之外,本来是有个疑问,这样会不会影响flume的性能,对数据解析的代码做了性能测试,是可以满足现在的数据处理要求的,并且查看源码后发现,flume本身就是多线程处理的,经过一段时间的观察,也确实没有发生数据阻塞之类的问题
- 用flume的intercepter作数据格式转换和清洗
- spark 关于数据格式的清洗
- 数据格式转换和数据格式扩展的区别与联系
- AJAX中数据格式的转换和分类
- JavaScript和json对数据格式的转换
- 使用JAVA API和MapReduce读取HBase里的数据(可用作HBase数据清洗)
- 数据格式介绍和转换
- 自定义webwork的Intercepter和Result实现简单工作流
- 拦截器Intercepter和过滤器Filter的比较
- 常见数据格式的转换
- stingstream的数据格式转换
- libSVM的数据格式转换
- 数据清洗、转换、合并和重构
- 数据挖掘:数据清洗、转换和消减
- pandas 学习笔记-- 数据清洗和转换
- 数据格式的转换要和数据处理分开进行
- SegY 数据格式的转换小结
- easyui tree 的数据格式转换
- JavaScript强化教程——JavaScript 运算符
- Django会话、用户和注册
- jquery 经常用到的并且需要注意的地方。
- 关于TextView 中设置一行显示字数的两个属性: maxEms 与 maxLength
- ubuntu16.04 SVN的安装与使用
- 用flume的intercepter作数据格式转换和清洗
- 【HDU 2717】Catch That Cow(BFS)
- 2016长乐夏令营 Day7
- leetcode_c++:链表:Remove Linked List Elements(203)
- java格式化时间到毫秒
- 文章标题
- POJ 2349Arctic Network【最小生成树】
- I/O流之--转换流:InputStreamReader 和InputStreamWriter
- CSS高级技巧:阴影效果