Spark学习笔记:输入DStream和Receiver详解

输入DStream和Receiver详解

输入DStream代表了来自数据源的输入数据流,除了文件数据流之外,所有的输入DStream都会绑定一个Receiver对象,Receiver用于接收数据,然后将数据存储在Spark的内存中,以供后续的操作使用。

SparkStreaming提供的数据源支持

  • 基础数据源:StreamingContext API中直接提供了对这些数据源的支持,比如文件、Socket、Akka Actor等
  • 高级数据源:诸如Kafka、Flume、Kinesis、Twitter等数据源,通过第三方工具类提供支持,这些数据源的使用需要引用其依赖

注意事项

  • 如果要在实时计算应用中并行接收多条数据流,可以创建多个输入DStream,这样就会创建多个Receiver,从而并行地接收多个数据流。这里有一个问题,一个Spark Streaming应用程序的executor是一个长期运行的任务,所以它会独占分配给Spark Streaming应用程序的CPU core,所以只要Spark Streaming运行起来之后,这个节点上的CPU core数就没有办法给其他的应用所使用了,因为会被Receiver所独占
  • 使用本地模式运行程序时,必须使用local[n],n>=2绝对不能用local和local[1],因为就会给执行输入DStream的executor分配一个线程,Spark Streaming底层的原理需要至少有两个线程,一个线程分配给Receiver接收数据,另一个线程用来处理接收到的数据。如果线程小于2的话,那么程序只会接收数据,不会处理数据
  • 如果直接将Spark Streaming应用提交到集群上运行,需要保证有足够资源

猜你喜欢

转载自blog.csdn.net/lrxcmwy2/article/details/82729086