flume java介绍

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 近期在做shark flume开发框架的测试,该框架是一个简单高效的面向数据的pipeline框架,采用flume java的思想,实现了一套flume java on MaxCompute的library。为了更好的了解shark自己也去阅读了flume java的paper,这里做一些总结,主要

背景

近期在做shark flume开发框架的测试,该框架是一个简单高效的面向数据的pipeline框架,采用flume java的思想,实现了一套flume java on MaxCompute的library。为了更好的了解shark自己也去阅读了flume java的paper,这里做一些总结,主要针对flume java的一些基本概念和思想,由此可以了解shark相较于我们已有的MaxCompute开发框架有哪些不同。

基本概念

MapReduce介绍

flume java底层也是通过Map Reduce的方式执行任务,所以这里先简单介绍一下MapReduce框架。
MapReduce是一个分布式计算框架,主要针对批量大数据处理的场景。大家很熟悉的hadoop和MaxCompute计算都是MapReduce思想的具体实现。MapReduce框架的计算过程主要分成map-combine-shuffle-reduce几个阶段,具体每个阶段的工作可以参见下图。(引用自http://blog.jobbole.com/84089/
hadoop1

husky介绍

Husky是一个基于MaxCompute Map-reduce计算框架的工具包,内部封装了一些常用的功能模块。比如最常用的Flow模块可以完成各种不同类型任务的依赖搭建,甚至是外部任务或者是天网任务。Flow可以尽量的并行任务,提高MaxCompute集群的资源利用率。Husky除了支持Map-reduce任务外还支持sql、exec、tunnel等多种类型的任务,目前在阿里妈妈使用非常广泛。

flume java介绍

flume java的本质是一个面向数据的计算框架,这里包含了两个主要概念,数据和操作。

基本数据类型

flume java定义了两种数据集合:PCollection表示一个不可变的数据集合,PTable是PCollection的一个子类,表示一个不可变的结构的数据集合。数据集合中的数据类型是用户可以随意指定,比如MaxCompute的record,基本数据类型,pb类型等,所以这两种数据集合基本可以涵盖我们日常见到的全部类型的数据。

基本操作

flume java定义了几种针对以上数据集合的基本的数据操作。
ParallelDo(DoFn)--该操作可以类比MapReduce框架中的map或reduce阶段,通过执行DoFn,将输入数据集合PCollection转换成集合PCollection。
用户在使用该算子的时候需要自己实现DoFn方法,实际上用户在使用flume java框架时就是在编写各种处理数据集合的Fn方法,并将这些数据处理转换的过程串联成一个完整的pipeline。
GroupByKey--该操作可以类比MapReduce框架中的shuffle阶段,作用是将相同的key对应的value聚合起来,即将PCollection处理成PCollection>的过程。
combineValue--该操作可以类比MapReduce框架中的combine阶段,将PCollection>处理成PCollection。
flattens--针对所有的输入数据集合做一个合并操作,即将多个PCollection合并成PCollection。

衍生操作

基于以上几种基本操作,flume java又封装了一些常用的衍生操作。
count--将PCollection经过parallelDo变换,groupByKey聚合和combineValue操作最终变成PTable。大数据计算里最常见的wordCount在flume java中可以用这样一个算子实现。
join--将PTable和PTable经过parallelDo变换,flatten聚合和又一次的parallelDo变换转变成PTable, PCollection>>。
top--计算一个PCollection中top n的元素,该算子是parallelDo,groupByKey和combineValue几种算子的封装。

以上就是flume java中定义的数据集合和操作,任何基于flume java思想实现的library都要实现这些基础的操作算子,然后再结合实际应用总结出更多的算子,并用基础算子加以实现封装,shark框架就结合实际应用封装了更多的衍生算子,让框架使用者更方便的使用。

任务执行

flume java的执行粒度是pipeline,用户通过前面介绍的一系列算子生成了一个pipeline后,flume java并不是马上开始执行这个pipeline。因为flume java的运行采用lazy模式,用户需要显示的调用一个执行命令,才会真正开始执行任务,前期会完成创建执行计划和执行计划的优化工作,所以最终执行的是已经优化完成的pipeline。

任务优化

flume java有多种复杂的优化机制,一种是针对执行计划进行优化,另外在调度上会根据数据量大小选择本地和远程执行的模式,这种支持local模式的机制在测试场景中非常实用,测试人员的小数据量的任务无需再提交到集群上跟大任务争资源,直接本地就可以执行,这将大大缩短测试的时间。
pipeline优化的核心思想就是将可以合并在同一个map reduce job中的任务进行合并,减少总体job数量同时减少中间数据的落地输出。
这里给出paper中一个优化的例子。
原始任务pipeline:
flume5
该图中每一个节点对应一个并行的数据操作,除去writes节点共有16个操作节点。
优化后的pipeline:
flume6
最终经过优化实际只需要执行2个map reduce任务即可。
具体的优化策略这里不再介绍,大家可以参考flume java的paper了解更详细的过程。

shark的特性

前面介绍过shark实际是实现了一套flume java on MaxCompute的library,包含了丰富的join算子,比如双流join、multi join、shard join、map join;多种聚合算子,sum、avg、top等;支持二次排序和一些集合运算。同时也采用了husky中的一些功能,比如采用xml配置描述pipeline,但配置过程已经大大简化。支持断点重跑,pipeline DAG可视化等功能。

总结

paper中给出了一系列的结论用于阐明该框架的优势,比如由于该框架的易用性,越来越多的开发人员开始使用这个框架编写任务;采用优化策略使得实际的mr任务数缩减到1/5,从而执行效率也得到提升;开发人员迁移到该框架后代码量也得到缩减。
在测试shark的过程中自己也编写了一些基于该框架的任务,自己的感觉是配置文件得到了简化,无需再去了解MaxCompute或者husky的一些接口,只需要专注对数据的处理,实际执行任务时也没有了各种中间数据的输出,对于一些比较简单的任务测试起来是非常方便的。当然这种优化有时候也是一把双刃剑,一旦最终结果出现问题,往往需要追溯每个中间步骤的结果,而在这种框架下中间步骤可能已经被优化合并了,所以也曾跟开发讨论过如何支持debug模式的方案。但整体来说该框架还是能大大提高测试开发效率的。
欢迎加入MaxCompute钉钉群讨论

1

MaxCompute连接:https://www.aliyun.com/product/odps?spm=5176.100239.blogcont62435.17.zXXbop&from=yq&id=60498

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
7月前
|
Shell
Flume【问题记录 01】【at org.apache.flume.node.Application.main(Application.java:xxx) 类问题整理+其他类型问题总结】【避坑指南】
【2月更文挑战第17天】Flume【问题记录 01】【at org.apache.flume.node.Application.main(Application.java:xxx) 类问题整理+其他类型问题总结】【避坑指南】
358 2
|
7月前
|
SQL Java 程序员
Flume【问题记录 02】【java.lang.NoSuchMethodError:com.google.common.base.Preconditions.checkArgument】【避坑指南】
【2月更文挑战第18天】Flume【问题记录 02】【java.lang.NoSuchMethodError:com.google.common.base.Preconditions.checkArgument】【避坑指南】
109 0
|
分布式计算 Hadoop
flume报错记录:java.net.ConnectException:拒绝连接; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused
flume报错记录:java.net.ConnectException:拒绝连接; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused
671 0
flume报错记录:java.net.ConnectException:拒绝连接; For more details see:  http://wiki.apache.org/hadoop/ConnectionRefused
|
7月前
|
存储 分布式计算 监控
【Flume】Flume 监听日志文件案例分析
【4月更文挑战第4天】【Flume】Flume 监听日志文件案例分析
|
7月前
|
存储 运维 监控
【Flume】flume 日志管理中的应用
【4月更文挑战第4天】【Flume】flume 日志管理中的应用
|
消息中间件 数据采集 SQL
1、电商数仓(用户行为采集平台)数据仓库概念、用户行为日志、业务数据、模拟数据、用户行为数据采集模块、日志采集Flume(一)
1、电商数仓(用户行为采集平台)数据仓库概念、用户行为日志、业务数据、模拟数据、用户行为数据采集模块、日志采集Flume(一)
|
4月前
|
存储 数据采集 数据处理
【Flume拓扑揭秘】掌握Flume的四大常用结构,构建强大的日志收集系统!
【8月更文挑战第24天】Apache Flume是一个强大的工具,专为大规模日志数据的收集、聚合及传输设计。其核心架构包括源(Source)、通道(Channel)与接收器(Sink)。Flume支持多样化的拓扑结构以适应不同需求,包括单层、扇入(Fan-in)、扇出(Fan-out)及复杂多层拓扑。单层拓扑简单直观,适用于单一数据流场景;扇入结构集中处理多源头数据;扇出结构则实现数据多目的地分发;复杂多层拓扑提供高度灵活性,适合多层次数据处理。通过灵活配置,Flume能够高效构建各种规模的数据收集系统。
93 0
|
2月前
|
SQL 分布式计算 Hadoop
Hadoop-19 Flume Agent批量采集数据到HDFS集群 监听Hive的日志 操作则把记录写入到HDFS 方便后续分析
Hadoop-19 Flume Agent批量采集数据到HDFS集群 监听Hive的日志 操作则把记录写入到HDFS 方便后续分析
50 2
|
2月前
|
存储 数据采集 分布式计算
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
54 1