Spark 1.x 和Spark 2.x 區(qū)別
Spark 2.x 只保留SparkSession作為程序的入口秒咨。以DataSet和DataFrame作為用戶的API汪疮,同時滿足structured data 潜索、streaming data 羞延、machine learing,graph等應(yīng)用場景紧显。
val spark=SparkSession.bulider().master("").getOrCreate()
val lines=spark.readSream.textFile("...")
Spark 1.x的RDD 更多時候表示一維,只有行的概念层皱,如RDD[Person]性锭,而Spark2.x的DataSet和DataFrame是個二維的數(shù)據(jù)集。
備注:Spark1.x 也有DataSet/DataFrame概念叫胖,但僅限于SparkSQL,到了2.0時代草冈,已經(jīng)是全局API了。
DataSet和DataFrame區(qū)別
DataSet是類型安全的type-safe 臭家,及編碼編譯時就可能提醒錯誤疲陕。在存存儲方面沒有多大區(qū)別方淤。
數(shù)據(jù)源轉(zhuǎn)化
支持JAVA/JSON/關(guān)系數(shù)據(jù)庫表轉(zhuǎn)化為DataSet和DataFrame
Structured Streaming 無限增長的表格
Output Mode
- complete 全量數(shù)據(jù)
- append 本次新增
- update
StreamExeution 持續(xù)查詢
- 通過source.getOffset()獲取最新的offsets钉赁,即最新的數(shù)據(jù)進度。
- 將offsets寫入offsetLog (WAL)用作故障恢復(fù)携茂。
- 構(gòu)造本次邏輯計劃logisPlan
3.1 將預(yù)定義的邏輯計劃成員變量制作一個副本
3.2 根據(jù)source.getBatch(offset)收到的數(shù)據(jù)用Dataset/DataFrame表示你踩。 - 觸發(fā)執(zhí)行計劃的優(yōu)化
4.1 邏輯優(yōu)化:通過Catalyst優(yōu)化器完成。
4.2 物理計劃的生成與選擇:可以直接用于執(zhí)行的RDD DAG - 將執(zhí)行結(jié)果DataSet/DataFrame 交給 sink讳苦。
- 計算完成進行commit.即 source.commit()告知完成處理带膜,垃圾回收。將本次執(zhí)行的id寫入到batchCommit Log中鸳谜。
另外膝藕,引入了全局范圍的高可用的StateStore。
增量計算:
每次執(zhí)行時咐扭,從StateStore里restore上次執(zhí)行后的狀態(tài)芭挽。然后加入本次執(zhí)行的新數(shù)據(jù)滑废,再計算。
如何保證end-to end exactly -once-guarantees
- offset tracking in WAL
- state management
- fault-tolerant sources and sinks.