大规模计算引擎Spark编程

843 阅读6分钟

Spark编程

关于作者

  • 作者介绍

🍓 博客主页:作者主页
🍓 简介:JAVA领域优质创作者🥇、一名在校大三学生🎓、在校期间参加各种省赛、国赛,斩获一系列荣誉🏆
🍓 关注我:关注我学习资料、文档下载统统都有,每日定时更新文章,励志做一名JAVA资深程序猿👨‍💻


1.1 大数据时代

1.1.1 第三次信息化浪潮

第三次信息化浪潮

image-20211216110700380

1.1.2 信息科技为大数据时代提供技术支撑

存储设备容量不断增加

image-20211216110839063

CPU处理能力大幅提升

image-20211216110903946

网络带宽不断增加

image-20211216110934731

1.1.3 数据产生方式的变革促成大数据时代的来临

image-20211216111019067

1.2 大数据概念

image-20211216111030789

1.2.1 数据量大

  • 根据IDC作出的估测,数据一直都在以每年50%的速度增长,也就是说每两年就增长一倍(大数据摩尔定律)
  • 人类在最近两年产生的数据量相当于之前产生的全部数据量
  • 预计到2020年,全球将总共拥有35ZB的数据量,相较于2010年,数据量将增长近30倍

image-20211216111154427

1.2.2 数据类型繁多

  • 大数据是由结构化和非结构化数据组成的
    • 10%的结构化数据,存储在数据库中
    • 90%的非结构化数据,它们与人类信息密切相关

image-20211216111237197

  • 科学研究

基因组、LHC 加速器、地球、与空间探测

  • 企业应用

Email、文档、文件、应用日志、交易记录

  • Web 1.0数据

文本、图像、视频

  • Web 2.0数据

查询日志**/**点击流、Twitter/ Blog / SNS、Wiki

1.2.3 处理速度快

  • 从数据的生成到消耗,时间窗口非常小,可用于生成决策的时间非常少
  • 1秒定律:这一点也是和传统的数据挖掘技术有着本质的不同

image-20211216111430062

1.2.4 价值密度低

价值密度低,商业价值高

以视频为例,连续不间断监控过程中,可能有用的数据仅仅有一两秒,但是具有很高的商业价值

1.3 大数据的影响

图灵奖获得者、著名数据库专家Jim Gray 博士观察并总结人类自古以来,在科学研究上,先后历经了实验、理论、计算和数据四种范式

image-20211216111528007

  • 在思维方式方面,大数据完全颠覆了传统的思维方式
    • 全样而非抽样
    • 效率而非精确
    • 相关而非因果

1.4 大数据关键技术

大数据技术的不同层面及其功能

image-20211216111625772

两大核心技术

image-20211216111655678

1.5 大数据计算模式

image-20211216111729861

1.6 代表性大数据技术

1.6.1 Hadoop

image-20211216111759735

Hadoop—MapReduce

  • MapReduce将复杂的、运行于大规模集群上的并行计算过程高度地抽象到了两个函数:Map和Reduce
  • 编程容易,不需要掌握分布式并行编程细节,也可以很容易把自己的程序运行在分布式系统上,完成海量数据的计算
  • MapReduce采用“分而治之”策略,一个存储在分布式文件系统中的大规模数据集,会被切分成许多独立的分片(split),这些分片可以被多个Map任务并行处理。

image-20211216111836836

Hadoop—YARN

YARN的目标就是实现“一个集群多个框架”,为什么?

  • 一个企业当中同时存在各种不同的业务应用场景,需要采用不同的计算框架

    • MapReduce实现离线批处理
    • 使用Impala实现实时交互式查询分析
    • 使用Storm实现流式数据实时分析
    • 使用Spark实现迭代计算
  • 这些产品通常来自不同的开发团队,具有各自的资源调度管理机制

  • 为了避免不同类型应用之间互相干扰,企业就需要把内部的服务器拆分成多个集群,分别安装运行不同的计算框架,即“一个框架一个集群”

  • 导致问题

    • 集群资源利用率低
    • 数据无法共享
    • 维护代价高
  • YARN的目标就是实现“一个集群多个框架”,即在一个集群上部署一个统一的资源调度管理框架YARN,在YARN之上可以部署其他各种计算框架

  • 由YARN为这些计算框架提供统一的资源调度管理服务,并且能够根据各种计算框架的负载需求,调整各自占用的资源,实现集群资源共享和资源弹性收缩

  • 可以实现一个集群上的不同应用负载混搭,有效提高了集群的利用率

  • 不同计算框架可以共享底层存储,避免了数据集跨集群移动

1.6.2 Spark

image-20211216112107931

Hadoop与Spark的对比

  • Hadoop存在如下一些缺点:表达能力有限
  • 磁盘IO开销大
  • 延迟高
  • 任务之间的衔接涉及IO开销
  • 在前一个任务执行完成之前,其他任务就无法开始,难以胜任复杂、多阶段的计算任务。

Hadoop与Spark的对比

  • Spark在借鉴Hadoop MapReduce优点的同时,很好地解决了MapReduce所面临的问题

相比于Hadoop MapReduce,Spark主要具有如下优点:

  • Spark的计算模式也属于MapReduce,但不局限于Map和Reduce操作,还提供了多种数据集操作类型,编程模型比Hadoop MapReduce更灵活
  • Spark提供了内存计算,可将中间结果放到内存中,对于迭代运算效率更高
  • Spark基于DAG的任务调度执行机制,要优于Hadoop MapReduce的迭代执行机制

image-20211216112253153

1.6.3 Flink

image-20211216112320278

image-20211216112337201

性能对比

首先它们都可以基于内存计算框架进行实时计算,所以都拥有非常好的计算性能。经过测试,Flink计算性能上略好。

image-20211216112352220

Spark和Flink全部都运行在Hadoop YARN上,性能为Flink > Spark > Hadoop(MR),迭代次数越多越明显,性能上,Flink优于Spark和Hadoop最主要的原因是Flink支持增量迭代,具有对迭代自动优化的功能。

流式计算比较

它们都支持流式计算,Flink是一行一行处理,而Spark是基于数据片集合(RDD)进行小批量处理,所以Spark在流式处理方面,不可避免增加一些延时。Flink的流式计算跟Storm性能差不多,支持毫秒级计算,而Spark则只能支持秒级计算。

SQL支持

都支持SQL,Spark对SQL的支持比Flink支持的范围要大一些,另外Spark支持对SQL的优化,而Flink支持主要是对API级的优化。

1.6.4 Beam

image-20211216112446323

image-20211216112451052

后语

厂长写博客目的初衷很简单,希望大家在学习的过程中少走弯路,多学一些东西,对自己有帮助的留下你的赞赞👍或者关注➕都是对我最大的支持,你的关注和点赞给厂长每天更文的动力。

对文章其中一部分不理解,都可以评论区回复我,我们来一起讨论,共同学习,一起进步!

微信(z613500)或者 qq(1016942589) 详细交流。