Spark Streaming多个输入流

由于业务需要,一个地方部署1个Spark Streaming程序,由于业务扩展部署了多个地方,导致大数据平台的yarn资源不足了,CPU和内存经常是100%的。而且多套只是配置不同的程序,一旦有修改,维护起来也不方便。于是想到提升Spark Streaming的并行度,同时接收多个Dstream的输入。

通过网络接收数据(如Kafka、Flume、套接字等)需要将数据反序列化并存储在Spark上,如果数据接收成为系统中的瓶颈,则需要并行接收数据。主要通过提升Receiver的并发度和调整Receiver的RDD数据分区时间隔。提升Receiver的并发度:在Worker节点上对每个输入DStream创建一个Receiver并运行,以接收一个数据流。通过创建多个输入DStream并配置从数据源接收不同分区的数据流,从而实现接收多数据流。例如,一个单Kafka输入DStream接收两个主题的数据,可以分成两个Kafka的输入流,每个仅仅接收一个主题。输入DStream运行在两个Worker节点的接收器上,从而能够并行接受并行,提高整体的吞吐量。多DStream可以通过联合(union)在一起从而创建一个DStream,这样一些应用在一个输入DStream的转换操作便可以用在联合后的DStream上。

JavaDstream<string> sources1=ssc.receiverstream(new JavacustomReceiver2(ip1, port, StorageLevel.MEMORY_ONLY-2()));

JavaDStream<String> sources2 = ssc.receiverStream(new JavaCustomReceiver2(ip2, port, StorageLevel.MEMORY_ONLY-2()));
JavaDStream<String> sources3 = ssc.receiverstream(new JavaCustomreceiver2(whip, port, StorageLeve1.MEMORY_ONLY-2()));

Javadstream<string> sources3 = ssc.socketTextstream(ip3, port, storagetevel.MEMORY ONLY2())); 
JavaDStream<String> sources = sources1.union(sources2).union(sources3);

关注公众号“大模型全栈程序员”回复“小程序”获取1000个小程序打包源码。更多免费资源在http://www.gitweixin.com/?p=2627

发表评论

邮箱地址不会被公开。 必填项已用*标注