输入DStream代表了来自数据源的输入数据流。在之前的wordcount例子中,lines就是一个输入DStream(JavaReceiverInputDStream),代表了从netcat(nc)服务接收到的数据流。除了文件数据流之外,所有的输入DStream都会绑定一个Receiver对象,该对象是一个关键的组件,用来从数据源接收数据,并将其存储在Spark的内存中,以供后续处理。
Spark Streaming提供了两种内置的数据源支持;
基础数据源:StreamingContext API中直接提供了对这些数据源的支持,比如文件、socket、Akka Actor等。
高级数据源:诸如Kafka、Flume、Kinesis、Twitter等数据源,通过第三方工具类提供支持。这些数据源的使用,需要引用其依赖。
自定义数据源:我们可以自己定义数据源,来决定如何接受和存储数据。
要注意的是,如果你想要在实时计算应用中并行接收多条数据流,可以创建多个输入DStream。这样就会创建多个Receiver,从而并行地接收多个数据流。但是要注意的是,一个Spark Streaming Application的Executor,是一个长时间运行的任务,因此,它会独占分配给Spark Streaming Application的cpu core。从而只要Spark Streaming运行起来以后,这个节点上的cpu core,就没法给其他应用使用了。
使用本地模式,运行程序时,绝对不能用local或者local[1],因为那样的话,只会给执行输入DStream的executor分配一个线程。而Spark Streaming底层的原理是,至少要有两条线程,一条线程用来分配给Receiver接收数据,一条线程用来处理接收到的数据。因此必须使用local[n],n>=2的模式。
如果不设置Master,也就是直接将Spark Streaming应用提交到集群上运行,那么首先,必须要求集群节点上,有>1个cpu core,其次,给Spark Streaming的每个executor分配的core,必须>1,这样,才能保证分配到executor上运行的输入DStream,两条线程并行,一条运行Receiver,接收数据;一条处理数据。否则的话,只会接收数据,不会处理数据。
因此,基于此,特此声明,我们本系列课程所有的练习,都是基于local[2]的本地模式,因为我们的虚拟机上都只有一个1个cpu core。但是大家在实际企业工作中,机器肯定是不只一个cpu core的,现在都至少4核了。到时记得给每个executor的cpu core,设置为超过1个即可。
输入DStream和Receiver详解原理介绍
相关推荐
- C2C 模式解析:消费者与消费者之间的电子商务
- 什么是EAV(Entity-Attribute-Value)模型
- 什么是闭包表,闭包表详解
- B2B 模式解析:企业与企业之间的电子商务
- B2C模式解析:企业与消费者之间的电子商务
- 电子商务模式概述:B2C、B2B、C2C、C2M、O2O
- 电商行业的瓶颈与挑战
- 电子商务的崛起与行业变革
- uni.downloadFile 使用注意事项
- uniapp drawImage 加载网络图片
- getUnlimitedQRCode 获取不限制的微信小程序码
- uni.addPhoneContact正式发布后,在小程序上点击无反应
- IIS 400 错误:Bad Request - Invalid URL HTTP Error 400. The request URL is invalid.
- HTML5+Runtime打包时未添加 Camera 模块,请参考https://ask.dcloud.net.cn/article/283
- 红冲和红字发票在形式上有什么不同?
- C2C 模式解析:消费者与消费者之间的电子商务
- 什么是EAV(Entity-Attribute-Value)模型
- 什么是闭包表,闭包表详解
- B2B 模式解析:企业与企业之间的电子商务
- B2C模式解析:企业与消费者之间的电子商务
- 电子商务模式概述:B2C、B2B、C2C、C2M、O2O
- 电商行业的瓶颈与挑战
- 电子商务的崛起与行业变革
- uni.downloadFile 使用注意事项
- uniapp drawImage 加载网络图片