1. 程式人生 > >阿里雲DataWorks實踐:資料整合+資料開發

阿里雲DataWorks實踐:資料整合+資料開發

--- # 簡介 - **什麼是DataWorks:** - DataWorks(資料工場,原大資料開發套件)是阿里雲重要的PaaS(Platform-as-a-Service)平臺產品,為您提供[資料整合](https://help.aliyun.com/document_detail/137663.html)、[資料開發](https://help.aliyun.com/document_detail/139128.html)、[資料地圖](https://help.aliyun.com/document_detail/118931.html)、[資料質量](https://help.aliyun.com/document_detail/73660.html)和[資料服務](https://help.aliyun.com/document_detail/73263.html)等全方位的產品服務,一站式開發管理的介面,幫助企業專注於資料價值的挖掘和探索。 - DataWorks支援多種計算和儲存引擎服務,包括[離線計算MaxCompute](https://help.aliyun.com/document_detail/27800.html)、[開源大資料引擎E-MapReduce](https://help.aliyun.com/document_detail/28068.html)、[實時計算(基於Flink)](https://help.aliyun.com/document_detail/110778.html)、[機器學習PAI](https://help.aliyun.com/document_detail/42745.html)、[圖計算服務Graph Compute](https://help.aliyun.com/document_detail/134189.html)和[互動式分析服務](https://help.aliyun.com/document_detail/113648.html)等,並且支援使用者自定義接入計算和儲存服務。DataWorks為您提供全鏈路智慧大資料及AI開發和治理服務。 - **學習路徑:** - [DataWorks學習路徑](https://help.aliyun.com/learn/learningpath/dataworks.html) - [MaxCompute學習路徑](https://help.aliyun.com/learn/learningpath/maxcompute.html) - **實踐案例目標:**將MongoDB資料庫中的目標日誌集合同步至阿里雲DataWorks中,在DataWorks中進行日誌解析處理後,將處理後的新資料同步到MongoDB資料庫的新集合中,整個業務流程的執行間隔儘量縮短。 - **實踐案例步驟:** 1. 準備阿里雲賬號並登入 2. 建立並配置工作空間 3. 購買獨享資料整合資源組並繫結 4. 建立並配置資料來源 5. 配置並建立MaxCompute表 6. 建立業務流程 7. 建立並配置離線資料增量同步節點 8. 下載IntelliJ IDEA的MaxCompute Studio外掛並配置 9. 使用MaxCompute Studio開發MapReduce功能的Java程式 10. 將MapReduce功能程式打包上傳為資源 11. 建立並配置ODPS MR節點 13. 關聯各個節點 14. 提交業務流程並檢視執行結果 --- # 步驟 --- ## 一、準備阿里雲賬號並登入 ### Ⅰ、註冊阿里雲賬號 - **官方文件:**[準備阿里雲賬號](https://help.aliyun.com/document_detail/74246.html) - **步驟圖示:** 1. 官網首頁點選右上角"立即註冊"。 ![阿里雲立即註冊](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226140953789-1730119302.png) 2. 選擇註冊方式進行註冊。 ![阿里雲註冊方式](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226141108965-1921573640.png) 3. 註冊完成後,官網首頁右上角可登入賬號。 ![阿里雲登入入口](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226141215097-1770220648.png) 4. 登入成功後,點選右上角"我的阿里雲"圖示,會出現賬戶資訊邊欄。 ![首頁我的阿里雲圖標](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226141419978-725068233.png) 5. 在邊欄中點選"賬號管理",進入賬號管理頁面。 ![我的阿里雲邊欄](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226141442605-1107038621.png) 6. 在賬號管理頁面完成實名認證。 ![實名認證](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226141612509-804290883.png) 7. 完成實名認證後,滑鼠箭頭懸停在頁面右上角的頭像上,在出現的懸浮框中點選"AccessKey管理",進入AccessKey管理頁面。 ![AccessKey管理](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226141654089-1621151660.png) 8. 目前阿里雲官方建議禁用主賬號的AccessKey,使用RAM子使用者AccessKey來進行API呼叫,因此點選"開始使用子使用者AccesssKey",進入RAM訪問控制頁面,進行下一步:建立RAM子賬號。 ![開始使用子使用者AccesssKey](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226141814150-209183660.png) ### Ⅱ、建立RAM子賬號 - **官方文件:**[準備RAM使用者](https://help.aliyun.com/document_detail/74248.html) - **步驟圖示:** 1. 在RAM訪問控制頁面,點選"建立使用者"按鈕,進入建立使用者頁面。 ![RAM訪問控制](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226141912972-1141931283.png) 2. 在建立使用者頁面,填寫賬戶資訊,勾選"控制檯訪問"與"程式設計訪問",下面的密碼選項根據需求自主選擇,完成後點選"確定",建立成功後,及時儲存AccessKey相關資訊(下載CSV檔案)。 ![RAM使用者建立](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226142000189-1030486004.png) 3. 選擇RAM訪問控制頁面左側選單欄的"人員管理"中的"使用者組"標籤,在切換後的頁面中點選"建立使用者組",完善使用者組資訊後,點選"確定"按鈕,完成使用者組的建立。 ![建立使用者組](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226142032007-1580429142.png) 4. 選中建立好的使用者組,點選"新增組成員",在彈出的邊欄中,選中剛才建立好的RAM使用者,點選"確定",將RAM使用者繫結到使用者組。 ![新增使用者到組](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226142057793-828114735.png) 5. 選中剛才的使用者組,點選"新增許可權",會出現"新增許可權"右側邊欄。在邊欄中,根據需求選擇"授權範圍";在"選擇許可權"模組下,根據需求儘量選擇小許可權新增,當前先在搜尋欄中搜索"DataWorks",點選新增DataWorks使用許可權,之後有別的許可權需求再進行新增。選擇好許可權後,點選"確定"完成。 ![使用者組新增許可權](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226154900605-1916692958.png) 6. 完成許可權新增後,點選右上角"我的阿里雲"圖示,在出現賬戶資訊邊欄下方,點選退出登入,退出當前阿里雲賬號。 ![退出登入](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226142156179-1165133122.png) 7. 退出登入後,點選阿里雲首頁右上方"登入",在登入頁面中點選"RAM使用者登入",使用RAM賬號進行登入。遵循阿里雲安全最佳實踐,之後均使用RAM賬號進行DataWorks開發操作,在需要新增許可權、購買阿里雲產品等特殊情況時,再使用阿里雲主賬戶進行操作(不同的瀏覽器可以分別登入不同賬號)。 ![RAM使用者登入](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226142228703-1155195342.png) --- ## 二、建立並配置工作空間 - **官方文件:**[建立工作空間](https://help.aliyun.com/document_detail/74293.html) - **步驟圖示:** 1. RAM賬號登入成功後,在阿里雲首頁右上方點選"控制檯",進入管理控制檯頁面。 ![控制檯入口](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226142311300-1884290792.png) 2. 在管理控制檯頁面,點選左上角的選單按鈕,會出現側邊選單欄,點選"DataWorks"標籤,頁面會切換到對應的DataWorks頁面,點選"免費開通基礎版",進入DataWorks購買頁面,購買完成後要回到此頁面。 ![開通DataWorks基礎版](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226142343310-1863104731.png) 3. 在DataWorks購買頁面,根據自己需求選擇地域(可以選擇離自己最近的地域),版本選擇基礎版(其他版本需要付費)即可滿足本次實踐需求,然後勾選同意服務協議,點選"確認訂單並支付",完成DataWorks基礎版的開通。 ![購買DataWorks](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226142456511-1202376689.png) 4. 完成DataWorks基礎版的開通後,回到剛才的管理控制檯頁,重新點選"DataWorks"標籤,可以進入新的DataWorks控制檯頁,點選左側選單欄的"工作空間列表",切換到工作空間列表頁,點選"建立工作空間"按鈕,準備建立一個新的工作空間。 ![點選建立工作空間按鈕](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226142531631-1489051048.png) 5. 點選"建立工作空間"按鈕後,頁面右側會彈出邊欄,填寫工作空間名稱等資訊,為簡化操作流程,本次實踐選擇"簡單模式"進行演示,完成後點選"下一步",將選擇工作空間引擎。 ![填寫工作空間基本資訊](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226142602310-1087408710.png) 6. 進入選擇引擎頁面,需要選擇計算引擎服務為MaxCompute,此時還未開通MaxCompute服務,點選"MaxCompute"標籤裡的"按量付費"選項後的"去購買"連結,跳轉到MaxCompute購買頁面,購買完成後要回到此頁面。 ![MaxCompute開通入口](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226142643881-628773464.png) 7. 進入MaxCompute購買頁面,商品型別選擇"按量計費",區域根據自己的需求選擇,規格型別選擇"標準版",然後點選"立即購買",完成MaxCompute服務的啟用。 ![購買MaxCompute](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226142709914-413555077.png) 8. MaxCompute服務啟用後,回到建立工作空間的選擇引擎頁面,選中"MaxCompute"標籤裡的"按量付費"選項(若頁面沒有重新整理,無法選中,點一下"上一步",再點一下"下一步"來重新整理頁面),然後點選"下一步",準備配置引擎詳情。 ![選擇MaxCompute按量付費](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226142736288-226253999.png) 9. 進入引擎詳情頁面,自主填寫例項顯示名稱和MaxCompute專案名稱,其他配置選項保持預設即可,然後點選"建立工作空間",完成工作空間的建立。 ![配置MaxCompute引擎詳情](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226142800947-1489726018.png) --- ## 三、購買獨享資料整合資源組並繫結 - **注意:**由於本人在其他業務流程中使用了資料整合中"一鍵實時同步至MaxCompute的功能"(不支援MongoDB資料來源),而實時同步功能僅支援執行在獨享資料整合資源組上,因此購買了獨享資料整合資源組。而本次實踐中也就使用了之前購買的獨享資料整合資源組(不用白不用)。而本次實踐由於只使用了離線同步功能,也可使用公共資源組(免費)進行資料整合,**如要使用公共資源組,可跳過此步驟。** - **官方文件:**[新增和使用獨享資料整合資源組](https://help.aliyun.com/document_detail/137838.html) - **步驟圖示:** 1. 進入DataWorks控制檯頁面,在左側選單欄切換到"工作空間列表"頁面,點選頁面右上角的"購買獨享資源組",開啟DataWorks獨享資源購買頁面。 ![購買獨享資源組入口](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226142924616-530537742.png) 2. 進入DataWorks獨享資源購買頁面,根據自己的需求選擇地域和可用區(要與工作空間所在的地域相同),獨享資源型別選擇"獨享資料整合資源",本次實踐只需購買最低限度的獨享整合資源,因此下面選項依次選擇"4 vCPU 8 GiB"、"1"、"1個月",然後點選"立即購買",完成獨享資料整合資源的購買。 ![購買獨享資料整合資源組](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226142950905-659105316.png) 3. 完成獨享資料整合資源組的購買後,進入DataWorks控制檯頁面,在左側選單欄切換到"資源組列表"頁面,然後點選"建立獨享資源組",會出現右側邊欄。資源組型別選擇"獨享資料整合資源組",資源組名稱自主填寫,資源組備註自主填寫,訂單號選擇剛才購買的獨享資料整合資源的訂單號,然後點選"確定",完成獨享資料整合資源組的建立。 ![建立獨享資料整合資源組](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226143032235-1460765887.png) 4. 建立好獨享資料整合資源組後,在資源組列表頁面中,點選剛建立完成的資源組右端的"修改歸屬工作空間"連結,會出現修改歸屬工作空間的彈出框,選擇剛才建立的工作空間,點選右端對應的"繫結",完成獨享資料整合資源組與工作空間的繫結。 ![資源組繫結工作空間](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226143055396-930346355.png) --- ## 四、建立並配置資料來源 - **官方文件:**[配置資料來源](https://help.aliyun.com/knowledge_list/137669.html) - **步驟圖示:** 1. 在DataWorks控制檯的工作空間列表頁面中,點選目標工作空間右端"操作"列中的"進入資料整合"連結,開啟資料整合頁面。 ![進入資料整合](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226143128765-640034973.png) 2. 進入資料整合頁面中,點選展開左側選單欄中的"資料來源"項,在其展開的子選單中,點選"資料來源列表",開啟資料來源管理頁面。 ![開啟資料來源列表](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226143216149-629355522.png) 3. 進入資料來源管理頁面中,點選頁面右上角的"新增資料來源",會出現新增資料來源的彈出框。本次實踐的目標資料來源為MongoDB資料庫,因此在彈出框中找到"NoSQL"標籤下"MongoDB"圖示,點選該圖示,會出現新的"新增MongoDB資料來源"彈出框。 ![選擇新增資料來源](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226143241993-1146213492.png) 4. 在新增MongoDB資料來源的彈出框中,需要填寫資料來源相關資訊。本次實踐的MongoDB資料來源為阿里云云資料庫MongoDB版,所以資料來源型別選擇"阿里雲實例模式",自主填寫資料來源名稱和資料來源描述,地域選擇資料來源所在地域,例項ID填寫資料來源的例項ID(通過後面的問號圖示,可進入MongoDB管理控制檯的例項列表,複製"例項ID"填寫),自主填寫正確的資料庫名、使用者名稱、密碼。然後點選下面表格中"獨享資料整合資源組"這一行的"測試連通性",此時會連通失敗,需要新增獨享資料整合資源繫結的交換機網段至資料庫的白名單內(若使用的是公共資源組,則需要[新增DataWorks工作空間所在區域的白名單IP至資料庫的白名單內](https://help.aliyun.com/document_detail/137792.html))。因此下一步要開啟DataWorks控制檯的"資源組列表"頁面去找到相關資訊。 ![MongoDB資料來源填寫資訊](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226143326733-1636489653.png) 5. 進入"資源組列表"頁面中,點選目標獨享資料整合資源組的"操作"列中的"檢視資訊"連結,會出現"獨享資源組"的彈出框,複製"EIP地址"和"網段"的內容,下一步開啟MongoDB管理控制檯,準備新增資料庫的IP白名單。 ![獨享整合資源組網段](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226143404738-1741358046.png) 6. 進入MongoDB管理控制檯,選擇"副本集例項列表",找到目標MongoDB例項的行,展開後面的"操作"列,點選"管理"選項,開啟目標MongoDB例項的管理頁面。 ![MongoDB管理入口](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226143444284-2092466194.png) 7. 進入MongoDB例項的管理頁面中,在左側選單欄點選"白名單設定"切換到對應頁面。點選頁面中的"新增白名單分組"按鈕,會出現右側"新增白名單分組"邊欄。在邊欄中自主填寫分組名,並將剛才獨享資源組的"EIP地址"和"網段"的內容填寫到"允許訪問IP名單"文字框中,用英文逗號分隔,然後點選"確定",完成將獨享資源組網段新增到資料來源白名單的操作,下一步回到新增MongoDB資料來源的頁面。 ![MongoDB加白名單](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226143508036-79669623.png) 8. 在新增MongoDB資料來源的頁面中,再次點選"測試連通性",此時連通狀態變為"可連通",然後點選"完成",完成MongoDB資料來源的建立。 ![資料來源測試連通成功](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226143538414-1695261084.png) 9. 同理,也建立一個新的MaxCompute資料來源(預設的MaxCompute資料來源"odps_first"直接用來執行任務會出問題)。在資料來源管理頁面中,點選"新增資料來源",會出現"新增MaxCompute(ODPS)資料來源"彈出框。在彈出框中,自主填寫"資料來源名稱"、"資料來源描述","網路連線型別"選擇"阿里雲VPC","地域"勾選"與當前DataWorks同region","ODPS專案名稱"填寫當前的DataWorks工作空間名稱,"AccessKey ID"填寫當前登入的RAM賬號的AccessKey ID,"AccessKey Secret"填寫當前登入的RAM賬號的AccessKey Secret。然後同樣點選下面表格中"獨享資料整合資源組"這一行的"測試連通性",確認"連通狀態"為"可連通"。點選"完成",完成MaxCompute資料來源的建立。 ![新建MaxCompute資料來源](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226143613656-1032279771.png) --- ## 五、配置並建立MaxCompute表 - **官方文件:**[建立MaxCompute表](https://help.aliyun.com/document_detail/147038.html) - **步驟圖示:** 1. 在DataWorks控制檯的工作空間列表頁面中,點選目標工作空間所在行的"操作"列中的"進入資料開發"連結,開啟"DataStudio(資料開發)"頁面。 ![進入資料開發](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226143718110-1211793408.png) 2. 進入"DataStudio(資料開發)"頁面中,點選左側選單欄中的"表管理"項,切換到表管理頁面。然後點選表管理選單中的新建按鈕,會出現"新建表"彈出框,準備新建一張輸入表用於儲存來自資料來源的離線同步日誌資料。在彈出框中選擇引擎型別為"MaxCompute",自主填寫表名,然後點選新建,會出現MaxCompute表的編輯頁面。 ![新建MaxCompute表](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226143759028-1103216387.png) 3. 在MaxCompute表的編輯頁面,"基本屬性"模組中,自主填寫"中文名"與"描述"。"物理模型設計"模組中,"分割槽型別"選擇"分割槽表","生命週期"自主勾選(超過生命週期的未更新資料會被清除),"表型別"選擇"內部表"。"表結構設計"模組中,自主新增欄位,分割槽新增日、時、分三種粒度的分割槽,其中日級分割槽的"日期分割槽格式"可以填寫日期格式(例如:yyyymmdd)。也可以[使用DDL模式設定表結構](https://help.aliyun.com/document_detail/73768.html)。設定完表結構後,點選"提交到生產環境",完成"輸入表"的建立。同理,自主建立一張類似的"輸出表",用於儲存此次實踐中日誌解析完成後產生的資料。至此完成兩張MaxCompute表的建立。 ![配置MaxCompute表](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226143826796-2066107902.png) --- ## 六、建立業務流程 - **官方文件:**[建立業務流程](https://help.aliyun.com/document_detail/85554.html) - **步驟圖示:** 1. 在DataStudio(資料開發)頁面,點選左側選單欄中的"資料開發"項,切換到資料開發頁面。然後點選資料開發選單中的新建按鈕展開子選單,點選子選單中的"業務流程",會出現"新建業務流程"彈出框。 ![新建業務流程](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226143859049-2088307197.png) 2. 在"新建業務流程"彈出框中,自主填寫"業務名稱"與"描述",然後點選"新建",新建業務流程成功,自動進入該業務流程管理頁面。 ![新建業務流程成功](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226143923564-1696658546.png) --- ## 七、建立並配置離線資料增量同步節點 - **官方文件:**[配置離線同步任務](https://help.aliyun.com/document_detail/153360.html) - **步驟圖示:** 1. 在業務流程管理頁面中,點選左側節點列表中"資料整合"下的"離線同步"項,會出現"新建節點"彈出框。在彈出框中自主填寫"節點名稱",然後點選"提交",完成離線同步節點的新建。 ![新建離線同步節點](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226143958649-1425976721.png) 2. 離線同步節點新建完成後,業務流程管理頁面中會出現此節點,雙擊該節點圖示,會進入該離線同步節點的配置頁面。 ![雙擊離線同步節點](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226144042511-1933733415.png) 3. 進入離線同步節點配置頁面中,展開"01選擇資料來源"模組中"資料來源"下"資料來源"的下拉選單,找到並選中"MongoDB"項,選中後會看到提示:此資料來源不支援嚮導模式,需要使用指令碼模式配置同步任務,點選轉換為指令碼。由於離線同步節點配置嚮導還不支援MongoDB資料來源的同步,因此點選"點選轉換為指令碼"連結,節點配置頁面會從嚮導模式轉換為指令碼模式。 ![離線同步轉換為指令碼模式](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226144104197-1597181844.png) 4. 在離線同步節點指令碼模式配置頁面中,點選上方選單欄中的匯入模板按鈕,會出現"匯入模板"彈出框。在彈出框中,選擇"來源型別"為"MongoDB",自主選擇目標MongoDB的"資料來源";選擇"目標型別"為"ODPS",自主選擇目標ODPS的"資料來源"。然後點選"確認",配置頁面中會自動生成指令碼的程式碼模板,下一步在程式碼模板的基礎上進行指令碼的完善。 ![離線同步節點指令碼模式](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226144134979-699208518.png) 5. 在離線同步節點指令碼模式配置頁面中,由於要從MongoDB同步到MaxCompute,根據[MongoDB Reader](https://help.aliyun.com/document_detail/137723.html)和[MaxCompute Writer](https://help.aliyun.com/document_detail/137466.html)的官方文件,自主修改完善指令碼。在編寫指令碼時要注意,由於離線同步任務的最小執行間隔為5分鐘一次,所以此次實踐要在每次離線同步任務定時執行時,獲取MongoDB中,定時任務執行時間往前五分鐘內的資料,塞入MaxCompute輸入表對應的分割槽中。因此參考[DataWorks排程引數](https://help.aliyun.com/document_detail/137548.html)的官方文件,在頁面右端展開"排程配置"邊欄,然後在排程配置邊欄的"基礎屬性"模組下的"引數"文字框中輸入:`yyyy_mm_dd_min=$[yyyy-mm-dd-5/24/60] yyyy_mm_dd_max=$[yyyy-mm-dd] yyyymmdd_min=$[yyyymmdd-5/24/60] hh_mi_min=$[hh24:mi-5/24/60] hh_mi_max=$[hh24:mi] hh_min=$[hh24-5/24/60] mi_min=$[mi-5/24/60]`。接下來在指令碼程式碼中,在"Reader"部分的"query"項(用於對MongoDB資料進行時間範圍篩選)中填寫內容:`{'date':{'$gte':ISODate('${yyyy_mm_dd_min}T${hh_mi_min}:00.000+0800'),'$lt':ISODate('${yyyy_mm_dd_max}T${hh_mi_max}:00.000+0800')}}`。此處"${yyyymmdd_min}"等是引用剛才設定的DataWorks排程引數,而"$gte"、"$lt"、"ISODate()"是MongoDB支援的條件操作符號和函式,將獲取資料的時間範圍限制為執行時間往前五分鐘內。下一步,要在指令碼程式碼中的"Writer"部分的"partition"項(分割槽)中填寫內容:`partition_day=${yyyymmdd_min},partition_hour=${hh_min},partition_minute=${mi_min}`。此處也是引用剛才設定的DataWorks排程引數,設定資料塞入MaxCompute表的分割槽為執行時間往前五分鐘的時間分割槽。另外,"Writer"部分的"datasource"項注意要設定為自己新建的MaxCompute資料來源。完成指令碼的編輯後,下一步進行此離線同步節點的排程配置。 ![離線同步指令碼注意事項](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226144245357-131906480.png) 6. 在排程配置邊欄中,對該離線同步節點的排程配置進行完善。在"基礎屬性"模組中,"責任人"選擇當前登入的RAM賬號;自主填寫"描述";"引數"的填寫內容上一步中已完成,不再贅述。在"時間屬性"模組中,自主選擇"生成例項方式",為方便後面快速測試,此次實踐選擇"釋出後即時生成";"時間屬性"選擇"正常排程";自主選擇"重跑屬性",通常選擇"執行成功後不可重跑,執行失敗後可以重跑";勾選"出錯自動重跑",自主選擇"出錯自動重跑次數"、"出錯自動重跑間隔",此次實踐使用其預設配置的次數與間隔;自主選擇"生效日期",此次實踐使用其預設配置,讓同步任務一直保持生效狀態;由於此次實踐希望整個業務流程的執行週期間隔儘量短一些,所以設定"排程週期"為"分鐘","開始時間"設定為"00:00"(被限制只能設定整時),"時間間隔"設定為最短的"05","結束時間"設定為"23:59"(被限制只能設定小時),以確保該節點跨天也會每五分鐘執行一次;自主選擇"超時時間",此次實踐選擇"系統預設";不勾選"依賴上一週期",這樣某一週期執行出錯不會影響之後的執行週期。"資源屬性"模組的"排程資源組"選擇預設的"公共排程資源組"即可。"排程依賴"模組暫時不進行配置。"節點上下文"模組在此次實踐中不需要配置。完成以上排程配置後,下一步對該節點進行資料整合資源組配置。 ![離線同步節點排程配置](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226144321921-2121834718.png) 7. 點選頁面右端選單欄的"資料整合資源組配置"項,將右邊邊欄切換到"資料整合資源組配置"頁面。在邊欄中,"方案"項選擇"獨享資料整合資源組",然後"獨享資料整合資源組"項自主選擇獨享資料整合資源組。若要使用公共資料整合資源組,"方案"項選擇"公共資源組"即可。資料整合資源組配置完成後,點選頁面上方選單欄的儲存按鈕,完成對離線同步節點的建立與配置。 ![離線同步節點資料整合資源組配置](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226144430191-1711466086.png) 8. 同理,再建立一個類似的離線同步節點,用於將MaxCompute輸出表的資料同步到MongoDB的集合中。在編寫此指令碼時同樣有幾點要注意,在排程配置邊欄的"基礎屬性"模組下的"引數"文字框中輸入:`p_yyyymmdd=$[yyyymmdd-15/24/60] p_hh=$[hh24-15/24/60] p_mi=$[mi-15/24/60]`。在指令碼的"Reader"部分的"partition"項中填寫內容:`partition_day=${p_yyyymmdd}/partition_hour=${p_hh}/partition_minute=${p_mi}`。在排程配置邊欄的"時間屬性"模組下,"排程週期"設定"分鐘","開始時間"設定"00:00","時間間隔"設定"05","結束時間"設定"23:59"。這樣該離線同步節點每次執行時會去同步MaxCompute輸出表中十五分鐘前的時間分割槽的資料。至此完成兩個離線同步節點的建立與配置,下一步準備開發DataWorks的MapReduce功能的JAR包,用於對日誌資料進行解析。 ![離線同步節點MaxCompute到MongoDB](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226144503307-1989304725.png) --- ## 八、下載IntelliJ IDEA的MaxCompute Studio外掛並配置 - **官方文件:**[安裝MaxCompute Studio](https://help.aliyun.com/document_detail/50892.html) - **步驟圖示:** 1. 開啟IntelliJ IDEA的主介面,展開上方選單欄的"File"項,點選展開的子選單中的"Settings...",會出現Settings彈出框。 ![IDEA進入Settings](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226144604538-134091909.png) 2. 在Settings彈出框中,點選左側選單欄中的"Plugins",使彈出框切換到外掛頁面。在外掛頁面中,點選上方的"Marketplace"標籤,然後再搜尋框中輸入"MaxCompute Studio",搜尋框下方會出現搜尋結果。點選MaxCompute Studio阿里雲官方外掛的"Install"按鈕,開始外掛的安裝。 ![安裝MaxCompute Studio](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226144627810-958901880.png) 3. 外掛安裝完成後,會出現"Restart IDE"按鈕,點選該按鈕重啟IDEA,即可使用MaxCompute Studio外掛。下一步準備在IDEA中建立MaxCompute Studio專案,並連線到DataWorks中的MaxCompute專案。 ![外掛安裝後重啟IDEA](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226144653233-1217542358.png) 4. 重啟IDEA後,展開上方選單欄的"File"項,在"File"項的子選單中再次展開"New"項,點選"New"項的子選單中的"Project..."項,會出現"New Project"彈出框。 ![新建Project](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226144718986-1066484105.png) 5. 在"New Project"彈出框的左側選單欄中點選"MaxCompute Studio",然後點選"Next"按鈕,下一步設定專案名稱和路徑。 ![建立MaxCompute Studio專案](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226144746492-92059256.png) 6. 自主填寫專案名稱到"Project name"中,自主選擇專案儲存路徑到"Project location"中,然後點選"Finish"按鈕,完成建立MaxCompute Studio專案,下一步將此專案連線到DataWorks中的MaxCompute專案。 ![設定MaxCompute專案名稱路徑](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226144826892-171920367.png) 7. 在IntelliJ IDEA的主介面,展開上方選單欄的"View"項,在"View"項的子選單中再次展開"Tool Windows"項,點選"Tool Windows"項的子選單中的"Project Explorer"項,會出現"Project Explorer"左側邊欄。 ![開啟Project Explorer](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226144855913-1713295480.png) 8. 在側邊欄中,點選左上角的"+"圖示,會出現"Add MaxCompute project"彈出框。在彈出框中,將正在使用的RAM賬號的AccessKey ID填入"Access Id"中,將正在使用的RAM賬號的AccessKey Secret填入"Access Key"中,將DataWorks工作空間名稱填入"Project Name"中,然後點選"OK",完成MaxCompute專案的連線。成功連線後,便可以在IDEA介面左側的"Project Explorer"邊欄中檢視連線到的MaxCompute專案的詳情。 ![連線到MaxCompute專案](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226144922206-682404882.png) 9. 在IntelliJ IDEA的主介面,展開上方選單欄的"File"項,在"File"項的子選單中再次展開"New"項,點選"New"項的子選單中的"Module..."項,會出現"New Module"彈出框。 ![建立JAVA Module入口](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226144948853-791943879.png) 10. 在"New Module"彈出框的左側選單中,點選"MaxCompute Java",在彈出框主頁面中自主設定"Module SDK"為1.8版本的JDK,然後點選"Next",下一步設定Module名稱。 ![JAVA Module設定JDK](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226145023318-387816351.png) 11. 在"Module name"中自主填寫模組名稱,然後點選"Finish",完成MaxCompute Java模組的建立,在IDEA的"Project"側邊欄中會出現對應的目錄結構。至此完成MaxCompute Studio外掛的下載與配置。 ![設定JAVA Module名稱](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226145047724-1256430529.png) --- ## 九、使用MaxCompute Studio開發MapReduce功能的Java程式 - **官方文件:**[開發MapReduce功能的Java程式](https://help.aliyun.com/document_detail/50903.html) - **步驟圖示:** 1. 在IntelliJ IDEA主介面左側選單欄中點選"Project",展開"Project"側邊欄。在側邊欄中展開MaxCompute Studio專案的目錄結構,找到MaxCompute Java模組的目錄項,依次展開其下的"src"、"main"目錄項,選中"main"目錄結構下的"java"目錄項,滑鼠右擊調出右鍵選單。在右鍵選單中展開"New"項,點選"New"項的子選單中的"MaxCompute Java"項,會出現"Create new MaxCompute java class"彈出框。 ![建立Driver入口](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226145232423-1387623631.png) 2. 在"Create new MaxCompute java class"彈出框下方的選單中點選"Driver"項,然後在彈出框的"Name"文字框中自主輸入Driver名稱(例如:MainDriver),按"Enter"鍵完成Driver檔案的建立。 ![建立Driver](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226145328529-846447241.png) 3. Driver建立完成後,在"Project"側邊欄中找到Driver檔案,雙擊開啟其編輯頁面。在編輯頁面中,可以看到自動生成了一些Java程式碼模板,而該Driver類中只有一個main方法,表明此Driver類是整個MapReduce功能的Java程式的入口。我們用與建立Driver類同樣的方式,建立Mapper類與Reducer類,然後根據[MapReduce示例程式](https://help.aliyun.com/document_detail/27885.html)的官方文件,自主完成Driver類、Mapper類、Reducer類的開發,實現所需的功能(例如本次實踐中進行了日誌解析功能的實現),這裡不深入展開詳細的過程。開發結束前,請自主進行[本地測試](https://help.aliyun.com/document_detail/50903.html),使程式通過本地編譯和測試,確保功能可用。 ![編輯Driver](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226145354631-840638079.png) --- ## 十、將MapReduce功能程式打包上傳為資源 - **官方文件:**[打包、上傳Java程式](https://help.aliyun.com/document_detail/50904.html) - **步驟圖示:** 1. 完成MapReduce功能的Java程式開發後,要對程式進行打包獲得JAR包。在IntelliJ IDEA主介面的"Project"側邊欄中選中Driver檔案,滑鼠右擊調出右鍵選單。在右鍵選單中點選"Deploy to server...",會出現"Package a jar and submit resource"彈出框。 ![開啟Deploy to server](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226145423948-166388187.png) 2. 在"Package a jar and submit resource"彈出框中,由於之前已經配置過MaxCompute專案的連線,此時會自動填寫各項引數,只需點選"OK"按鈕,即可完成打包,下一步要將JAR包上傳為資源。 ![打包上傳資源](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226145456318-1209862311.png) 3. 在"Project"側邊欄中展開MaxCompute Java模組下的"target"目錄項,在"target"目錄結構中選中上一步生成的JAR包。然後展開主介面上方選單欄中的"MaxCompute"項,點選展開的子選單中的"新增資源",會出現"Add Resource"彈出框。 ![IDEA新增資源](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226145522270-1221703027.png) 4. 在"Add Resource"彈出框中,因為剛才選中了生成的JAR包,此時會自動填寫各項引數,只需點選"OK"按鈕,即可將JAR包新增為阿里雲MaxCompute專案中的資源,下一步要將此資源新增到業務流程的資原始檔夾中。 ![IDEA新增資源確認](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226145548602-90296919.png) 5. 開啟阿里雲的"DataStudio(資料開發)"頁面,展開頁面左側選單欄中的"MaxCompute"項,點選"MaxCompute"選單下的"MaxCompute資源",選單欄右邊的頁面會切換到"MaxCompute資源"編輯頁面。在"MaxCompute資源"編輯頁面中選中剛才上傳的JAR包資源,然後點選頁面下方的"新增到資料開發"按鈕,會出現"新建資源"彈出框。在"新建資源"彈出框中,引數"目標資料夾"裡自主選擇之前建立的業務流程,然後點選"新建"按鈕,成功將Jar包新增到業務流程的資源中,下一步將資源進行提交。 ![資源匯入業務流程中](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226145617471-1631563596.png) 6. 在DataWorks的"資料開發"頁面中,展開當前業務流程的列表,在列表中依次展開"MaxCompute"、"資源"項,雙擊剛新增的JAR包資源,進入該資源的編輯頁面,然後點選頁面上方選單欄中的提交按鈕,會出現"提交新版本"彈出框。 ![提交資源](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226145653413-1574432478.png) 7. 在"提交新版本"彈出框中,自主填寫"變更描述",然後點選"確認",完成資源的提交。資源提交成功後,在業務流程正式執行的時候,節點才能找到此資源。 ![確認提交資源](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226145713845-1318521330.png) --- ## 十一、建立並配置ODPS MR節點 - **官方文件:**[建立ODPS MR節點](https://help.aliyun.com/document_detail/201520.html) - **步驟圖示:** 1. 在阿里雲的"DataStudio(資料開發)"頁面中,點選左側選單欄中的"資料開發"項,選單欄右邊的頁面會切換到"資料開發"頁面。在"資料開發"頁面中,展開"業務流程"列表,在"業務流程"列表中,雙擊目標業務流程,開啟目標業務流程的編輯頁面。在業務流程編輯頁面的左側選單欄中雙擊"ODPS MR"項,會出現"新建節點"彈出框。在"新建節點"彈出框中,自主填寫"節點名稱",然後點選"提交"按鈕,完成ODPS MR節點的建立。 ![新建ODPS MR節點](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226145810058-1543018306.png) 2. 完成ODPS MR節點的建立後,在業務流程的編輯頁面中,雙擊剛建立的ODPS MR節點,進入ODPS MR節點的編輯頁面。 ![雙擊ODPS MR節點](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226145831356-1568963374.png) 3. 在ODPS MR節點的編輯頁面中,編輯區域的末尾新增一行程式碼:`--@resource_reference{""}`。並將游標放到兩個雙引號之間,下一步準備引入剛新增的資源。 ![MR節點引用資原始碼](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226145852376-247572967.png) 4. 在ODPS MR節點編輯頁面左邊的"資料開發"頁面中,展開當前業務流程的列表,在列表中依次展開"MaxCompute"、"資源"項,選中剛新增的JAR包資源,滑鼠右擊調出右鍵選單。在右鍵選單中點選"引用資源",剛才ODPS MR節點編輯區域的游標所在位置就會自動新增引用資源的名稱,並在編輯區域的開頭自動生成一行程式碼,下一步準備新增一行呼叫JAR包資源執行的程式碼。 ![MR節點引入資源](https://img2020.cnblogs.com/blog/2182738/202102/2182738-20210226145914213-1344502299.png) 5. 在編輯區域末尾,再新增一行呼叫JAR包資源的Driver類的main方法的程式碼,格式類似於`jar -resources *-*.*-snapshot.jar -classpath ./*-*.*-snapshot.jar *.*Driver