流式计算的特点

1)实时性。流式大数据不仅是实时产生的,也是要求实时给出反馈结果。系统要有快速响应能力,在短时间内体现出数据的价值,超过有效时间后数据的价值就会迅速降低。

2)突发性。数据的流入速率和顺序并不确定,甚至会有较大的差异。这要求系统要有较高的吞吐量,能快速处理大数据流量。

3)易失性。由于数据量的巨大和其价值随时间推移的降低,大部分数据并不会持久保存下来,而是在到达后就立刻被使用并丢弃。系统对这些数据有且仅有一次计算机会。

4)无限性。数据会持续不断产生并流入系统。在实际的应用场景中,暂停服务来更新大数据分析系统是不可行的,系统要能够持久、稳定地运行下去,并随时进行自我更新,以便适应分析需求。

流式计算的典型范式之一是不确定数据速率的事件流流入系统,系统处理能力必须与事件流量匹配,或者通过近似算法等方法优雅降级,通常称为负载分流(load-shedding)。当然,除了负载分流,流式计算的容错处理等机制也和批处理计算不尽相同。

有人会说,MR也有自己的实时计算方案,比如说HOP。

但是,这类基于MapReduce进行流式处理的方案有三个主要缺点。

  • 将输入数据分隔成固定大小的片段,再由MapReduce平台处理,缺点在于处理延迟与数据片段的长度、初始化处理任务的开销成正比。小的分段会降低延迟,增加附加开销,并且分段之间的依赖管理更加复杂(例如一个分段可能会需要前一个分段的信息);反之,大的分段会增加延迟。最优的分段大小取决于具体应用。

  • 为了支持流式处理,MapReduce需要被改造成Pipeline的模式,而不是Reduce直接输出;考虑到效率,中间结果最好只保存在内存中等。这些改动使得原有的MapReduce框架的复杂度大大增加,不利于系统的维护和扩展。

  • 用户被迫使用MapReduce的接口来定义流式作业,这使得用户程序的可伸缩性降低。

综上所述,流式处理的模式决定了要和批处理使用非常不同的架构,试图搭建一个既适合流式计算又适合批处理计算的通用平台,结果可能会是一个高度复杂的系统,并且最终系统可能对两种计算都不理想。

目前流式计算是业界研究的一个热点,最近Twitter、LinkedIn等公司相继开源了流式计算系统Storm、Kafka等,加上Yahoo!之前开源的S4,流式计算研究在互联网领域持续升温。不过流式计算并非最近几年才开始研究,传统行业像金融领域等很早就已经在使用流式计算系统,比较知名的有StreamBase、Borealis等。

参考链接:

1、https://baike.baidu.com/item/%E6%B5%81%E8%AE%A1%E7%AE%97/15441007?fromtitle=%E6%B5%81%E5%BC%8F%E8%AE%A1%E7%AE%97&fromid=23714673&fr=aladdin

2、https://www.cnblogs.com/sddai/p/10087947.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
流式计算是一种处理连续数据计算模式。在Python中,PySpark是一个流式计算框架,它提供了处理实时数据的功能。PySpark流式计算使用了低延迟的连续,可以处理大规模的数据,并且具有高吞吐量和高可扩展性。 PySpark流式计算特点包括: - 实时处理:PySpark可以实时处理数据,无需等待所有数据都到达。 - 高吞吐量:PySpark可以处理大规模的数据,并具有高吞吐量的能力。 - 高可扩展性:PySpark可以在分布式环境中运行,可以轻松扩展以处理更大规模的数据。 - 容错性:PySpark具有容错性,可以处理数据中的故障和错误。 下面是一个简单的示例,演示了如何使用PySpark进行流式计算: ```python from pyspark import SparkContext from pyspark.streaming import StreamingContext # 创建SparkContext对象 sc = SparkContext("local[2]", "StreamingExample") # 创建StreamingContext对象,设置批处理间隔为1秒 ssc = StreamingContext(sc, 1) # 创建一个DStream,从TCP socket接收数据 lines = ssc.socketTextStream("localhost", 9999) # 对接收到的数据进行处理 words = lines.flatMap(lambda line: line.split(" ")) wordCounts = words.map(lambda word: (word, 1)).reduceByKey(lambda a, b: a + b) # 打印每个单词的计数结果 wordCounts.pprint() # 启动流式计算 ssc.start() # 等待计算完成 ssc.awaitTermination() ``` 这个示例创建了一个流式计算应用程序,它从TCP socket接收数据,并对接收到的数据进行单词计数。最后,它打印每个单词的计数结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值