本文主要介紹如何使用阿里巴巴的開源工具Datax實現從OpenTSDB到TSDB的資料移轉。
背景資訊
下面將首先介紹DataX工具本身,以及本次遷移工作涉及到的兩個外掛程式(OpenTSDB Reader和TSDB Writer)。
DataX
DataX是阿里巴巴集團內被廣泛使用的離線資料同步工具/平台,實現包括MySQL、Oracle、SqlServer、PostgreSQL、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS等各種異構資料來源之間高效的資料同步功能。
OpenTSDB Reader
OpenTSDB Reader是DataX的一個外掛程式,實現了從OpenTSDB讀取資料。
TSDB Writer
TSDB Writer是DataX的一個外掛程式,實現了將資料點寫入到阿里巴巴自研TSDB資料庫中。
注意事項
確保與TSDB的網路是連通的。
因為TSDB Writer寫入資料的方式是調用HTTP介面(
/api/put)來完成的,所以需要確保遷移任務的進程能正常訪問到TSDB暴露出來的HTTP介面。否則,會報錯Connect Exception異常。確保與OpenTSDB底層儲存HBase的網路是連通的。
因為OpenTSDB Reader讀取資料是通過直連底層儲存HBase的,所以需要確保遷移任務的進程能正常串連到HBase叢集。否則,會報錯Connect Exception異常。
指定起止時間會自動被轉為整點時刻。
指定起止時間會自動忽略分鐘和秒,轉為整點時刻,例如
2019-4-18的[3:35, 4:55)會被轉為[3:00, 4:00)。
操作步驟
準備以下環境和工具。
Linux
擷取JDK(1.8 以上,推薦 1.8)。
擷取Python(推薦Python 2.6.x)
OpenTSDB(目前只支援相容2.3.x,其他版本暫不保證相容。)
TSDB(目前只支援相容 2.4.x 及以上版本,其他版本暫不保證相容。)
下載DataX及外掛程式。
利用DataX內建的遷移任務,檢查遷移流程能否走通。
我們先以最簡單的Stream Reader到Stream Writer為例。因為這兩個外掛程式不依賴任何的外部環境,特別適合用來檢查流程是否能走通。簡單介紹下這兩個外掛程式,其中Stream Reader會隨機地產生字串,而Stream Writer則會將接受到的字串輸出到控制台,以此類比一個最簡單的資料移轉過程。
工具部署。
將下載後的安裝包,解壓至某個目錄(作為DATAX_HOME),即可運行遷移任務。如下:
$ cd ${DATAX_HOME} $ python bin/datax.py job/job.json檢查任務是否成功。
下面是任務結束後的匯總資訊,看到如下內容,即可表示遷移任務已成功完成:
任務啟動時刻:2019-04-2611:18:07 任務結束時刻:2019-04-2611:18:17 任務總計耗時:10s 任務平均流量:253.91KB/s 記錄寫入速度:10000rec/s 讀出記錄總數:100000 讀寫失敗總數:0
配置和啟動OpenTSDB到TSDB的遷移任務。
配置遷移任務。
配置一個從OpenTSDB資料庫同步抽取資料到TSDB的任務,命名為
opentsdb2tsdb.json,完整的配置資訊如下:{ "job":{ "content":[ { "reader":{ "name":"opentsdbreader", "parameter":{ "endpoint":"http://192.168.1.100:4242", "column":[ "m" ], "startTime":"2019-01-01 00:00:00", "endTime":"2019-01-01 03:00:00" } }, "writer":{ "name":"tsdbhttpwriter", "parameter":{ "endpoint":"http://192.168.1.101:8242" } } } ], "setting":{ "speed":{ "channel":1 } } } }各個配置參數的詳細說明如下表所示:
OpenTSDB Reader相關參數
名稱
類型
是否必需
描述
預設值
舉例
endpoint
String
是
OpenTSDB 的HTTP串連地址
無
http://127.0.0.1:4242column
Array
是
資料移轉任務需要遷移的Metric列表
[]["m"]beginDateTime
String
是
和endDateTime配合使用,用於指定哪個時間段內的資料點,需要被遷移
無
2019-05-13 15:00:00endDateTime
String
是
和beginDateTime配合使用,用於指定哪個時間段內的資料點,需要被遷移
無
2019-05-13 17:00:00TSDB Writer相關參數
名稱
類型
是否必需
描述
預設值
舉例
endpoint
String
是
TSDB的HTTP串連地址
無
http://127.0.0.1:8242batchSize
Integer
否
每次批量資料的條數,需要保證大於 0
100
100
maxRetryTime
Integer
否
失敗後重試的次數,需要保證大於 1
3
3
ignoreWriteError
Boolean
否
多次重試後,如果該參數設定為 true,則忽略錯誤,繼續寫入;否則,則會終止寫入任務
false
false
啟動OpenTSDB 2 TSDB遷移任務。
$ cd ${DATAX_HOME}/.. $ ls datax/ datax.tar.gz opentsdb2tsdb.json $ python datax/bin/datax.py opentsdb2tsdb.json檢查任務是否成功。
下面是任務結束後的匯總資訊,看到如下內容,即可表示遷移任務已成功完成:
任務啟動時刻:2019-04-2611:47:06 任務結束時刻:2019-04-2611:47:16 任務總計耗時:10s 任務平均流量:98.92KB/s 記錄寫入速度:868rec/s 讀出記錄總數:8685 讀寫失敗總數:0
FAQ
Q:是否支援調整遷移進程的JVM記憶體大小?
A:支援。以“從OpenTSDB到TSDB的資料移轉任務”為例,啟動命令如下:
python datax/bin/datax.py opentsdb2tsdb.json -j "-Xms4096m -Xmx4096m"