天天看點

MaxCompute/DataWorks 資料內建與開發實踐

<b>摘要:</b>在2017杭州雲栖大會阿裡雲數加DataWorks專場上,阿裡雲産品專家代俊峰(花名:普陽)為大家分享了如何借助阿裡雲數加DataWorks工具進行資料內建和開發,分享了如何借助DataWorks實作從資料處理手工作坊到資料加工工廠的跨越轉變。

<b>本文内容根據嘉賓演講視訊以及PPT整理而成。</b>

從整體的角度來看,資料的開發主要包括以下五個環節:

1.        

總體架構

2.        

資料內建

3.        

資料模組化

4.        

資料開發

5.        

運維排程

MaxCompute/DataWorks 資料內建與開發實踐

<b>一、總體架構</b><b></b>

其實DataWorks在2009年9月份的時候就已經開始研發了,當時還是基于Hadoop的體系進行研發的。談到為什麼要研發DataWorks這樣的一個工具,其實是因為在沒有DataWorks工具的時候,很多資料的開發工作是非常痛苦的,最開始做大資料分析處理的時候就是自己搭建幾十台Hadoop的機器,然後寫一些腳本去處理資料。當時Hive還沒有出來,是以需要自己寫MapReduce程式,之後包裹成shell腳本,再進行排程,但是這個過程中就會遇到很多如下圖所示的問題。

MaxCompute/DataWorks 資料內建與開發實踐

即便是一個小公司,僅有幾個人進行協同開發,互相之間的業務也需要進行協同排程。每個公司都會有一些開源的工具,比如很多網際網路公司都會使用MongoDB、MySQL等資料庫,還可能會使用一些新興的資料庫。以上這些資料庫都會被一線的開發人員所使用,是以需要将資料打到這些資料庫裡面去。剛開始可能是使用Oracle存儲了一億條資料,然後資料倉庫就跑不下去了,是以很多阿裡巴巴的技術實踐都是在業務的逼迫下摸爬滾打尋找到的解決方案。阿裡巴巴的所有資料都會彙聚到MaxCompute裡面,也是由于業務的需求或者說逼迫實作的。

在DataWorks長達8年的發展過程中,逐漸累積出來的一些工具,最開始的時候IDE開發環境都沒有外部的界面,最開始的時候就是使用一個Notepad或者Sublime來編寫代碼,然後上傳檔案,自己進行ftp操作。阿裡巴巴是一家資料驅動的公司,而對于一些非計算機專業的同學而言,可能連CPU和記憶體都不清楚,是以如果既需要他們去學習SQL開發,也需要去學習ftp指令,會是一件很痛苦的事情,這樣也會使得公司的運轉效率很低。是以後來DataWorks逐漸開發了圖形化的IDE界面來做資料內建,即便是非計算機專業的同學來做一些任務也是很容易的事情。今天,阿裡巴巴每天活躍的“小二”就有六千多萬,他們的工作都需要依靠阿裡巴巴的平台進行資料處理,這在全世界範圍來看都是不可想象的。雖然當時阿裡巴巴在剛開始做的時候也并沒有想到會達到今天這樣的規模,但是經曆了這麼多年的時間,才發現阿裡巴巴其實真的是一家資料驅動的公司。

其實在資料內建方面的這些功能現在看上去非常高大上,而這些功能的實作卻是由無數個阿裡員工所貢獻的力量一點點積累沉澱而成的,而并非某一個天才的設計師的功勞。

MaxCompute/DataWorks 資料內建與開發實踐

如上圖所示的是資料工廠大圖,本次将會着重分享對于研發最為重要的資料內建、資料開發、監控運維以及實時分析這幾個部分的功能。

<b>二、資料內建</b><b></b>

<b>全域資料彙聚</b>

資料研發的第一步就是資料內建。資料內建其實是一個髒活、累活,對于小公司而言還好,而對于中型企業或者大型企業而言,就會存在很多的資料源,而針對于每一個資料源都進行單獨研發則會是一件非常痛苦的事情。不同的業務需求有很多的同步方式,比如實時的binlog同步、曆史資料批量或者增量同步等,而這些不同的同步方式都是随着業務的實踐中經驗不斷積累而沉澱下來的。在阿裡巴巴内部,這些都不隻是一個工具,而是成熟的功能化應用,是以在這裡面就會有可視化的監控工具幫助使用者便捷高效地解決問題。當資料研發過程中沒有錯誤發生的時候其實很容易,一旦發生了錯誤或者出現性能的瓶頸則需要很好的工具進行支撐。

MaxCompute/DataWorks 資料內建與開發實踐

從下圖中也可以看到,DataWorks在資料集上擁有一個非常優秀的架構。

MaxCompute/DataWorks 資料內建與開發實踐

<b>全程可視化</b>

接下來分享DataWorks的資料內建具體是怎樣實作的。DataWorks擁有一個全程可視化的界面,之前的時候其他的一些公司往往會使用Oracle或者MySQL的Load工具編寫shell腳本,而對于開發人員而言,想要使用這些工具卻需要記憶很多參數。但是如果公司想要成為一家業務驅動的公司可能會存在很多的BU,而這些BU不可能花費重金聘請資深的資料專家或者架構師,而更可能僅僅聘請一個不懂計算機但是懂業務的同學來實作資料同步工作。而通過使用DataWorks的圖形化界面就可以解決70%~80%的資料同步問題,如果實在不行還可以使用腳本化的界面,這也都比單純記憶許多參數要好,可以通過使用JSON格式的面向對象的配置方式解決複雜的資料系統的配置問題。阿裡巴巴每天同步的資料可能會達到幾十PB量級,當業務更加分化的時候,專門負責監控的角色可能會同時負責上萬個資料同步任務。而其實資料內建是一個任務,這個任務下面會分為不同的Task,Task會有不同的Pipeline通道,而每個Pipeline如果出現問題都可以進行精細化的監控。

MaxCompute/DataWorks 資料內建與開發實踐

<b>三、資料開發</b><b></b>

<b> </b>

<b>數倉規範</b>

對于整個資料開發而言,都會有一套資料倉庫的開發規範,而且這套理論上規範大家都是比較認可的。對于大型的公司而言,其資料量也非常大,他們非常渴望按照阿裡巴巴的數倉理論進行開發,但事實上如果沒有DataWorks這套工具,大家在進行數倉開發的時候還是小作坊的開發模式。當需要将資料研發過程發展成流水線的時候,必須要有一套數倉的開發規範,來保證流水線的高效、安全和穩定,進而驅動資料的研發。

MaxCompute/DataWorks 資料內建與開發實踐

而如今資料的研發已經遠遠不再是早期的産生一個報表來看看資料的情況了,在阿裡巴巴這樣的公司中就存在資料的三字經——“聚、通、用”,其中的“聚”指的就是資料的彙聚。“通”指的是資料要融合貫通,如果資料拿過來之後,資料之間不做連接配接和融合以及進一步的精細化加工,資料擷取就是沒有任何意義的,舉個常見的例子,一個交易的資料和一個退款的資料,如果将這兩個資料放在一起就可以做一個交易退款的比例分析。再比如淘寶和微網誌關聯起來,分析微網誌關注以及點贊、點選資料的關系。是以隻有将這些資料放在像MaxCompute大型的DataLake的時候,在海量資料的關聯、融合和分析中才能做到别人永遠做不到的事情。

<b>工藝流程</b>

如下圖所示,DataWorks實作了一整套的資料開發的工藝流程。通過基礎服務的設施、資料分析、內建開發以及資源排程這樣一整套流程,以及完整的角色分工可以保證資料開發過程像現代化工廠一樣有生産人員和維護人員來保障資料高效穩定的産出。

MaxCompute/DataWorks 資料內建與開發實踐

<b>功能圖譜</b>

下圖是資料開發的核心功能圖譜。正如前面所提到的,一個內建環境會擁有一個代碼編輯器,如果是多人協作,一旦代碼寫錯了,就可以與代碼倉庫中上一個代碼版本進行對比,進而實作對于代碼的管理和協同。此外,整個資源的監控與排程以及中繼資料管理都可以在其中得以實作。

MaxCompute/DataWorks 資料內建與開發實踐

<b>資料模型層次結構</b>

從資料研發的分層上來說,DataWorks支援不同的應用層。每個應用層都會有一個項目空間,應用層的開發和基礎層的開發是分門别類的,但是他們又互相依賴,底層的資料為上層的資料提供服務,上層不同應用之間互相依賴和授權以及互相使用,這樣就有一個層次結構的模型來支撐,而這個層次模型的實作也是通過DataWorks工具賦能的。

MaxCompute/DataWorks 資料內建與開發實踐

<b>資料模組化</b>

從下圖可以看到,DataWorks提供了資料模組化的工具,如果熟悉也可以手工寫一個DDR工具來建立表,這種方法也是可以的。但是如果需要做大型的任務,比如阿裡巴巴在收購優酷之後,需要将優酷的資料并入阿裡巴巴,其中涉及到的表非常多,是以在整個模組化的過程中,一個人的思路可能是不夠全面的,可能需要多人進行協同開發,而多人系統編輯模型則是一個非常麻煩和痛苦的過程。而且通過使用DataWorks,這個過程就像是使用Office 365線上協作一樣,通過大家協同地編輯模型然後實作的一鍵式釋出送出到開發環境或者生産環境,這樣就極大地提高了效率。

MaxCompute/DataWorks 資料內建與開發實踐

<b>資料血緣分析</b>

下圖所展現的是資料開發之前,在進行需求分析的時候的資料血緣分析。比如對于一個産品經理而言,在進行資料分析的時候往往不知道會使用哪一張表,不了解每一張表的具體含義是什麼,是以效率會比較低。而在DataWorks的資料分析中,提供了資料血緣分析的工具,這樣就可以知道應該使用哪一張表、這張表對于其他表産生了什麼影響以及其他的表會對于這張表産生什麼影響,當出現表的字段增加、減少等變化的時候會提前進行通知,使得開發人員可以事先進行維護,可以非常精細地幫助使用者了解表級别以及字段級别的依賴關系,進而進行很好的資料研發。

MaxCompute/DataWorks 資料內建與開發實踐

<b>業務流程單元</b>

對于大型企業而言,在同一個工作空間下可能會發展到上百甚至上千個SQL,這時候就會變成一團亂麻,難于維護。而DataWorks有業務流程的概念,可以把相關的業務整合起來形成一個完整、高效的面向業務的流程。

MaxCompute/DataWorks 資料內建與開發實踐

<b>代碼編輯器</b>

其實産品的關注點就是無窮無盡的細節,下圖所展現的就是DataWorks中還在進行研發的功能。普通情況下,可能隻需要寫兩三百行SQL代碼,而當業務越來越複雜的時候,可能典型的SQL需要500行,比較複雜的SQL可能會達到2000行甚至3000行。其實在寫SQL的時候,大家會注意到往往會有很多的from、join等,在看代碼的時候除了非常有經驗的SQL開發人員可以一目了然地看出關系,而對于一般的開發人員而言,看這樣的SQL是非常痛苦的。DataWorks所提供的編輯器非常強大,提供了代碼的折疊、縮略圖以及鳥瞰幫助開發人員定位代碼,還可以通過SQL結構化的方式直覺地看到資料共同部件的分布圖,可以非常友善地幫助開發人員定位問題。

MaxCompute/DataWorks 資料內建與開發實踐

代碼編輯器核心的思路就是提供一個類似于Notepad的工具讓大家在裡面寫代碼,但是它不是一個簡單的文本編輯器,而是一個完全高度結構化的東西,可以從各個次元和角度将代碼進行各種變換,進而幫助了解代碼。正如一句程式員之間的那句名言“代碼是寫給人看的”,這種編輯器是為了幫助程式員提高開發效率的,幫助人了解代碼。是以當我們寫了SQL開發任務之後,DataWorks編輯器就可以幫助了解其内部所用到的表以及曆史上、空間上以及版本變化上的關系以及結構上的文法樹,可以提供非常多的結構幫助開發者了解。對于具體細節代碼而言,可以提供智能的提示,甚至寫一個子查詢所得到的字段,在外部引用的時候也可以自動提示,以及代碼的預編譯以及實時的文法提醒。而這些看似簡單的功能,在真正實施過程中并不是那麼容易的,之是以DataWorks能夠做到是因為其底層使用阿裡巴巴自研的MaxCompute,技術團隊之間可以實作非常緊密的協作,是以可以實作看起來很細節但是做起來非常複雜的事情。而對于複雜代碼的了解,就可以借助之前提到的縮略圖以及代碼折疊等各種各樣的展示方式幫助大家提高開發效率。

MaxCompute/DataWorks 資料內建與開發實踐

<b>全局排程</b>

最終任務釋出完成之後,如果僅是一兩個任務使用shell配置一下就可以了,而對于像阿裡巴巴這樣資料驅動的企業而言,資料加工的任務也會越來越多,如果任務數量到達1000的時候,如果沒有非常好的排程工具就會做不下去了。而如圖所示的排程圖僅是一個小例子,這可能僅僅是阿裡巴巴整個排程系統的百萬分之一,僅僅是整個森林中的一片葉子。在實際業務中可以支援分鐘、小時、天、周、月等周期性排程,并且可以支援千萬級的并發。阿裡巴巴的排程系統不同于其他的排程系統,它是基于無狀态任務的,屬于觸發的依賴,這樣就實作了非常高效的并發執行。随着業務量不斷地發展,隻有非常強大的排程支撐系統才能保障業務的正常運作。

MaxCompute/DataWorks 資料內建與開發實踐

<b>工作流設計</b>

DataWorks也提供了如下圖所示一整套工作流的設計機制來保障業務,可以幫助使用者更好地了解業務。

MaxCompute/DataWorks 資料內建與開發實踐

<b>四、監控運維</b><b></b>

<b>任務管理</b>

在監控運維層面,熟悉DataWorks産品的同學都知道,DataWorks提供了一套完整的資料加工工藝和資料開發規範,分為了開發環境和生産環境。而在從開發環境到生産環境之間進行代碼遷移的過程中,DataWorks提供了測試的接入。其實尤其是對于一些大型企業,補資料是一件非常頭疼的事情,可能晚寫了一些代碼上傳之後認為萬事大吉了,但是其實工作隻完成了一半,因為需要補充之前的資料,才能進行資料的對比分析。是以DataWorks也提供了補資料的功能,使用者可以将過去30天或者過去90天的資料補充起來,為下一輪資料分析提供服務。從下圖也可以看出,從依賴關系到産生執行個體有特别多不同的執行個體産生進行維護,其中非常貼心的功能就是可以層層展開,可以看到每一層屬性的記錄檔以及運作日志,也就是對于該節點做了什麼事情以及該節點做了什麼事情,這個節點是什麼樣的代碼以及版本情況等,都可以在DataWorks裡面進行機動化管理。如果沒有這樣一個環境,可能會需要使用者開發無數個工具,效率就會非常低下。

MaxCompute/DataWorks 資料內建與開發實踐

<b>精細周期控制</b>

下圖所示的是執行個體的精細化排程。每天的任務可以依賴小時的任務,這樣會追蹤并生成一個運作的執行個體,按照配置可以有條不紊地執行。

MaxCompute/DataWorks 資料內建與開發實踐

<b>智能預測</b>

下圖所示的是智能産出的效果圖。資料在使用的時候都是輸出到一線的系統中,即便是晚5分鐘産出都需要賠付使用者的,是以必須要能夠保證資料能夠及時産出。

MaxCompute/DataWorks 資料內建與開發實踐

<b>五、</b><b>DataWorks </b><b>大資料開發核心流程</b><b></b>

最後回顧整個DataWorks 大資料研發的流程,通過找資料、申請資料、建表、圖形化拖拽的集中開發環境、臨時查詢的開發、內建的圖形化界面、圖形化的IDE環境以及監控報警等一步步實作大資料開發,以上這些都是看似非常細小的工具,但是正是這些工具保證了業務有條不紊地開展,這些工具組織起來就實作了DataWorks産品的目标。DataWorks不是一個手工作坊式的資料研發工具,而是真正的資料生産進入大規模生産、協作、監控與運維時代的高端生産工具。

歡迎加入“數加·MaxCompute購買咨詢”釘釘群(群号: 11782920)進行咨詢,群二維碼如下:

MaxCompute/DataWorks 資料內建與開發實踐

<a target="_blank"></a>

MaxCompute/DataWorks 資料內建與開發實踐

<a target="_blank">---阿裡大資料博文,問答,社群,實踐,有朋自遠方來,不亦說乎……</a>

MaxCompute/DataWorks 資料內建與開發實踐

繼續閱讀