flume java介绍

背景

近期在做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/)

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:

该图中每一个节点对应一个并行的数据操作,除去writes节点共有16个操作节点。
优化后的pipeline:

最终经过优化实际只需要执行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钉钉群讨论

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

时间: 2024-09-08 20:25:09

flume java介绍的相关文章

JAVA学习(一):Java介绍及其平台、开发环境的配置与搭建

Java介绍及其平台.开发环境的配置与搭建 1.Java的介绍 Java是一种面向对象的编程语言,具有跨平台.可移植.分布式.简单.可扩展等诸多特性.Java可以进行桌面应用.Web应用.分布式系统及嵌入式等应用程序的开发. Java包含3个不同版本,即J2ME/J2EE/J2SE(微缩版/企业版/标准版). 2.JDK的下载与安装.配置 (1).JDK下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html

Java核心编程卷1:基础

现在已经步入了21世纪,我们很难想象曾经Java相关的图书是那样的稀少,但这就是Java刚出现时的情况.那时所有与Java相关的图书基本上都是由Sun公司的几个工程师们所发布的,比如说Arthur Van Hoff et.al所写的"Hooked on Java"以及Patrick Naughton所写的"The Java Handbook". 当然了,这些图书填补了Java的空白,不过每本书都有3.400页,这些图书都假设读者了解程序,特别是面向对象程序设计. 1

JAVA基础教程汇总

到这一篇博客为止,JAVA的基础部分已经介绍完了,这一篇为基础部分的汇总. JAVA介绍 JAVA概述 Java的特点 JDK/bin目录下的不同exe文件的用途 JAVA环境变量配置 第一个JAVA程序 第一个JAVA程序解析 JAVA语法基础 JAVA语法基础之标识符和关键字 JAVA语法基础之变量和基本数据类型 JAVA语法基础之运算符 JAVA语法基础之流程控制 JAVA语法基础之数组 JAVA面向对象 JAVA面向对象之对象和类 JAVA面向对象之构造方法 JAVA面向对象之方法 JA

Java是什么,Java是什么意思

一.前言 『Java』从1995年的暑假开始在计算机业界就受到了高度注意,特别是在Internet和多 媒体(Multimedia)相关产品类方面.Java为何有如此这么大的魅力?人作如此的比喻: Java在全球资讯网(World Wide Web, WWW)地位就如同电子表格(Spreadsheet)与个人计 算机(PC)的关系.那Java究竟有那些特色呢? Java是一种软件技术 是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言 是一种为 Inte

阿里巴巴大数据计算平台MaxCompute(原名ODPS)全套攻略(持续更新20171122)

  概况介绍 大数据计算服务(MaxCompute,原名ODPS,产品地址:https://www.aliyun.com/product/odps)是一种快速.完全托管的TB/PB级数据仓库解决方案.MaxCompute向用户提供了完善的数据导入方案以及多种经典的分布式计算模型,能够更快速的解决用户海量数据计算问题,有效降低企业成本,并保障数据安全.本文收录了大量的MaxCompute产品介绍.技术介绍,帮助您快速了解MaxCompute/ODPS. MaxCompute 2.0:阿里巴巴的大数

MaxCompute文章索引

概况介绍: MaxCompute 2.0 生态开放之路及最新发展 10年老兵带你看尽MaxCompute大数据运算挑战与实践 一分钟了解阿里云产品:大数据计算服务MaxCompute概述 数加平台如何通过Serverless 架构实现普惠大数据 淘宝大数据之路 应用案例: 日志分析: 云数据,大计算-海量日志数据分析与应用 <海量日志数据分析与应用>之数据采集 <海量日志数据分析与应用>之社交数据分析:好友推荐 <海量日志数据分析与应用>之报表分析与展现 <海量日

什么时候不应该使用 XML(2)

xml <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />  仅仅因为知道某些东西是 XML 格式并不意味着可以用一般 XML 语法分析器来理解输入.尝试将来自木星卫星的光谱数据塞进公司的记帐程序中也许是有趣的,但这会惹恼会计.这可能象剪切 Apache 配置文件并将它粘贴到图形程序中.公共的数据格式是了不起的,但语法标准不暗示所有程序能够理解所有数据. XML 是差的人机

PHP 开发人员:充实您的 XML 工具箱

xml PHP 对 XML 的支持随着 PHP 的流行不断在增强.可以从本文中找出近一打 PHP 开发人员可用的 XML 工具. 工具顾问 Craig Knudsen 还描述了一个从 PHP 内部访问更多 Java 工具的方法.PHP 对 XML 的支持始于版本 3.06,当时 James Clark 流行的基 于 C 的 expat 语法分析器首次作为 PHP 3 模块集成到了该版本.自那时起,不断地开发了许多用于 XML 的 PHP 模块和类:有关我在最近一次对目前供应工具调查中发现的一些工

Tomcat安装+Nginx反向代理Tomcat+Apache使用mod_jk+mod_proxy反向代理和负载均衡【图解】

一.Tomcat简介 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目由Apache.Sun 和其他一些公司及个人共同开发而成.由于有了Sun 的参与和支持最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现Tomcat 5 支持最新的Servlet 2.4 和JSP 2.0 规范.因为Tomcat 技术先进.性能稳定而且免费因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可成为目前比较流行