閱讀80 返回首頁    go 阿裏雲 go 技術社區[雲棲]


用腳本模式配置數據同步

大數據開發套件裏可以通過配置同步任務,實現數據在不同數據源之間的遷移。但是因為目前隻部署在華東1(參考文檔),有一些特殊網絡環境可能無法覆蓋到。比如VPC下的DRDS或者其他區域自建數據庫內網就不通了。不過套件還提供了腳本模式+調度資源設置這2個大殺器,滿足各種複雜場景下的數據同步功能。

本文就數據從MaxCompute的數據導出到VPC下的DRDS為例,詳細介紹如何使用這兩種方法來實現靈活的數據同步。

同步原理

首先介紹下大數據開發套件的同步任務是怎麼做的。
alt
(這個圖片來自這裏
常有人以同步是MaxCompute的功能,其實MaxCompute和DRDS、RDS一樣隻是一種數據源。圖片中間的框框是一個數據同步服務,它有一個Reader和一個Writer配置,通過Reader從來源抽取數據,然後用Writer寫到目標數據源上。
如果有各種網絡通不通的問題,其實就是來源數據源到同步服務通不通,以及同步服務到目標數據源通不通兩個問題。大數據開發套件提供了一個數據同步的服務,部署在華東1,所以也就有了前文提到的華東1的說法。在這種場景下,就需要考慮華東1的同步集群到來源數據源和目標數據源通不通。因為本文的例子裏,雖然MaxCompute和同步集群雖然是通的,但是在華北2的VPC下的DRDS內網是不通,所以就有了同步不了的尷尬情況。
除了用大數據開發套件提供的同步服務集群外,也可以用直接的自己的ECS來做同步,那這樣的問題就變成了來源數據源和目標數據源這兩個數據源和自己的ECS通不通的問題了。這時候就可以通過安全組設置、高速通道等方法,實現數據的同步。而且這樣防火牆等安全設置自主可控,用戶自己排查網絡問題也比較方便。本文就是用這種方法實現把數據寫入到華北2的VPC內的DRDS的。為了能夠和華北2的VPC內的DRDS能很好的內網連接,我使用華北2的VPC下的ECS來做調度資源。

DRDS的配置

DRDS沒有做特殊的設置,隻是說明下情況:它是在華北2的VPC裏,裏麵的數據表是做了分庫的。
需要特殊說明的是,這裏因為VPC下的DRDS目前不支持設置白名單,所以本文不涉及白名單的部分。但是如果是其他的數據源(比如自建Mysql),需要看同步服務是什麼。如果是用大數據開發套件默認的同步集群,需要參考文檔設置白名單或者在防火牆/安全組等安全設置上開放這些IP的訪問。如果是用自己的ECS做的調度資源,那隻需要開放自己的ECS的IP給數據源,保證數據源和ECS之間是通的,係統的IP就可以不設置。隻是如果因為用自己的ECS調度,沒有開放係統的那些IP的話,可能在用模板模式配置任務的時候可能會有問題(比如本文如果用模板模式的話會在DRDS數據源裏獲取數據庫下的表的列表的時候出現連接不通的情況),這時候就切換成腳本模式,直接修改同步腳本即可。
DRDS購買成功後,我從DMS登錄到數據庫上,使用

create table user_pay(
 user_id  varchar(100), 
 shop_id  varchar(100), 
 time_stamp timestamp) ;

在DRDS裏創建好表。

ECS的配置

我的ECS是新購買的,購買時選擇了和DRDS一樣的專有網絡和虛擬交換機,使得DRDS和ECS內網能通。另外我設置了公網IP,準備通過公網從MaxCompute獲取數據。

調度資源

機器購買成功後需要配置這台ECS,讓大數據開發套件知道這台機器可以用來做調度資源。到調度資源列表裏創建一個調度資源,添加一台ECS
a1

數據源

創建數據源的步驟也隻是跟著文檔配置,沒太多需要注意的。因為VPC下的DRDS不需要設置白名單,所以這裏也省了一步。如果是其他數據源,注意對配置處提示的IP添加白名單放行。
a2

任務配置

接下來是最重要的同步腳本編寫。到數據集成頁麵創建一個任務,直接使用腳本模式。選擇好數據是從Odps導入到DRDS後,得到一個模板(模板自動生成的,這裏就不再寫拷一次)。
填上實際的業務數據後,變成

{
  "configuration": {
    "setting": {
      "speed": {
        "mbps": "1"
      }
    },
    "reader": {
      "parameter": {
        "partition": "",
        "column": [
          "*"
        ],
        "table": "user_pay",
        "datasource": "maxcompute_ds"
      },
      "plugin": "odps"
    },
    "writer": {
      "parameter": {
        "writeMode": "replace",
        "preSql": [
          "delete from user_pay;"
        ],
        "column": [
          "user_id",
          "shop_id",
          "time_stamp"
        ],
        "table": "user_pay",
        "datasource": "vpc_drds"
      },
      "plugin": "drds"
    }
  },
  "type": "job",
  "version": "1.0"
}

然後保存提交。

修改調度資源

任務提交後,需要到任務運維裏修改任務運行使用的調度資源,這樣任務才是運行在自己的ECS上的,可以看這個圖
a4
修改好了後,直接在這個頁麵可以點截圖右下角的操作下拉選項裏的補數據來跑任務。

總結

本文主要用自定義的ECS來調度來解網絡不可達的問題。通過使用腳本模式來解因為網絡不可達導致的向導模式無法配置的問題。腳本模式除了能解這個問題外,其實還能支持比向導模式更多的數據源。

最後需要提醒一句,大數據開發套件的產品形態還沒有完全固定,產品本身還在做迭代,在界麵和功能上後續可能還是會有一些不同,但是數據同步大致的思路就是這樣不會變。希望本文能給大家在做ETL上有一些幫助和啟發。

本文使用的產品涉及大數據計算服務(MaxCompute),地址為https://www.aliyun.com/product/odps
配合大數據開發套件 https://data.aliyun.com/product/ide 完成的。
如果有問題,可以加入我們的釘釘群來谘詢
screenshot

最後更新:2017-04-18 22:32:35

  上一篇:go ReactNative調用Android原生模塊
  下一篇:go 端、雲、數據、智能,一圖承載下的阿裏雲:2017阿裏雲產品場景圖