首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

走进大数据 Spark-Spark streaming

Apache Spark是当今最流行的开源大数据处理框架。和Hadoop生态圈中的MapReduce一样,Spark用于进行分布式,大规模的数据处理,但Spark作为MapReduce的接任者,提供了更高级的编程接口,更高的性能。除此之外,Spark不仅能进行常规的批处理计算,还提供了流式计算支持。

MapReduce的问题

MapReduce是Hadoop生态系统中负责进行分布式计算的组件,MapReduce模型的诞生是大数据处理从无到有的飞跃。但随着技术的进步,对大数据的需求也变得越来越复杂,MapReduce的问题也日益凸显。通常,我们将MapReduce的输入和输出数据保留在HDFS上,很多时候复杂的ETL,数据清洗等工作无法用一次MapReduce完成,所以需要将多个MapReduce过程连接起来:

上图中只有两个MapReduce进行串联,但实际上可能有几十个甚至更多,依赖关系也更加复杂

这样的串联下,每次中间结果都要写入HDFS落盘保存,代价很大(HDFS的你每份数据都需要冗余若干份拷贝)。并且由于本质上是多次MapReduce任务,调度也比较麻烦,实时性更无从谈起。

流式计算框架:Spark Streaming

以往,批处理和流计算被看作大数据系统的两个方面。我们常常能看到这样的架构----以Kafka,Storm为代表的流计算框架用于实时计算,而Spark和MapReduce则负责每天,每个小时的数据批处理。在ETL等场合,这样的计算逻辑被实现两次,并且如何保证一致性也是个问题。

Spark Streaming正式诞生于此类需求。传统的流计算框架大多注重于低延迟,采用持续的算子模型;而Spark Streaming基于Spark,另辟蹊径提出了DStream方案将流数据切成很小的批,用一系列的短暂,无状态,确定性的批处理实现流处理。

spark中有三个角色:Drive,Worker,和Cluster Manager。

驱动程序(Drive)即用户编写的程序,对应一个SparkContext,负责任务的构造,调度,故障恢复等。驱动程序可以直接运行在客户端,例如在用户的应用程序中,也可以托管在Master上,这被称为集群模式,通常用于流计算等长期任务。

Worker节点负责执行计算任务,上面保存了RDD等数据。

Ckuster Manager顾名思义负责集群的资源分配,Spark自带的Spark Master支持任务的资源配,并包含一个Web UI用来监控任务运行状况。多个Master可以构成一主多备,通过ZooKeeper进行协调和故障恢复。

Spark Streaming的做法在流计算框架中很有创新性,他虽然牺牲了低延迟(一般流计算能做到100ms级别,Spark Streaming延迟一般为1s左右),但是带来了三个诱人的优势:

1.更高的吞吐量(大约是Storm的2-5倍)

2.更快速地失败恢复(通常只要1-2s),因此对于straggler(性能拖后腿的节点)直接干掉即可

开发者只需要维护一套ETL逻辑即可同时用于批处理和流计算

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20191010A0JF2A00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券
http://www.vxiaotou.com