雲計算

DataWorks百問百答42:如何自動同步IoT系統新生成文件至MaxCompute?

背景:

物聯網(The Internet of Things,簡稱IOT)是指通過各種信息傳感器等各種裝置與技術,實時採集任何需要的各種信息,通過各類可能的網絡接入,實現物與物、物與人的泛在連接,實現對物品和過程的智能化感知、識別和管理。其是一個基於互聯網、傳統電信網等的信息承載體,它讓所有能夠被獨立尋址的普通物理對象形成互聯互通的網絡。
物聯網、大數據和雲計算作為當前第三次信息化浪潮的代表技術,將在未來形成廣泛的影響。物聯網專注於物物相連,大數據專注於數據的價值化,而云計算則為大數據和物聯網提供計算資源等服務支持。
大數據是物聯網體系的重要組成部分。物聯網的體系結構分成六個部分,分別是設備、網絡、平臺、分析、應用和安全,其中分析部分的主要內容就是大數據分析。大數據分析是大數據完成數據價值化的重要手段之一,而進行數據分析的第一步就是要使數據能夠上雲。

解決方案

整條鏈路的關鍵步驟可以分為原始數據的存儲,以及數據進入分析系統兩大步。
存儲方面IoT設備大量的數據通常情況下都會被以半結構化的形式,比如存儲為CSV文件用以保留原始信息。這塊可以利用阿里雲的OSS來做存儲獲得較好的性能和量價比。但對於數據進入到大數據系統或者傳統數據庫來說急需要有專業數據同步系統。下圖給出了一個非常典型的解決方案圖,使用DataWorks的數據集成(Data Integration)來完成數據從OSS進入到大數據系統的過程。具體參考“嚮導模式配置任務”以及讀取OSS寫入MaxCompute,或者寫入其他類型的數據源中
image.png

流程自動化配置

使用OSS讀取CSV文件時,如下圖需要配置讀取的文件名
image.png

但是一般情況下IoT的數據都是在不停地生成,並且落地為csv文件,如果手工去配置對應的同步任務,並且將這些csv文件一個個的讀取到雲上(在此示例中使用MaxCompute),那將是一個非常繁瑣,甚至是不可能完成的任務,比如這些csv文件每5分鐘就生成一份,如何將這些csv能夠自動同步到MaxCompute中?下面教給大傢俱體操作方法。

Step0.方案規約

1、OSS上的文件需要按時週期性生成。

由於DataWorks本身可以按照時間來週期調度,所以可以利用這點,週期性的啟動同步任務,每次啟動時讀取不同的問題。方案就是DataWorks任務的調度週期和OSS上生成的文件同步,比如OSS上的文件都是每15分鐘生成一份,DataWorks上的同步任務也設置為每15分鐘調度一次。

2、生成的文件名需要利用時間戳來命名

OSS同步任務讀取文件時需要明確OSS文件的名稱,但是我們使用參數變量來動態的生成文件名,為了使同步任務自動生成的文件名可以跟OSS上文件名一致,需要IoT向OSS生成文件時,也使用同樣的規律命名。推薦使用yyyymmddhhmm這樣的時間戳作為文件名的一部分,其他部分保持不變。比如是iot_log_201911062315.csv。

Step1.文件名使用參數變量

image.png
如上圖,將文件名的時間戳部分作為變量,使用一個參數來代替。${...}就是參數,裡面寫上參數名,這個名稱可以自定義,此處定義為filename。
然後在調度配置面板中寫下這個參數變量的變量值:(這裡使用了自定義變量,具體用法非常靈活,可以參考:調度參數中的自定義參數部分。)

filename=$[yyyymmddhh24mi]

如下圖,
image.png
此處自定義變量$[yyyymmddhh24mi]的含義為精確到分的時間戳,比如201911062315(2019年11月6日23點15分),202005250843(2020年5月25日08點43分),201912012207(2019年12月1日22點7分)。

Step2.設置週期調度

image.png
如上圖,這裡面是週期調度最關鍵的參數。
調度週期:選擇“分鐘”
開始時間和結束時間根據自己實際的情況來設置時間範圍
時間間隔:根據自己業務情況,進行選擇,這點就上面說的,一定要和參數時間戳和任務命名範圍保持一致。即如果OSS裡的文件是每15分鐘生成一個文件,則時間間隔也定為15。

Step3.發佈任務

image.png
如圖點擊"發佈"將任務發佈,然後在運維頁面“週期任務”和“週期實例”中檢查生成的任務和實例是否符合需求。
image.png

至此就完成了整個OSS自動同步的步驟。

DataWorks百問百答歷史記錄 請點擊這裡查看>>

更多DataWorks技術和產品信息,歡迎加入【DataWorks釘釘交流群】

Leave a Reply

Your email address will not be published. Required fields are marked *