大数据生态之数据处理框架探索

数据处理框架

数据处理是一个非常宽泛的概念,数据处理框架在数据架构中,主要是用于数据移动和分析这两大功能当中.对于数据移动,有离线数据移动和实时数据移动,也可以叫做是批量数据移动和流式数据移动.而对于分析这一块,有离线数据分析和实时数据分析,也可以称作是批量数据分析和流式数据分析.离线和实时,批量和流式,针对这两种不同的形式,就出现了多种不同的数据处理框架.有批量的数据处理框架,有流式的数据处理框架,也有批流融合的框架.

批量数据处理框架

批量数据处理框架最经典的就是 mapreduce 了,这也是 apache hadoop 最早期的形态,使用 mapreduce 对 hdfs 上面大批量的数据进行计算和处理.基于它写出来的应用程序能够运行在由上千个商用机器组成的大型集群上,并以一种可靠容错的方式并行处理大批量的数据集。但是由于 mapreduce 的编写并不很直观,对于开发人员的门槛较高,之后在 mapreduce 之上出现了新的产品,做为 mapreduce 的升级产品.那就是 apache pig 和 apache hive. Apache pig 和 apache hive 都是基于 mapreduce ,并给开发人员提供了更加简便使用的方法和接口以及更加丰富的语义处理.

  • Apache Pig是MapReduce的一个抽象。它是一个工具/平台,用于分析较大的数据集,并将它们表示为数据流。Pig通常与 Hadoop 一起使用;我们可以使用Apache Pig在Hadoop中执行所有的数据处理操作.
Apache Pig MapReduce
Apache Pig是一种数据流语言。 MapReduce是一种数据处理模式。
它是一种高级语言。 MapReduce是低级和刚性的。
任何具备SQL基础知识的新手程序员都可以方便地使用Apache Pig工作。 没有相关经验难以编写
在Apache Pig中执行Join操作非常简单。 在MapReduce中执行数据集之间的Join操作是非常困难的。
Apache Pig使用多查询方法,从而在很大程度上减少代码的长度。 MapReduce将需要几乎20倍的行数来执行相同的任务。
没有必要编译。执行时,每个Apache Pig操作符都在内部转换为MapReduce作业。 MapReduce作业具有很长的编译过程。
  • hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
Apache Hive MapReduce
通过SQL轻松访问数据的工具,从而实现数据仓库任务,如提取/转换/加载(ETL),报告和数据分析。 需要使用 java 等编程语言编写 mapreduce 程序来实现
对于各种不同的数据格式,可为之添加各种抽象的结构化信息,比如表,分区,桶 只能对原始数据进行手动的原始的文件管理
可以直接访问多种数据存储系统,包括 hdfs 和 hbase 等 只能直接访问 hdfs
可以使用更加除了 mapreduce 之外更加高级的执行引擎,比如 apache tez,apache spark 只能以 hadoop 作为执行引擎,效率低

Hive 和 Pig 最大的不同就是一种使用 Latin 语言,一种使用 HiveQL 语言.这就导致了如今 Hive 成为了绝对的主流,Pig 已经很少人用了.HiveQL 这种类 SQL 语言解决了批量数据处理的易用性问题,现在不仅开发人员能够编写大数据处理程序,普通的分析人员和业务人员也能够使用Hive进行大数据处理和分析. 但是 Hive 并没有解决速度问题,于是在 Hive 之上,基于 Hive,又出现了新的数据处理技术和框架,比如 impala,presto,kylin 等,这个领域技术方案非常繁荣.这里不赘述。

流式数据处理框架

流式数据处理,也称实时数据处理.数据是一条一条产生的,当数据产生的时候,我们可以把它先存起来,供后续处理,这就是上面所说的离线(批量)数据处理.而现在越来越多的做法是数据产生时就立马对它进行计算和分析,而这就是实时数据处理或者叫实时计算.而数据理论上是不断产生的,不断产生的数据不断的发往数据处理框架进行计算和分析,就像一条流,所以实时计算也称作是流式计算.还有一种做法是把批量数据读成一条一条的进行处理(比如 nifi).所以流式计算处理的不一定是实时数据,也可能是离线数据.
流式框架最经典,也是最老的就是 Storm,Storm 一款开源分布式实时计算框架.它相对比较稳定,具有高容错性,也比较高效.

Storm 的基本概念:

  • Stream
    以Tuple为基本单位组成的一条有向无界的数据流
  • Tuple
    Integer,long,short,byte,string,double,float,boolean和byte array,包括自定义类型.
  • Topology
    计算逻辑的封装
    由spouts和bolts组成的图,通过stream grouping将图中的spouts和bolts连接起来
    类同MapReduce中的job.

Storm 是一款比较老的框架,流式计算的开创者,推出后也有非常广泛的应用.流式计算的框架技术一直不断发展,后来也出现了Storm的类似框架 samza.
国内阿里巴巴也对 Storm 进行了改良 : jstorm ,jstorm 更加稳定,功能更强大. 对 Storm 来说,现在处于一个英雄垂暮的阶段,很多特性是在它那个时代是没有考虑过的.

最近几年,流式数据处理领域,又出现了一些新的参与者.由于流式数据往往不是直接发往流式计算平台进行处理,它需要一个中间层过渡,进行数据的缓冲,缓存和分发,这个中间层就是通常我们所说的消息系统,消息中间件.(老的说法也叫消息队列,但现在的消息系统要比消息队列复杂和强大很多倍).几乎所有的流式计算过程都会前置一个消息系统.所以后来消息系统就干脆集成上流式数据处理的功能,把流式数据处理也一并做了.现在最流行的消息系统就是 kafka ,kafka 在2017 年就推出了 kafka streams.消息系统的后起之秀: apache pulsar ,自带 Pulsar Functions,一个流式数据处理引擎(pulsar 号称是 kafka 的替代品 ,这部分内容待补充)。

Kafka Stream 现在是一个 lib 库,使用这个库可以很方便的构建以 kafka 集群为数据来源的应用和微服务. Kafka streams 最大的特点就是它较为简单,对于开发人员来说门槛比较低:

  • 开发只需要一个简单 lib 包,除了 kafka 外没有其余外部依赖了
  • 保证只处理一次的语义,开发人员不需要额外关心
  • 不仅支持一条条处理数据,也能够基于窗口操作处理多条数据
  • 对于流式处理提供高级简单的DSL ,也提供比较低级的处理接口

Kafka Stream 处理的拓扑图:

  • stream 是一个抽象概念,代表了没有边界的,持续更新的数据 record 流. Data record 是一个键值对.
  • stream processor 整个拓扑图中的一个节点,代表中间的一个处理步骤.有2个特殊的processor: source processor ; sink processor
  • stream processing application 一个流式处理应用可由多个处理流程构成:

批流融合数据处理框架

无论是批量处理还是流式处理,技术框架的发展最终都要走向统一,变得更加简单,更加易用.而Spark 就是这个统一者.Spark 框架一经出现,立马就流行起来.如今 Spark 是一个统一的大规模数据处理和分析计算引擎,并且也有非常丰富的spark 生态,官方生态有 DataFrames and SQL (批处理引擎,其中SQL 是比hive 更快的查询引擎),Spark Streaming(流处理引擎),MLib(机器学习库),GraphX(图计算引擎).还有很多基于Spark 的第三方生态.比如 apache mahout(用于开发机器学习应用的框架),Koalas(Python库 pandas 的 Spark 版本).
还有前不久开源的Delta Lake,一个基于 Spark 的数据湖解决方案,它作为一个数据存储层(storage layer),具有非常强大的特性.

Spark 是这个领域老牌框架,但是也有后来者.那就是 Flink,这个数据流计算的新贵.

Flink 的出现是为了解决 Spark Streaming 的一个设计缺陷,Spark Streaming 的设计是通过 micro-batch 微批处理来模拟流处理,实际上并不是真正的流处理.也就是说 Spark Streaming 是达不到 Storm 那样毫秒级的低延时的.Flink 解决了这个问题,它是真正的流处理,真毫秒级的低延时.
虽然,Spark Streaming 在新版本中推出了 Structure streaming,废弃了之前的微批处理,也达到了真正的低延时.不过,目前,国内的公司还是越来越多选择 Flink 作为核心的数据处理框架.这里引用 OPPO 大数据平台负责人张俊的一句话:
但是我们认为,整个技术框架发展,技术最终肯定是趋同的。为什么选择 Flink?还有一个很重要的原因是最近两年 Flink 在国内的发展普及程度。包括像阿里团队,他们也在大力地宣传跟投入,包括今天 QCon 大会上大沙和云邪两位老师,他们也是阿里团队社区的资深大 V。


批流融合处理框架还一个小众的框架 Apache Apex,跟 Flink 差不多.

批流融合之上

上面说过,技术框架的发展最终都要走向统一.如今批流数据和流式数据处理现在统一了,那还能继续统一吗.答案是能.目前批流一体数据处理框架有Spark,有 Flink ,还有基于公有云的 google cloud dataflow.由于开源,这些技术框架都会相互借鉴,最终都会是大同小异.所以就有办法把这些处理框架再统一起来,形成一个统一的编程模型.这个就是 Apache Beam.
Apache Beam 不是一个数据处理引擎,它不自己处理数据.它只是一层 layer.这层 layer 可运行在各种不同的数据处理引擎之上,比如 spark ,flink 等.它的作用简单来说,就是beam编写的一套代码,可以直接运行在 spark,flink 等各种不同的数据处理引擎中.


Apache beam 本质上是一套 sdk ,这一套 sdk 使用统一的编程模型来编写批处理和流处理程序,并且还提供了不同语言的比如python,go ,java的版本.
Beam 提供的这个编程模型就是 Pipeline,使用 beam 来编程,其实就是构建好一个 pipeline ,也可以叫做是数据处理程序的抽象.

这就是一个基本的pipeline,其实跟spark ,flink 中的DAG 图都差不多.

Pipeline 编写时,我们要指定它的runner,这就是 apache beam 的另一个抽象
Runner 即 pipeline 的执行引擎,例如 spark Runner,flink runner 等.beam 就是通过这个 runner 使得 pipeline 可以运行在多种不同的分布式运算框架上.

未完待续

数据处理框架一直飞速发展,但总体来说,有一个清晰的内在发展逻辑:那就是在易用性上,统一性上,经济性上不断向前。目前的国内的一个趋势是整个大数据栈也在往云上走,因为云完全契合这三点。

原文地址:https://www.cnblogs.com/hdpdriver/p/12400577.html

时间: 2024-11-02 00:25:26

大数据生态之数据处理框架探索的相关文章

追本溯源 解析“大数据生态环境”发展现状(CSDN)

程学旗先生是中科院计算所副总工.研究员.博士生导师.网络科学与技术重点实验室主任.本次程学旗带来了中国大数据生态系统的基础问题方面的内容分享.大数据的发展越来越快,但是对于大数据的认知大都还停留在最初的阶段——大数据是一类资源.一类工具,其实“大数据”更多的体现的是一个认知和思维,是一种战略.认知和文化. 以下为分享实录全文: 一年多来,通过组织中国大数据技术大会.CCF大数据学术会议以及各类大大小小的应用峰会与学术论坛,结合我们科学院网络数据科学与技术重点实验室所承担的与大数据相关的重大基础课

从0到1构建大数据生态系列1:数据蛮荒中的拓荒之举

缘起 我们都知道,当前大数据的需求基本属于遍地开花.无论是帝都.魔都,还是广州.深圳,亦或是全国其他各地,都在搞大数据:不管是不到百人的微小公司,还是几百上千人的中型公司,亦或是上万的大型公司,都在需求数据岗位. 大公司暂且不论,他们一切都走在前头.那么,对于中小型企业来说,开始尝试以数据的思维去思考问题,开始涉足大数据领域,这就是一个从0到1的过程了. 有(bu)幸(xing),近半年来,我亲自见证以及亲身体会到了这个过程,或者至今仍然在完善1这个过程中.期间,有痛苦有坑.有喜悦有成功.有沉静

大数据生态之 ——HDFS

大数据生态之-----HDFS HDFS工作机制 客户端上传文件时,一方面由datanode存储文件内容,另一方面有namenode负责管理block信息(切块大小,副本数量,位于datanode上的位置信息) 一丶namenode的工作职责: 记录元数据 a) 文件的路径 b) 文件的副本数量 c) 文件切块大小 d) block块信息 e) block块的位置信息 2. 响应客户端请求 3. 平衡datanode上block文件块的存储负载 datanode启动后会向namenode汇报自身

构建企业大数据生态的关键在于 , 打通内部数据!

一个企业要想保持长远的发展,在市场中成为一个强有力的生命个体,必然要注重企业组织之间的协调.合作关系,与环境协同进化,也就是所谓的企业生态系统.而企业信息化或数据化作为管理的重要支撑,是这生态系统中的关键一环. <2015中国大数据应用前沿调研报告>指出,在对于"贵公司认为打造生态系统的重要性在何处"调查时,接近一半的受访企业选择了"打通企业内部部门数据,更好的服务业务增长".对于"贵公司为全面实现大数据战略首要的关注点",排名第二的

大数据下基于Tensorflow框架的深度学习示例教程

近几年,信息时代的快速发展产生了海量数据,诞生了无数前沿的大数据技术与应用.在当今大数据时代的产业界,商业决策日益基于数据的分析作出.当数据膨胀到一定规模时,基于机器学习对海量复杂数据的分析更能产生较好的价值,而深度学习在大数据场景下更能揭示数据内部的逻辑关系.本文就以大数据作为场景,通过自底向上的教程详述在大数据架构体系中如何应用深度学习这一技术.大数据架构中采用的是hadoop系统以及Kerberos安全认证,深度学习采用的是分布式的Tensorflow架构,hadoop解决了大数据的存储问

大数据抓取采集框架(摘抄至http://blog.jobbole.com/46673/)

摘抄至http://blog.jobbole.com/46673/ 随着BIG DATA大数据概念逐渐升温,如何搭建一个能够采集海量数据的架构体系摆在大家眼前.如何能够做到所见即所得的无阻拦式采集.如何快速把不规则页面结构化并存储.如何满足越来越多的数据采集还要在有限时间内采集.这篇文章结合我们自身项目经验谈一下. 我们来看一下作为人是怎么获取网页数据的呢? 1.打开浏览器,输入网址url访问页面内容.2.复制页面内容的标题.作者.内容.3.存储到文本文件或者excel. 从技术角度来说整个过程

大数据系列之Hadoop框架

Hadoop框架中,有很多优秀的工具,帮助我们解决工作中的问题. Hadoop的位置 从上图可以看出,越往右,实时性越高,越往上,涉及到算法等越多. 越往上,越往右就越火-- Hadoop框架中一些简介 HDFS HDFS,(Hadoop Distributed File System) hadoop分布式文件系统.在Google开源有关DFS的论文后,由一位大牛开发而成.HDFS的建立在集群之上,适合PB级大量数据的存储,扩展性强,容错性高.它也是Hadoop集群的基础,大部分内容都存在了HD

【Hadoop】如何形象描述大数据生态?

作者:千岁大王链接:https://www.zhihu.com/question/27974418/answer/39845635来源:知乎著作权归作者所有,转载请联系作者获得授权. Google内部早就开始玩大数据,发现时代跟不上他们的节奏,担心技术后继无人,于是发表了三篇论文(搜下gfs bigtable mapreduce).有几个工作不饱和,整天没事干的人,想搞个开源的网页搜索(lucene nutch).看到那三篇论文被震惊了,于是开始依葫芦画瓢,在一个二流的互联网公司(Yahoo)开

大数据算法---海量数据处理面试题整理

1. 海量数据处理常用数据结构 [Bloom Filter] [Bit map] [Hash] [Trie] [堆] 2. 面试题剖析 海量数据面试题的常见考点,无非就是两个,一是数据太大,无法一次性装入内存:二是数据量太大,无法单机快速处理 参考资料 https://blog.csdn.net/v_july_v/article/details/7382693 https://blog.csdn.net/v_JULY_v/article/details/6279498 原文地址:https://