【大数据】——处理框架

2023-10-31

说起大数据处理啊,一切都起源于Google公司的经典论文。在当时(2000年左右),由于网页数量急剧增加,Google公司内部平时要编写很多的程序来处理大量的原始数据:爬虫爬到的网页、网页请求日志;计算各种类型的派生数据:倒排索引、网页的各种图结构等等。这些计算在概念上很容易理解,但由于输入数据量很大,单机难以处理。所以需要利用分布式的方式完成计算,并且需要考虑如何进行并行计算、分配数据和处理失败等等问题。

 

针对这些复杂的问题,Google决定设计一套抽象模型来执行这些简单计算,并隐藏并发、容错、数据分布和均衡负载等方面的细节。受到Lisp和其它函数式编程语言map、reduce思想的启发,论文的作者意识到许多计算都涉及对每条数据执行map操作,得到一批中间key/value对,然后利用reduce操作合并那些key值相同的k-v对。这种模型能很容易实现大规模并行计算。

 

事实上,与很多人理解不同的是,MapReduce对大数据计算的最大贡献,其实并不是它名字直观显示的Map和Reduce思想(正如上文提到的,Map和Reduce思想在Lisp等函数式编程语言中很早就存在了),而是这个计算框架可以运行在一群廉价的PC机上。MapReduce的伟大之处在于给大众们普及了工业界对于大数据计算的理解:它提供了良好的横向扩展性和容错处理机制,至此大数据计算由集中式过渡至分布式。以前,想对更多的数据进行计算就要造更快的计算机,而现在只需要添加计算节点。

 

话说当年的Google有三宝:MapReduce、GFS和BigTable。但Google三宝虽好,寻常百姓想用却用不上,原因很简单:它们都不开源。于是Hadoop应运而生,初代Hadoop的MapReduce和HDFS即为Google的MapReduce和GFS的开源实现(另一宝BigTable的开源实现是同样大名鼎鼎的HBase)。自此,大数据处理框架的历史大幕正式的缓缓拉开。

 

今天我们要讲的数据处理框架,按照对所处理的数据形式和得到结果的时效性分类,可以分为两类:

1.批处理系统

2.流处理系统

 

 

1批处理系统

批处理的过程包括将任务分解为较小的任务,分别在集群中的每个计算机上进行计算,根据中间结果重新组合数据,然后计算和组合最终结果。所以批处理系统主要操作大量的、静态的数据,并且等到全部处理完成后才能得到返回的结果。

 

由于批处理系统在处理海量的持久数据方面表现出色,所以它通常被用来处理历史数据,很多OLAP(在线分析处理)系统的底层计算框架就是使用的批处理系统。但是由于海量数据的处理需要耗费很多时间,所以批处理系统一般不适合用于对延时要求较高的场景。

然后批处理系统的代表就是Hadoop。Hadoop是首个在开源社区获得极大关注的大数据处理框架,在很长一段时间内,它几乎可以作为大数据技术的代名词。

 

在2.0版本以后,Hadoop由以下组件组成:

1.分布式文件系统HDFS

2.资源管理器YARN

3.MapReduce

关于它们,AI菌已经在之前的文章讨论过了。没有看过的朋友可以去翻一翻。

 

而且Hadoop不断发展完善,还集成了众多优秀的产品如非关系数据库HBase、数据仓库Hive、数据处理工具Sqoop、机器学习算法库Mahout、一致性服务软件ZooKeeper、管理工具Ambari等,形成了相对完整的生态圈和分布式计算事实上的标准。

 

2流处理系统

流处理系统好理解,那什么是流处理系统呢?小学的时候我们都做过这么一道数学题:一个水池有一个进水管和一个出水管,只打开进水管x个小时充满水,只打开出水管y个小时流光水,那么同时打开进水管和出水管,水池多长时间充满水?

 

流处理系统就相当于这个水池,把流进来的水(数据)进行加工,比如加盐让它变成盐水,然后再把加工过的水(数据)从出水管放出去。这样,数据就像水流一样永不停止,而且在水池中就被处理过了。所以,这种处理永不停止的接入数据的系统就叫做流处理系统。

 

流处理系统与批处理系统所处理的数据不同之处在于,流处理系统并不对已经存在的数据集进行操作,而是对从外部系统接入的的数据进行处理。流处理系统可以分为两种:

逐项处理:每次处理一条数据,是真正意义上的流处理。

微批处理:这种处理方式把一小段时间内的数据当作一个微批次,对这个微批次内的数据进行处理。

 

不论是哪种处理方式,其实时性都要远远好于批处理系统。因此,流处理系统非常适合应用于对实时性要求较高的场景,比如日志分析,设备监控、网站实时流量变化等等。

然后流处理系统的代表就是Apache StormApache Samza了。

Apache Storm是一种侧重于低延迟的流处理框架,它可以处理海量的接入数据,以近实时方式处理数据。Storm延时可以达到亚秒级。

 

值得一提的是,一些国内的公司在Storm的基础上进行了改进,为推动流处理系统的发展做出了很大贡献。阿里巴巴的JStorm参考了Storm,并在网络IO、线程模型、资源调度及稳定性上做了改进。

 

提到Apache Samza,就不得不提到当前最流行的大数据消息中间件:Apache Kafka。Apache Kafka是一个分布式的消息中间件系统,具有高吞吐、低延时等特点,并且自带了容错机制。

 

如果已经拥有Hadoop集群和Kafka集群环境,那么使用Samza作为流处理系统无疑是一个非常好的选择。由于可以很方便的将处理过的数据再次写入Kafka,Samza尤其适合不同团队之间合作开发,处理不同阶段的多个数据流。

3混合处理系统

一些处理框架既可以进行批处理,也可以进行流处理。这些框架可以使用相同或相关的API处理历史和实时数据。

虽然专注于一种处理方式可能非常适合特定场景,但是混合框架为数据处理提供了通用的解决方案。

而当前主流的混合处理框架主要为SparkFlink

如果说如今大数据处理框架处于一个群星闪耀的年代,那Spark无疑就是所有星星中最闪亮的那一颗。Spark由加州大学伯克利分校AMP实验室开发,最初的设计受到了MapReduce思想的启发,但不同于MapReduce的是,Spark通过内存计算模型和执行优化大幅提高了对数据的处理能力

 

而且除了最初开发用于批处理的Spark Core和用于流处理的Spark Streaming,Spark还提供了其他编程模型用于支持图计算(GraphX)、交互式查询(Spark SQL)和机器学习(MLlib)。

 

有趣的是,同样作为混合处理框架,Flink的思想与Spark是完全相反的:Spark把流拆分成若干个小批次来处理,而Flink把批处理任务当作有界的流来处理。

 

除了流处理(DataStream API)和批处理(DataSet API)之外,Flink也提供了类SQL查询(Table API)、图计算(Gelly)和机器学习库(Flink ML)。而令人惊讶的是,在很多性能测试中,Flink甚至略优于Spark。

 

在目前的数据处理框架领域,Flink可谓独树一帜。虽然Spark同样也提供了批处理和流处理的能力,但Spark流处理的微批次架构使其响应时间略长。Flink流处理优先的方式实现了低延迟、高吞吐和真正逐条处理。

 

同样,Flink也并不是完美的。Flink目前最大的缺点就是缺乏在大型公司实际生产项目中的成功应用案例。相对于Spark来讲,它还不够成熟,社区活跃度也没有Spark那么高。但假以时日,Flink必然会改变数据处理框架的格局。

 

4大数据处理框架的选择

  1. 对于初学者

     

由于Apache Hadoop在大数据领域的广泛使用,因此仍推荐作为初学者学习数据处理框架的首选。虽然MapReduce因为性能原因以后的应用会越来越少,但是YARN和HDFS依然作为其他框架的基础组件被大量使用(比如HBase依赖于HDFS,YARN可以为Spark、Samza等框架提供资源管理)。学习Hadoop可以为以后的进阶打下基础。

 

Apache Spark在目前的企业应用中应该是当之无愧的王者。在批处理领域,虽然Spark与MapReduce的市场占有率不相上下,但Spark稳定上升,而MapReduce却稳定下降。而在流处理领域,Spark Streaming与另一大流处理系统Apache Storm共同占据了大部分市场(当然很多公司会使用内部研发的数据处理框架,但它们多数并不开源)。伯克利的正统出身、活跃的社区以及大量的商用案例都是Spark的优势。除了可用于批处理和流处理系统,Spark还支持交互式查询、图计算和机器学习。Spark在未来几年内仍然会是大数据处理的主流框架,推荐同学们认真学习。

 

另一个作为混合处理框架的Apache Flink则潜力无限,被称作“下一代数据处理框架”。虽然目前存在社区活跃度不够高、商用案例较少等情况,不过“是金子总会发光”,如果Flink能在商业应用上有突出表现,则可能挑战Spark的地位。

 

2.对于企业应用

 

如果企业中只需要批处理工作,并且对时间并不敏感,那么可以使用成本较其他解决方案更低的Hadoop集群。

 

如果企业仅进行流处理,并且对低延迟有着较高要求,Storm更加适合,如果对延迟不非常敏感,可以使用Spark Streaming。而如果企业内部已经存在Kafka和Hadoop集群,并且需要多团队合作开发(下游团队会使用上游团队处理过的数据作为数据源),那么Samza是一个很好的选择。

 

如果需要同时兼顾批处理与流处理任务,那么Spark是一个很好的选择。混合处理框架的另一个好处是,降低了开发人员的学习成本,从而为企业节约人力成本。Flink提供了真正的流处理能力并且同样具备批处理能力,但商用案例较少,对于初次尝试数据处理的企业来说,大规模使用Flink存在一定风险。

原文地址:https://www.cnblogs.com/yezl/p/7787377.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【大数据】——处理框架 的相关文章

  • Flink + Hudi 实现多流拼接(大宽表)

    1 背景 经典场景 Flink 侧实现 业务侧通常会基于实时计算引擎在流上做多个数据源的 JOIN 产出这个宽表 但这种解决方案在实践中面临较多挑战 主要可分为以下两种情况 维表 JOIN 场景挑战 指标数据与维度数据进行关联 其中维度数据
  • spark算子执行位置研究,driver端?executor端?

    参考资料 https cloud tencent com developer article 1545723 前言 spark算子的执行位置 driver端 还是executor端 这些之前其实没有注意过 最近在学流处理 发现这个还是很重要
  • Flink常用算子总结

    Streaming 算子 Map 将元素处理转换 再输出 map算子对一个DataStream中的每个元素使用用户自定义的Mapper函数进行处理 每个输入元素对应一个输出元素 最终整个数据流被转换成一个新的DataStream 输出的数据
  • Spark大数据分析与实战笔记(第一章 Scala语言基础-3)

    文章目录 1 3 Scala的数据结构 1 3 1 数组 数组的遍历 数组转换 1 3 2 元组 创建元组 获取元组中的值 拉链操作 1 3 3 集合 List Set Map 1 3 Scala的数据结构 对于每一门编程语言来说 数组 A
  • 大数据开发必备面试题Spark篇合集

    1 Hadoop 和 Spark 的相同点和不同点 Hadoop 底层使用 MapReduce 计算架构 只有 map 和 reduce 两种操作 表达能力比较欠缺 而且在 MR 过程中会重复的读写 hdfs 造成大量的磁盘 io 读写操作
  • flink-connector-jdbc_2.12 简介、中文文档、中英对照文档 下载

    flink connector jdbc 2 12 文档 下载链接 含jar包 源码 pom 组件名称 中文 文档 下载链接 中英对照 文档 下载链接 flink connector jdbc 2 12 1 14 3 jar flink c
  • Impala presto hbase hive sparksql

    Impala 技术点梳理 http www cnblogs com TiestoRay p 10243365 html Impala 优点 实时性查询 计算的中间结果不写入磁盘 缺点 对于内存的依赖过于严重 内存溢出直接导致技术任务的失败
  • spark内存模型

    Spark 1 6 开始使用了统一内存管理模块 UnifiedMemoryManager 并引入了堆外内存 Off heap memory 1 6之前的内存管理就不进行介绍了 spark堆内和堆外内存模型的示意图 注意 堆外内存是依赖于wo
  • flink学习42:tableAPI的join、union、排序、插入操作

    连接 内连接 外连接 集合操作 union 获取交集 获取差集 in 操作 排序操作 插入操作
  • Flink on Zeppelin-2

    Flink Interpreter类型 首先介绍下Zeppelin中的Flink Interpreter类型 Zeppelin的Flink Interpreter支持Flink的所有API DataSet DataStream Table
  • spark groupByKey和groupBy,groupByKey和reduceByKey的区别

    1 groupByKey Vs groupBy 用于对pairRDD按照key进行排序 author starxhong object Test def main args Array String Unit val sparkConf n
  • 【基础】Flink -- ProcessFunction

    Flink ProcessFunction 处理函数概述 处理函数 基本处理函数 ProcessFunction 按键分区处理函数 KeyedProcessFunction 定时器与定时服务 基于处理时间的分区处理函数 基于事件时间的分区处
  • Spark的常用概念总结

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 基本概念 1 RDD的生成 2 RDD的存储 3 Dependency 4 Transformation和Action 4 1 Transformatio
  • sparkstreamming 消费kafka(1)

    pom
  • JAVA 安装与简单使用

    JAVA简易安装 下载安装 环境变量 进入变量界面 设置变量 验证JAVA环境 运行Java程序 个人站 ghzzz cn 还在备案 很快就能访问了 下载安装 第一步当然是从官网下载安装java了 网上有很多的教程 这里简单的写一下 在这里
  • python+django基于Spark的国漫画推荐系统 可视化大屏分析

    国漫推荐信息是现如今社会信息交流中一个重要的组成部分 本文将从国漫推荐管理的需求和现状进行分析 使得本系统的设计实现具有可使用的价 做出一个实用性好的国漫推荐系统 使其能满足用户的需求 并可以让用户更方便快捷地国漫推荐 国漫推荐系统的设计开
  • 2023_Spark_实验二十九:Flume配置KafkaSink

    实验目的 掌握Flume采集数据发送到Kafka的方法 实验方法 通过配置Flume的KafkaSink采集数据到Kafka中 实验步骤 一 明确日志采集方式 一般Flume采集日志source有两种方式 1 Exec类型的Source 可
  • Apache Flink(十五):Flink任务提交模式

    个人主页 IT贫道 大数据OLAP体系技术栈 Apache Doris Clickhouse 技术 CSDN博客 私聊博主 加入大数据技术讨论群聊 获取更多大数据资料 博主个人B栈地址 豹哥教你大数据的个人空间 豹哥教你大数据个人主页 哔哩
  • 大数据毕设分享 flink大数据淘宝用户行为数据实时分析与可视化

    文章目录 0 前言 1 环境准备 1 1 flink 下载相关 jar 包 1 2 生成 kafka 数据 1 3 开发前的三个小 tip 2 flink sql 客户端编写运行 sql 2 1 创建 kafka 数据源表
  • Spark 中 BroadCast 导致的内存溢出(SparkFatalException)

    背景 本文基于 Spark 3 1 1 open jdk 1 8 0 352 目前在排查 Spark 任务的时候 遇到了一个很奇怪的问题 在此记录一下 现象描述 一个 Spark Application Driver端的内存为 5GB 一直

随机推荐

  • Linux下TCP编程

    服务器端在Linux环境下 Server cpp include
  • 从壹开始前后端分离[.netCore 不定期 ] 36 ║解决JWT自定义中间件授权过期问题

    缘起 哈喽 老张的不定期更新的日常又开始了 在咱们的前后端分离的 net core 框架中 虽然已经实现了权限验证 框架之五 Swagger的使用 3 3 JWT权限验证 修改 只不过还是有一些遗留问题 最近有不少的小伙伴发现了这样的一些问
  • flutter 修改iOS app图标 名称

    这里主要讲2点 一是 iOS app的图标尺寸大小 二 是如何修改iOS app图标以及名称 iOS图标尺寸大小 首先我们打开xcode 并打开项目 找到app图标的位置 接下来我们可以看到图标下面有很详细的pt提示 这里的pt跟web的p
  • 对四位数加密

    输入1个四位数 将其加密后输出 方法 1 将该数每一位上的数字加9 然后除以10取余 做为该位上的新数字 2 第1位和第3位上的数字互换 第2位和第4位上的数字互换 组成加密后的新数 例 括号内是说明 输入 1257 输出 The encr
  • IDEA JAVA文档注释和方法注释模板

    IDEA JAVA文档注释和方法注释模板 文档注释 if PACKAGE NAME PACKAGE NAME package PACKAGE NAME end parse File Header java ClassName NAME De
  • 修改mysql数据库的默认编码方式

    修改my ini文件 加上 default character set gb2312 设定数据库字符集 alter database da name default character set charset 1 设置数据库编码 etc m
  • 【ReID】【Skimming】Unity Style Transfer for Person Re-Identification

    ReID Skimming Unity Style Transfer for Person Re Identification 模型 实验 略读了新发布的基于GAN方法的ReID工作 Unity Style Transfer for Per
  • qt 绘制消息框_Qt——消息对话框的设计

    1 消息对话框是什么 消息对话框 MessageBox 提供了一个模态对话框 用来通知用户某些信息 或者用来询问用户一个问题并获得一个答复 先看下面2张图 第一张图是网易云音乐的界面截图 在删除歌单时 防止用户误操作 弹出了一个提示 提醒用
  • 可变参数, printf 实现的原理 ,va_start和va_end

    对于可变参数的函数可以 使用下面的宏来 获取输入的每一个参数 这些宏定义在stdarg h中 typedef char va list va start宏 获取可变参数列表的第一个参数的地址 list是类型为va list的指针 param
  • 大一python考试知识点_Python基础知识点整理

    参考资料 1 廖雪峰 内容整理 函数 函数返回 函数执行时遇到return即执行完毕 返回结果 没有return 执行完毕返回None return None可以简写为return 内建函数 高效快速 e g input ord pow i
  • 等保2.0一级安全要求

    第一级安全保护能力 应能够防护免受来自个人的 拥有很少资源的威胁源发起的恶意攻击 一般的自然灾难 以及其他相当危害程度的威胁所造成的关键资源损害 在自身遭到损害后 能够恢复部分功能 1安全通用要求 1 1安全物理环境 1 1 1物理访问控制
  • 04_Pandas获取和修改任意位置的值(at,iat,loc,iloc)

    04 Pandas获取和修改任意位置的值 at iat loc iloc 要在pandas DataFrame中的任何位置检索或更改数据 可以使用at iat loc iloc 位置的指定方法 at loc 行标签 行名 列标签 列名 ia
  • 一种基于光流的无人机仿生智能避障方法

    转自 https patents google com patent CN106155082A zh 一种基于光流的无人机仿生智能避障方法 技术领域 0001 本发明涉及一种单目视觉的基于光流的无人机智能仿生避障方法 特别是属于人 工智能以
  • android更新ui能在主线程,真的必须要在主线程更新UI吗?

    一般UI更新都会调用requestLayout 或者invalidate 自定义view 也要如此 android view RemotableViewMethod public void setWidth int pixels mMaxW
  • P1790 小胡同学的连通图

    用并查集做 include
  • Unity—“合成大西瓜”小游戏笔记

    期盼已久的合成大西瓜 来喽 这是一款一点也不好玩 但是可以一玩玩三个小时的小游戏 废话不多说 直接上代码 gt 水果脚本 音效脚本 UI分数脚本 玩家操作脚本 using System Collections using System Co
  • 从原理到应用落地,一文读懂推荐系统中的深度学习技术

    作者丨gongyouliu zandy 来源丨大数据与人工智能 ID ai big data 2016年DeepMind开发的AlphaGo在围棋对决中战胜了韩国九段选手李世石 一时成为轰动全球的重大新闻 被全球多家媒体大肆报道 Alpha
  • Linux GCC常用命令

    1简介 2简单编译 2 1预处理 2 2编译为汇编代码 Compilation 2 3汇编 Assembly 2 4连接 Linking 3多个程序文件的编译 4检错 5库文件连接 5 1编译成可执行文件 5 2链接 5 3强制链接时使用静
  • Excel做题记录——整数规划优化模型

    文章目录 题目 一 首先根据题目要求提取信息 并列出数学模型 二 通过Excel里的 规划求解 来解出答案 1 创建数据表格 2 根据数学模型设置数据 3 使用 规划求解 功能求解 i 变量都为整数 ii 约束量 总重量 小于等于50 参考
  • 【大数据】——处理框架

    说起大数据处理啊 一切都起源于Google公司的经典论文 在当时 2000年左右 由于网页数量急剧增加 Google公司内部平时要编写很多的程序来处理大量的原始数据 爬虫爬到的网页 网页请求日志 计算各种类型的派生数据 倒排索引 网页的各种