热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

数据处理框架数据处理是一个非常宽泛的概念,数据处理框架在数据架构中,主要是用于数据移动和分析这两大功能当中.对于数据移动,有离线数据移动和实时数据移动,也可以叫做是批量数据移动和

数据处理框架

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

批量数据处理框架

批量数据处理框架最经典的就是 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 可以运行在多种不同的分布式运算框架上.

未完待续

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


推荐阅读
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 深入理解Java虚拟机的并发编程与性能优化
    本文主要介绍了Java内存模型与线程的相关概念,探讨了并发编程在服务端应用中的重要性。同时,介绍了Java语言和虚拟机提供的工具,帮助开发人员处理并发方面的问题,提高程序的并发能力和性能优化。文章指出,充分利用计算机处理器的能力和协调线程之间的并发操作是提高服务端程序性能的关键。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • 什么是大数据lambda架构
    一、什么是Lambda架构Lambda架构由Storm的作者[NathanMarz]提出,根据维基百科的定义,Lambda架构的设计是为了在处理大规模数 ... [详细]
  • 【转】腾讯分析系统架构解析
    TA(TencentAnalytics,腾讯分析)是一款面向第三方站长的免费网站分析系统,在数据稳定性、及时性方面广受站长好评,其秒级的实时数据更新频率也获得业界的认可。本文将从实 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 从零学Java(10)之方法详解,喷打野你真的没我6!
    本文介绍了从零学Java系列中的第10篇文章,详解了Java中的方法。同时讨论了打野过程中喷打野的影响,以及金色打野刀对经济的增加和线上队友经济的影响。指出喷打野会导致线上经济的消减和影响队伍的团结。 ... [详细]
  • 2022年的风口:你看不起的行业,真的很挣钱!
    本文介绍了2022年的风口,探讨了一份稳定的副业收入对于普通人增加收入的重要性,以及如何抓住风口来实现赚钱的目标。文章指出,拼命工作并不一定能让人有钱,而是需要顺应时代的方向。 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • Hadoop源码解析1Hadoop工程包架构解析
    1 Hadoop中各工程包依赖简述   Google的核心竞争技术是它的计算平台。Google的大牛们用了下面5篇文章,介绍了它们的计算设施。   GoogleCluster:ht ... [详细]
  • mapreduce源码分析总结
    这篇文章总结的非常到位,故而转之一MapReduce概述MapReduce是一个用于大规模数据处理的分布式计算模型,它最初是由Google工程师设计并实现的ÿ ... [详细]
  • 如何在mysqlshell命令中执行sql命令行本文介绍MySQL8.0shell子模块Util的两个导入特性importTableimport_table(JS和python版本 ... [详细]
author-avatar
I技男
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有