五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

阿里巴巴Blink 開(kāi)源到底向上游貢獻(xiàn)了什么?

2020-07-16 15:30 作者:自學(xué)Python的小姐姐呀  | 我要投稿

Blink 簡(jiǎn)介

Apache Flink 是德國(guó)柏林工業(yè)大學(xué)的幾個(gè)博士生和研究生從學(xué)校開(kāi)始做起來(lái)的項(xiàng)目,早期叫做 Stratosphere。2014 年,StratoSphere 項(xiàng)目中的核心成員從學(xué)校出來(lái)開(kāi)發(fā)了 Flink,同時(shí)將 Flink 計(jì)算的主流方向定位為流計(jì)算,并在同年將 Flink 捐贈(zèng) Apache 基金會(huì),后來(lái)快速孵化成為 Apache 基金會(huì)的頂級(jí)項(xiàng)目?,F(xiàn)在 Flink 是業(yè)界公認(rèn)的最好的大數(shù)據(jù)流計(jì)算引擎。



阿里巴巴在 2015 年開(kāi)始嘗試使用 Flink。但是阿里的業(yè)務(wù)體量非常龐大,挑戰(zhàn)也很多。彼時(shí)的 Flink 不管是規(guī)模還是穩(wěn)定性尚未經(jīng)歷實(shí)踐,成熟度有待商榷。為了把這么大的業(yè)務(wù)體量支持好,我們不得不在 Flink 之上做了一系列的改進(jìn),所以阿里巴巴維護(hù)了一個(gè)內(nèi)部版本的 Flink,它的名字叫做 Blink。

基于 Blink 的計(jì)算平臺(tái)于 2016 年正式上線。截至目前,阿里絕大多數(shù)的技術(shù)部門(mén)都在使用 Blink。Blink 一直在阿里內(nèi)部錯(cuò)綜復(fù)雜的業(yè)務(wù)場(chǎng)景中鍛煉成長(zhǎng)著。對(duì)于內(nèi)部用戶(hù)反饋的各種性能、資源使用率、易用性等諸多方面的問(wèn)題,Blink 都做了針對(duì)性的改進(jìn)。雖然現(xiàn)在 Blink 在阿里內(nèi)部用的最多的場(chǎng)景主要還是在流計(jì)算,但是在批計(jì)算場(chǎng)景也有不少業(yè)務(wù)上線使用了。例如,在搜索和推薦的算法業(yè)務(wù)平臺(tái)中,它使用 Blink 同時(shí)進(jìn)行流計(jì)算和批處理。Blink 被用來(lái)實(shí)現(xiàn)了流批一體化的樣本生成和特征抽取這些流程,能夠處理的特征數(shù)達(dá)到了數(shù)千億,而且每秒鐘處理數(shù)億條消息。在這個(gè)場(chǎng)景的批處理中,我們單個(gè)作業(yè)處理的數(shù)據(jù)量已經(jīng)超過(guò) 400T,并且為了節(jié)省資源,我們的批處理作業(yè)是和流計(jì)算作業(yè)以及搜索的在線引擎運(yùn)行在同樣的機(jī)器上。所以大家可以看到流批一體化已經(jīng)在阿里巴巴取得了極大的成功,我們希望這種成功和阿里巴巴內(nèi)部的經(jīng)驗(yàn)都能夠帶回給社區(qū)。

Blink 開(kāi)源的背景

其實(shí)從我們選擇 Flink 的第一天開(kāi)始我們就一直和社區(qū)緊密合作。過(guò)去的這幾年我們也一直在把阿里對(duì) Flink 的改進(jìn)推回社區(qū)。從 2016 年開(kāi)始我們已經(jīng)將流計(jì)算 SQL 的大部分功能,針對(duì) runtime 的穩(wěn)定性和性能優(yōu)化做的若干重要設(shè)計(jì)都推回了社區(qū)。但是 Blink 本身發(fā)展迭代的速度非???,而社區(qū)有自己的步伐,很多時(shí)候可能無(wú)法把我們的變更及時(shí)推回去。對(duì)于社區(qū)來(lái)說(shuō),一些大的功能和重構(gòu),需要達(dá)成共識(shí)后,才能被接受,這樣才能更好地保證開(kāi)源項(xiàng)目的質(zhì)量,但是同時(shí)就會(huì)導(dǎo)致推入的速度變得相對(duì)較慢。經(jīng)過(guò)這幾年的開(kāi)發(fā)迭代,我們這邊和社區(qū)之間的差距已經(jīng)變得比較大了。

Blink 有一些很好的新功能,比如性能優(yōu)越的批處理功能,在社區(qū)的版本是沒(méi)有的。在過(guò)去這段時(shí)間里,我們不斷聽(tīng)到有人在詢(xún)問(wèn) Blink 的各種新功能。期望 Blink 盡快開(kāi)源的呼聲越來(lái)越大。我們一直在思考如何開(kāi)源的問(wèn)題,一種方案就是和以前一樣,繼續(xù)把各種功能和優(yōu)化分解,逐個(gè)和社區(qū)討論,慢慢地推回 Flink。但這顯然不是大家所期待的。另一個(gè)方案,就是先完整的盡可能的多的把代碼開(kāi)源,讓社區(qū)的開(kāi)發(fā)者能夠盡快試用起來(lái)。第二個(gè)方案很快收到社區(qū)廣大用戶(hù)的支持。因此,從 2018 年中開(kāi)始我們就開(kāi)始做開(kāi)源的相關(guān)準(zhǔn)備。經(jīng)過(guò)半年的努力,我們終于把大部分 Blink 的功能梳理好,開(kāi)源了出來(lái)。

Blink 開(kāi)源的方式

我們把代碼貢獻(xiàn)出來(lái),是為了讓大家能先嘗試一些他們感興趣的功能。Blink 永遠(yuǎn)不會(huì)單獨(dú)成為一個(gè)獨(dú)立的開(kāi)源項(xiàng)目來(lái)運(yùn)作,他一定是 Flink 的一部分。開(kāi)源后我們期望能找到辦法以最快的方式將 Blink 合并到 Flink 中去。Blink 開(kāi)源只有一個(gè)目的,就是希望 Flink 做得更好。Apache Flink 是一個(gè)社區(qū)項(xiàng)目,Blink 以什么樣的形式進(jìn)入 Flink 是最合適的,怎么貢獻(xiàn)是社區(qū)最希望的方式,我們都要和社區(qū)一起討論。

在過(guò)去的一段時(shí)間內(nèi),我們?cè)?Flink 社區(qū)征求了廣泛的意見(jiàn),大家一致認(rèn)為將本次開(kāi)源的 Blink 代碼作為 Flink 的一個(gè)分支直接推回到 Apache Flink 項(xiàng)目中是最合適的方式。并且我們和社區(qū)也一起討論規(guī)劃出一套能夠快速合并 Blink 到 Flink 主干中的方案(具體細(xì)節(jié)可以查看 Flink 社區(qū)正在討論的 FLIP32)。我們期望這個(gè)合并能夠在很短的時(shí)間內(nèi)完成。這樣我們之后的機(jī)器學(xué)習(xí)等其他新功能就可以直接推回到 Flink 主干。相信用不了多久,F(xiàn)link 和 Blink 就完全合二為一了。在那之后,阿里巴巴將直接使用 Flink 用于生產(chǎn),并同時(shí)協(xié)助社區(qū)一起來(lái)維護(hù) Flink。

本次開(kāi)源的 Blink 的主要功能和優(yōu)化點(diǎn)

本次開(kāi)源的 Blink 代碼在 Flink 1.5.1 版本之上,加入了大量的新功能,以及在性能和穩(wěn)定性上的各種優(yōu)化。主要貢獻(xiàn)包括,阿里巴巴在流計(jì)算上積累的一些新功能和性能的優(yōu)化,一套完整的(能夠跑通全部 TPC-H/TPC-DS,能夠讀取 Hive 元數(shù)據(jù)和數(shù)據(jù))高性能 Batch SQL,以及一些以提升易用性為主的功能(包括支持更高效的交互式編程,與 zeppelin 更緊密的結(jié)合, 以及體驗(yàn)和性能更佳的 Flink web)。未來(lái)我們還將繼續(xù)給 Flink 貢獻(xiàn)在 AI、IoT 以及其他新領(lǐng)域的功能和優(yōu)化。更多的關(guān)于這一版本 Blink 的細(xì)節(jié),請(qǐng)參考 Blink 代碼根目錄下的 README.md 文檔。下面,我來(lái)分模塊介紹下 Blink 主要的新的功能和優(yōu)化點(diǎn)。

Runtime

為了更好的支持批處理,以及解決阿里巴巴大規(guī)模生產(chǎn)場(chǎng)景中遇到的各種挑戰(zhàn),Blink 對(duì) Runtime 的架構(gòu)、效率、穩(wěn)定性方面都做了大量改進(jìn)。在架構(gòu)方面,首先 Blink 引入了可插拔 Shuffle 架構(gòu),開(kāi)發(fā)者可以根據(jù)不同的計(jì)算模型或者新硬件的需要實(shí)現(xiàn)不同的 Shuffle 策略進(jìn)行適配。此外 Blink 還引入新的調(diào)度架構(gòu),容許開(kāi)發(fā)者根據(jù)計(jì)算模型自身的特點(diǎn)定制不同調(diào)度器。為了優(yōu)化性能,Blink 可以讓算子更加靈活的鏈在一起,避免了不必要的數(shù)據(jù)傳輸開(kāi)銷(xiāo)。在 Pipeline Shuffle 模式中,使用了 ZeroCopy 減少了網(wǎng)絡(luò)層內(nèi)存消耗。在 BroadCast Shuffle 模式中,Blink 優(yōu)化掉了大量的不必要的序列化和反序列化開(kāi)銷(xiāo)。

此外,Blink 提供了全新的 JM FailOver 機(jī)制,JM 發(fā)生錯(cuò)誤之后,新的 JM 會(huì)重新接管整個(gè)任務(wù)而不是重啟任務(wù),從而大大減少了 JM FailOver 對(duì)任務(wù)的影響。最后,Blink 也開(kāi)發(fā)了對(duì) Kubernetes 的支持。不同于 Standalone 模式在 Kubernetes 上的拉起方式,在基于 Flink FLIP6 的架構(gòu)上基礎(chǔ)之上,Blink 根據(jù)任務(wù)的資源需求動(dòng)態(tài)的申請(qǐng)/釋放 Pod 來(lái)運(yùn)行 TaskExecutor,實(shí)現(xiàn)了資源彈性,提升了資源的利用率。

SQL/TableAPI



SQL/TableAPI 架構(gòu)上的重構(gòu)和性能的優(yōu)化是 Blink 本次開(kāi)源版本的一個(gè)重大貢獻(xiàn)。首先,我們對(duì) SQL 引擎的架構(gòu)做了較大的調(diào)整。提出了全新的 Query Processor(QP), 它包括了一個(gè)優(yōu)化層(Query Optimizer)和一個(gè)算子層(Query Executor)。這樣一來(lái),流計(jì)算和批計(jì)算的在這兩層大部分的設(shè)計(jì)工作就能做到盡可能的復(fù)用。

另外,SQL 和 TableAPI 的程序最終執(zhí)行的時(shí)候?qū)⒉粫?huì)翻譯到 DataStream 和 DataSet 這兩個(gè) API 上,而是直接構(gòu)建到可運(yùn)行的 DAG 上來(lái),這樣就使得物理執(zhí)行算子的設(shè)計(jì)不完全依賴(lài)底層的 API,有了更大的靈活度,同時(shí)執(zhí)行代碼也能夠被靈活的CodeGen 出來(lái)。唯一的一個(gè)影響就是這個(gè)版本的 SQL 和 TableAPI 不能和 DataSet 這個(gè) API 進(jìn)行互相轉(zhuǎn)換,但仍然保留了和 DataStream API 互相轉(zhuǎn)換的能力(將 DataStream 注冊(cè)成表,或?qū)?Table 轉(zhuǎn)成 DataStream 后繼續(xù)操作)。未來(lái),我們計(jì)劃把 Dataset 的功能慢慢都在 DataStream 和 TableAPI 上面實(shí)現(xiàn)。到那時(shí) DataStream 和 SQL 以及 TableAPI 一樣,是一個(gè)可以同時(shí)描述 bounded/unbounded processing 的 API。

除了架構(gòu)上的重構(gòu),Blink 還在具體實(shí)現(xiàn)上做了較多比較大的重構(gòu)。首先,Blink 引入了二進(jìn)制的數(shù)據(jù)結(jié)構(gòu) BinaryRow,極大的減少了數(shù)據(jù)存儲(chǔ)上的開(kāi)銷(xiāo)以及數(shù)據(jù)在序列化和反序列化上計(jì)算的開(kāi)銷(xiāo)。其次,在算子的實(shí)現(xiàn)層面,Blink 在更廣范圍內(nèi)引入了 CodeGen 技術(shù)。由于預(yù)先知道算子需要處理的數(shù)據(jù)的類(lèi)型,在 QP 層內(nèi)部就可以直接生成更有針對(duì)性更高效的執(zhí)行代碼。

Blink 的算子會(huì)動(dòng)態(tài)的申請(qǐng)和使用資源,能夠更好的利用資源,提升效率,更加重要的是這些算子對(duì)資源有著比較好的控制,不會(huì)發(fā)生 OutOfMemory 的問(wèn)題。此外,針對(duì)流計(jì)算場(chǎng)景,Blink 加入了 miniBatch 的執(zhí)行模式,在 aggregate、join 等需要和 state 頻繁交互且往往又能先做部分 reduce 的場(chǎng)景中,使用 miniBatch 能夠極大的減少 I/O,從而成數(shù)量級(jí)的提升性能。除了上面提到的這些重要的重構(gòu)和功能點(diǎn),Blink 還實(shí)現(xiàn)了完整的 SQL DDL,帶 emit 策略的流計(jì)算 DML,若干重要的 SQL 功能,以及大量的性能優(yōu)化策略。



有了上面提到的諸多架構(gòu)和實(shí)現(xiàn)上的重構(gòu)。Blink 的 SQL/TableAPI 在功能和性能方面都取得了脫胎換骨的變化。在批計(jì)算方面,首先 Blink batch SQL 能夠完整的跑通 TPC-H 和 TPC-DS,且性能上有著極大的提升。如上圖所示,是這次開(kāi)源的 Blink 版本和 Spark 2.3.1 的 TPC-DS 的基準(zhǔn)性能對(duì)比。柱狀圖的高度代表了運(yùn)行的總時(shí)間,高度越低說(shuō)明性能越好??梢钥闯觯?Blink 在 TPC-DS 上和 Spark 相比有著非常明顯的性能優(yōu)勢(shì)。而且這種性能優(yōu)勢(shì)隨著數(shù)據(jù)量的增加而變得越來(lái)越大。在實(shí)際的場(chǎng)景這種優(yōu)勢(shì)已經(jīng)超過(guò) Spark 的三倍。在流計(jì)算性能上我們也取得了類(lèi)似的提升。我們線上的很多典型作業(yè),它的性能是原來(lái)的 3 到 5 倍。在有數(shù)據(jù)傾斜的場(chǎng)景,以及若干比較有挑戰(zhàn)的 TPC-H Query,流計(jì)算性能甚至得到了數(shù)十倍的提升。

除了標(biāo)準(zhǔn)的關(guān)系型 SQL API。TableAPI 在功能上是 SQL 的超集,因此在 SQL 上所有新加的功能,我們?cè)?TableAPI 也添加了相對(duì)應(yīng)的 API。除此之外,我們還在 TableAPI 上引入了一些新的功能。其中一個(gè)比較重要是緩存功能。在批計(jì)算場(chǎng)景下,用戶(hù)可以根據(jù)需要來(lái)緩存計(jì)算的中間結(jié)果,從而避免不必要的重復(fù)計(jì)算。它極大的增強(qiáng)了交互式編程體驗(yàn)。我們后續(xù)會(huì)在 TableAPI 上添加更多有用的功能。其實(shí)很多新功能已經(jīng)在社區(qū)展開(kāi)討論并被社區(qū)接受,例如我們?cè)?TableAPI 增加了對(duì)一整行操作的算子:map、flatMap、aggregate、flatAggregate(Flink FLIP29)等等。

Hive 的兼容性

我們這次開(kāi)源的版本實(shí)現(xiàn)了在元數(shù)據(jù)和數(shù)據(jù)層將 Flink 和 Hive 對(duì)接和打通。國(guó)內(nèi)外很多公司都還在用 Hive 在做自己的批處理。對(duì)于這些用戶(hù),現(xiàn)在使用這次 Blink 開(kāi)源的版本,就可以直接用 Flink SQL 去查詢(xún) Hive 的數(shù)據(jù),真正能夠做到在 Hive 引擎和 Flink 引擎之間的自由切換。

為了打通元數(shù)據(jù),我們重構(gòu)了 Flink catalog 的實(shí)現(xiàn),并且增加了兩種 catalog,一個(gè)是基于內(nèi)存存儲(chǔ)的 FlinkInMemoryCatalog,另外一個(gè)是能夠橋接 Hive metaStore 的 HiveCatalog。有了這個(gè) HiveCatalog,F(xiàn)link 作業(yè)就能讀取 Hive 的 metaData。為了打通數(shù)據(jù),我們實(shí)現(xiàn)了 HiveTableSource,使得 Flink 任務(wù)可以直接讀取 Hive 中普通表和分區(qū)表的數(shù)據(jù)。因此,通過(guò)這個(gè)版本,用戶(hù)可以使用 Flink SQL 讀取已有的 Hive 元數(shù)據(jù)和數(shù)據(jù),做數(shù)據(jù)處理。未來(lái)我們將在 Flink 上繼續(xù)加大對(duì) Hive 兼容性的支持,包括支持 Hive 特有的請(qǐng)求、數(shù)據(jù)類(lèi)型和 Hive UDF 等等。

Zeppelin for Flink

為了提供更好的可視化和交互式體驗(yàn),我們做了大量的工作讓 Zeppelin 能夠更好的支持 Flink。這些改動(dòng)有些是在 Flink 上的,有些是在 Zeppelin 上的。在這些改動(dòng)全部推回 Flink 和 Zeppelin 社區(qū)之前,大家可以使用這個(gè) Zeppelin 鏡像(具體細(xì)節(jié)請(qǐng)參考 Blink 代碼里的 docs/quickstart/zeppelin_quickstart.md)來(lái)測(cè)試和使用這些功能。這個(gè)用于測(cè)試的 Zeppelin版本,首先很好的融合和集成了 Flink 的多種運(yùn)行模式以及運(yùn)維界面。使用文本 SQL 和 TableAPI 可以自如的查詢(xún) Flink 的靜態(tài)表和動(dòng)態(tài)表。

此外,針對(duì) Flink 的流計(jì)算的特點(diǎn),這一版 Zeppelin 也很好的支持了 savepoint,用戶(hù)可以在界面上暫停作業(yè),然后再?gòu)?savepoint 恢復(fù)繼續(xù)運(yùn)行作業(yè)。在數(shù)據(jù)展示方面,除了傳統(tǒng)的數(shù)據(jù)分析界面,我們也添加了流計(jì)算的翻牌器和時(shí)間序列展示等等功能。為了方便用戶(hù)試用,我們?cè)谶@一版 Zeppelin 中提供 3 個(gè)內(nèi)建的 Flink 教程例子: 一個(gè)是做 StreamingETL 的例子,另外兩個(gè)分別是做 Flink Batch、Flink Stream 的基礎(chǔ)樣例。



Flink Web

我們對(duì) Flink Web 的易用性與性能等多個(gè)方面做了大量的改進(jìn),從資源使用、作業(yè)調(diào)優(yōu)、日志查詢(xún)等維度新增了大量功能,使得用戶(hù)可以更方便的對(duì) Flink 作業(yè)進(jìn)行運(yùn)維。在資源使用方面,新增了 Cluster、TaskManager 與任務(wù)三個(gè)級(jí)別的資源信息,使得資源的申請(qǐng)與使用情況一目了然。作業(yè)的拓?fù)潢P(guān)系及數(shù)據(jù)流向可以追溯至 Operator 級(jí)別,Vertex 增加了 InQueue、OutQueue 等多項(xiàng)指標(biāo),可以方便的追蹤數(shù)據(jù)的反壓、過(guò)濾及傾斜情況。TaskManager 和 JobManager 的日志功能得到大幅度加強(qiáng),從 Job、Vertex、SubTask 等多個(gè)維度都可以關(guān)聯(lián)至對(duì)應(yīng)日志,提供多日志文件訪問(wèn)入口,以及分頁(yè)展示查詢(xún)和日志高亮功能。

另外,我們使用了較新的 Angular 7.0 對(duì) Flink web 進(jìn)行了全面重構(gòu),頁(yè)面運(yùn)行性能有了一倍以上的提升。在大數(shù)據(jù)量情況下也不會(huì)發(fā)生頁(yè)面卡死或者卡頓情況。同時(shí)對(duì)頁(yè)面的交互邏輯進(jìn)行了整體優(yōu)化,絕大部分關(guān)聯(lián)信息在單個(gè)頁(yè)面就可以完成查詢(xún)和比對(duì)工作,減少了大量不必要的跳轉(zhuǎn)。



未來(lái)的規(guī)劃

Blink 邁出了全面開(kāi)源的第一步,接下來(lái)我們會(huì)和社區(qū)合作,盡可能以最快的方式將 Blink 的功能和性能上的優(yōu)化合并回 Flink。本次的開(kāi)源版本一方面貢獻(xiàn)了 Blink 多年在流計(jì)算的積累,另一方面又重磅推出了在批處理上的成果。接下來(lái),我們會(huì)持續(xù)給 Flink 社區(qū)貢獻(xiàn)其他方面的功能。我們期望每過(guò)幾個(gè)月就能看到技術(shù)上有一個(gè)比較大的亮點(diǎn)貢獻(xiàn)到社區(qū)。下一個(gè)亮點(diǎn)應(yīng)該是對(duì)機(jī)器學(xué)習(xí)的支持。要把機(jī)器學(xué)習(xí)支持好,有一系列的工作要做,包括引擎的功能,性能,和易用性。這里面大部分的工作我們已經(jīng)開(kāi)發(fā)完成,并且很多功能都已經(jīng)在阿里巴巴內(nèi)部服務(wù)上線了。

除了技術(shù)上創(chuàng)新以及新功能之外,F(xiàn)link 的易用性和外圍生態(tài)也非常重要。我們已經(jīng)啟動(dòng)了若干這方面的項(xiàng)目,包括 Python 以及 Go 等多語(yǔ)言支持,F(xiàn)link 集群管理,Notebook,以及機(jī)器學(xué)習(xí)平臺(tái)等等。這些項(xiàng)目有些會(huì)成為 Flink 自身的一部分貢獻(xiàn)回社區(qū),有些不是。但它們都基于 Flink,是 Flink 生態(tài)的一個(gè)很好的補(bǔ)充。獨(dú)立于 Flink 之外的那些項(xiàng)目,我們都也在認(rèn)真的考慮開(kāi)源出來(lái)??傊?,Blink 在開(kāi)源的第一天起,就已經(jīng)完全的融入了 Flink 社區(qū),我們希望所有的開(kāi)發(fā)者看到我們的誠(chéng)意和決心。

未來(lái),無(wú)論是功能還是生態(tài),我們都會(huì)在 Flink 社區(qū)加大投入,我們也將投入力量做 Flink 社區(qū)的運(yùn)營(yíng),讓 Flink 真正在中國(guó)、乃至全世界大規(guī)模地使用起來(lái)。我們衷心的希望更多的人加入,一起把 Apache Flink 開(kāi)源社區(qū)做得更好!


阿里巴巴Blink 開(kāi)源到底向上游貢獻(xiàn)了什么?的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
济阳县| 清水河县| 南汇区| 山东| 台中市| 太康县| 黄冈市| 宁化县| 克什克腾旗| 华亭县| 天等县| 毕节市| 孝义市| 顺义区| 仙居县| 肇东市| 敦煌市| 桃江县| 灵武市| 常熟市| 秀山| 铜陵市| 旬邑县| 博乐市| 股票| 陈巴尔虎旗| 青海省| 章丘市| 永登县| 尉犁县| 荃湾区| 开原市| 巴彦县| 兴化市| 遂昌县| 东兰县| 醴陵市| 金堂县| 玉山县| 弋阳县| 武宣县|