1. 程式人生 > >Spark Streaming和Flink的Word Count對比

Spark Streaming和Flink的Word Count對比

準備:

nccat for windows/linux 都可以 通過 TCP 套接字連線,從流資料中建立了一個 Spark DStream/ Flink DataSream, 然後進行處理, 時間視窗大小為10s 
因為 示例需要, 所以 需要下載一個netcat, 來構造流的輸入。

程式碼:

spark streaming

package cn.kee.spark;
public final class JavaNetworkWordCount {  
	private static final Pattern SPACE = Pattern.compile(" ");  

	public static void main(String[] args) throws Exception {  
		if (args.length < 2) {  
			System.err.println("Usage: JavaNetworkWordCount <hostname> <port>");  
			System.exit(1);  
		}  
		StreamingExamples.setStreamingLogLevels();  
		SparkConf sparkConf = new SparkConf().setAppName("JavaNetworkWordCount");  
		JavaStreamingContext ssc = new JavaStreamingContext(sparkConf, Durations.seconds(1));  
		JavaReceiverInputDStream<String> lines = ssc.socketTextStream(  
				args[0], Integer.parseInt(args[1]), StorageLevels.MEMORY_AND_DISK_SER);  
		JavaDStream<String> words = lines.flatMap(new FlatMapFunction<String, String>() {  
			@Override  
			public Iterator<String> call(String x) {  
				return Arrays.asList(SPACE.split(x)).iterator();  
			}  
		});  
		JavaPairDStream<String, Integer> wordCounts = words.mapToPair(  
				new PairFunction<String, String, Integer>() {  
					@Override  
					public Tuple2<String, Integer> call(String s) {  
						return new Tuple2<>(s, 1);  
					}  
				}).reduceByKey(new Function2<Integer, Integer, Integer>() {  
					@Override  
					public Integer call(Integer i1, Integer i2) {  
						return i1 + i2;  
					}  
				});  
		wordCounts.print();  
		ssc.start();  
		ssc.awaitTermination();  
	}  
}  

Flink DataSream
package cn.kee.flink;

import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.common.functions.ReduceFunction;
import org.apache.flink.api.java.utils.ParameterTool;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.windowing.time.Time;
import org.apache.flink.util.Collector;
/**
 * Example :SocketWindowWordCount
 * @author keehang
 *
 */
public class SocketWindowWordCount {

	public static void main(String[] args) throws Exception {

		// the port to connect to
		final int port = 9999;
		/*try {
			final ParameterTool params = ParameterTool.fromArgs(args);
			port = params.getInt("port");
		} catch (Exception e) {
			System.err.println("No port specified. Please run 'SocketWindowWordCount --port <port>'");
			return;
		}*/
	
		// get the execution environment
		final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

		// get input data by connecting to the socket
		DataStream<String> text = env.socketTextStream("localhost", port, "\n");

		// parse the data, group it, window it, and aggregate the counts
		DataStream<WordWithCount> windowCounts = text
				.flatMap(new FlatMapFunction<String, WordWithCount>() {
					@Override
					public void flatMap(String value, Collector<WordWithCount> out) {
						for (String word : value.split("\\s")) {
							out.collect(new WordWithCount(word, 1L));
						}
					}
				})
				.keyBy("word")
				.timeWindow(Time.seconds(5), Time.seconds(1))
				.reduce(new ReduceFunction<WordWithCount>() {
					@Override
					public WordWithCount reduce(WordWithCount a, WordWithCount b) {
						return new WordWithCount(a.word, a.count + b.count);
					}
				});

		// print the results with a single thread, rather than in parallel
		windowCounts.print().setParallelism(1);

		env.execute("Socket Window WordCount");
	}
}


結果:



Spark是一種快速、通用的計算集群系統,Spark提出的最主要抽象概念是彈性分散式資料集(RDD),它是一個元素集合,劃分到叢集的各個節點上,可以被並行操作。使用者也可以讓Spark保留一個RDD在記憶體中,使其能在並行操作中被有效的重複使用。

Flink是可擴充套件的批處理和流式資料處理的資料處理平臺,設計思想主要來源於Hadoop、MPP資料庫、流式計算系統等,支援增量迭代計算。

總結:Spark和Flink全部都執行在Hadoop YARN上,效能為Flink > Spark > Hadoop(MR),迭代次數越多越明顯,效能上,Flink優於Spark和Hadoop最主要的原因是Flink支援增量迭代,具有對迭代自動優化的功能


流式計算比較

它們都支援流式計算,Flink是一行一行處理,而Spark是基於資料片集合(RDD)進行小批量處理,所以Spark在流式處理方面,不可避免增加一些延時。Flink的流式計算跟Storm效能差不多,支援毫秒級計算,而Spark則只能支援秒級計算。

SQL支援

都支援,Spark對SQL的支援比Flink支援的範圍要大一些,另外Spark支援對SQL的優化,而Flink支援主要是對API級的優化。


Spark 感覺2.x 後主要在spark sql 這裡發展優勢,快速Join操作,以及繼續擴充套件sql支援。至於Flink,其對於流式計算和迭代計算支援力度將會更加增強。

相關推薦

Spark StreamingFlink的Word Count對比

準備: nccat for windows/linux 都可以 通過 TCP 套接字連線,從流資料中建立了一個 Spark DStream/ Flink DataSream, 然後進行處理, 時間視窗大小為10s 因為 示例需要, 所以 需要下載一個netcat, 來構造

【轉】Spark StreamingKafka整合開發指南

thread ada 關系 方法 拷貝 理解 1.2 reduce arr 基於Receivers的方法 這個方法使用了Receivers來接收數據。Receivers的實現使用到Kafka高層次的消費者API。對於所有的Receivers,接收到的數據將會保存在Spark

spark配置word-count

pack lib tuple www. sch creat java clust name Spark ------------ 快如閃電集群計算引擎。 應用於大規模數據處理快速通用引擎。 內存計算。 [Speed] 計

Spark2.2(三十三):Spark StreamingSpark Structured Streaming更新broadcast總結

背景: 需要在spark2.2.0更新broadcast中的內容,網上也搜尋了不少文章,都在講解spark streaming中如何更新,但沒有spark structured streaming更新broadcast的用法,於是就這幾天進行了反覆測試。經過了一下兩個測試::Spark Streaming更

Spark Streaming Flink 誰是資料開發者的最愛

本文從程式設計模型、任務排程、時間機制、Kafka 動態分割槽的感知、容錯及處理語義、背壓等幾個方面對比 Spark Streaming 與 Flink,希望對有實時處理需求業務的企業端使用者在框架選型有所啟發。 程式設計模型對比 執行角色 Spark Streaming 執行時的角色(

Spark StreamingStorm架構比對

Spark Streaming類似於Apache Storm,用於流式資料的處理。根據其官方文件介紹,Spark Streaming有高吞吐量和容錯能力強等特點。Spark Streaming支援的資料輸入源很多,例如:Kafka、Flume、Twitter、ZeroMQ和簡單的TCP套接字等等

Spark StreamingStorm的區別聯絡

Spark Streaming和Storm區別和聯絡 Spark Streaming和Storm都是將流資料分成一個個小塊的批資料(batch)。 處理模型、延遲 Strom:處理的是每次傳入的事件。秒內延遲。(最小100ms) Spark Stre

Spark Streaming kafka 整合指導(kafka 0.8.2.1 或以上版本)

本節介紹一下如何配置Spark Streaming 來接收kafka的資料。有兩個方法: 1、老的方法 -使用Receivers 和kafka的高階API 2、新的方法( Spark 1.3 開始引入)-不適用Receivers。這兩個方式擁有不同的程式設計模型,效能特徵

Spark Streaming與Storm的對比分析

一、Spark Streaming與Storm的對比 二、Spark Streaming與Storm的優劣分析 事實上,Spark Streaming絕對談不上比Storm優秀。這兩個框架在實時計算領域中,都很優秀,只是擅長的細分場景並不相同。 Spark S

Structure Streamingspark streaming原生API訪問HDFS檔案資料對比

此文已由作者嶽猛授權網易雲社群釋出。 歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。 Structure Stream訪問方式 code examples import org.apache.spark.sql.streaming._ val df = spark.

Dataflow編程模型spark streaming結合

而且 拆分 元組tuple ica 目前 維度 前景 fix 好的 Dataflow編程模型和spark streaming結合 主要介紹一下Dataflow編程模型的基本思想,後面再簡單比較一下Spark streaming的編程模型 == 是什麽 ==

SparkStreamingSpark的SQL簡單入門學習

gen 官方文檔 文檔 zed pairs running eas SM from 1、Spark Streaming是什麽? a、Spark Streaming是什麽?  Spark Streaming類似於Apache Storm,用於流式數據的處理。根據其官方文

提高MSSQL數據庫性能(1)對比count(*) 替代count(*)

profile 感謝 ccache blog 猜想 .html itl arc .cn 原文:提高MSSQL數據庫性能(1)對比count(*) 和 替代count(*)文章準備的數據庫: Atricles 表 數據量60690000條數據 ArticleID 主鍵自

flinkspark stream等框架的對比

如果 ilo orm 任務 執行 自己實現 原因 lin lov 參考這篇文章: https://www.sohu.com/a/196257023_470008 我們當時的目標就是要設計一款低延遲、exactly once、流和批統一的,能夠支撐足夠大體量的復雜計算的引

Apache 流框架 Flink,Spark Streaming,Storm對比分析(2)

此文已由作者嶽猛授權網易雲社群釋出。 歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。 2.Spark Streaming架構及特性分析 2.1 基本架構 基於是spark core的spark streaming架構。 Spark Streaming是將流式計算分解成一系列短小的批處理作業。這裡的批處

Spark Streaming整合flume(Poll方式Push方式)

flume作為日誌實時採集的框架,可以與SparkStreaming實時處理框架進行對接,flume實時產生資料,sparkStreaming做實時處理。 Spark Streaming對接FlumeNG有兩種方式,一種是FlumeNG將訊息Push推給Spark Streaming,還

Spark Streaming狀態管理函式(一)——updateStateByKeymapWithState

updateStateByKey和mapWithState   什麼是狀態管理函式   updateStateByKey   mapWithState   updateStateByKey和mapWithState的區別   適用場景 什麼是狀態管理函

Spark Streaming實時流處理筆記(6)—— Kafka Flume的整合

1 整體架構 2 Flume 配置 https://flume.apache.org/releases/content/1.6.0/FlumeUserGuide.html 啟動kafka kafka-server-start.sh $KAFKA_HOME/config/se

Apache 流框架 Flink,Spark Streaming,Storm對比分析(二)

本文由 網易雲 釋出2.Spark Streaming架構及特性分析2.1 基本架構基於是spark core的spark streaming架構。Spark Streaming是將流式計算分解成一系列短小的批處理作業。這裡的批處理引擎是Spark,也就是把Spark Str

Spark Streaming 輸入DStreamReceiver詳解

輸入DStream和Receiver詳解   輸入DStream代表了來自資料來源的輸入資料流。在之前的wordcount例子中,lines就是一個輸入DStream(JavaReceiverInputDStream),代表了從netcat(nc)服務接收到的資