基于 DataX,我們實(shí)現(xiàn)了 TDengine Database 的數(shù)據(jù)遷移工具,目前可以做到 OpenTSDB、MySQL、TDengine 等不同數(shù)據(jù)源之間的數(shù)據(jù)遷移。這篇文章的目的是,讓用戶能夠快速了解如何使用這個(gè)數(shù)據(jù)遷移工具。
1、介紹
基于 DataX,我們完成了 TDengine 的適配,對于 TDengine 2.* 版本,實(shí)現(xiàn)了 TDengine20Reader 和 TDengine20Writer 兩個(gè)插件。
TDengine20Reader 提供的功能:
- 支持通過 SQL 進(jìn)行數(shù)據(jù)篩選;
- 根據(jù)時(shí)間間隔進(jìn)行任務(wù)切分;
- 支持 TDengine 的全部數(shù)據(jù)類型;
- 支持批量讀取,通過 batchSize 參數(shù)控制批量拉取結(jié)果集的大小,提高讀取性能。
TDengine20Writer 支持的功能:
- 支持 OpenTSDB 的 json 格式的行協(xié)議,使用 TDengine 的 schemaless 方式寫入 TDengine。
- 支持批量寫入,通過 batchSize 參數(shù)控制批量寫入的數(shù)量,提高寫入性能。
2、實(shí)現(xiàn)原理
TDengine20Reader:使用 JNI 方式從 TDengine 拉取數(shù)據(jù)。
TDengine20Writer:使用 JNI 方式寫數(shù)據(jù)到 TDengine。對 OpenTSDB 等使用 schemaless 寫入,對于 MySQL 等關(guān)系型數(shù)據(jù)庫,使用批量 stmt 寫入。
3、使用方法
3.1 環(huán)境準(zhǔn)備
(1)需要安裝 TDengine 客戶端
(2)需要安裝 JDK 1.8 環(huán)境(運(yùn)行 DataX)
(3)需要安裝 Python 環(huán)境(運(yùn)行 DataX)
(4)需要 maven 編譯環(huán)境(如果不編譯 DataX 則可以不安裝 maven)
3.2 安裝
下載源碼
git clone https://github.com/taosdata/DataX.git
編譯打包
cd DataX
mvn -U clean package assembly:assembly -Dmaven.test.skip=true
安裝
cp target/datax.tar.gz your_install_dir
cd your_install_dir
tar -zxvf dataX.tar.gz
3.3 數(shù)據(jù)遷移 Job 的配置
3.3.1 時(shí)序數(shù)據(jù)的遷移配置
以一個(gè)從 OpenTSDB 到 TDengine 2.* 版本的數(shù)據(jù)遷移任務(wù)為例,配置文件 opentsdb2tdengine.json 如下:
{
??"job":{
????"content":[{
??????"reader": {
????????"name":?"opentsdbreader",
????????"parameter": {
??????????"endpoint":?"http://192.168.1.180:4242",
??????????"column": ["weather_temperature"],
??????????"beginDateTime":?"2021-01-01 00:00:00",
??????????"endDateTime":?"2021-01-01 01:00:00"
????????}
??????},
????"writer": {
??????"name":?"tdengine20writer",
"parameter": {
"username": "root",
"password": "taosdata",
"connection": [
{
"table": [
"matric1"
],
"jdbcUrl": "jdbc:TAOS://192.168.1.101:6030/test?timestampFormat=TIMESTAMP"
}
],
"batchSize": 1000,
"ignoreTagsUnmatched": true
}
??????}
????}],
????"setting": {
??????"speed": {
????????"channel":?1
??????}
????}
??}
}
配置說明:
- 上面的配置表示,從 192.168.1.180 的 OpenTSDB,到 192.168.1.101 的 TDengine 的遷移。遷移 metric 為 weather_temperature,時(shí)間從 2021-01-01 00:00:00 開始,到 2021-01-01 01:00:00 結(jié)束的數(shù)據(jù)。
- reader 使用 datax 的 opentsdbreader,parameter 的配置請參考:opentsdbreader.md#配置參數(shù)
- tdengine20writer 的 parameter 中,host,port,dbname,user,password 都為必須項(xiàng),沒有默認(rèn)值。batchSize 不是必須項(xiàng),默認(rèn)值為 1。詳細(xì)參考:tdengine20writer.md#配置參數(shù)
- TDengine 中,如果 dbname 指定的 database 不存在,則需要在遷移前創(chuàng)建數(shù)據(jù)庫。
3.3.2 關(guān)系型數(shù)據(jù)的遷移配置
以一個(gè)從 MySQL 到 TDengine 2.* 版本的數(shù)據(jù)遷移任務(wù)為例,配置文件 mysql2tdengine.json 如下:
{
??"job": {
????"content": [{
??????"reader": {
????????"name":?"mysqlreader",
????????"parameter": {
??????????"username":?"root",
??????????"password":?"root",
??????????"column": ["id","name"],
??????????"splitPk":?"id",
??????????"connection": [{
????????????"table": ["test"],
????????????"jdbcUrl": ["jdbc:mysql://192.168.1.101:3306/db"]
??????????}]
????????}
??????},
??????"writer": {
????????"name":?"tdengine20writer",
????????"parameter": {
??????????"host":?"192.168.1.105",
??????????"port":?6030,
??????????"dbname":?"test",
??????????"user":?"root",
??????????"password":?"taosdata",
??????????"batchSize":?1000
????????}
??????}
????}],
????"setting": {
??????"speed": {
????????"channel":?1
??????}
????}
??}
}
配置說明:
- 上面的配置表示,從 192.168.1.101 的 MySQL,到 192.168.1.105 的 TDengine 的遷移。遷移 test 表中 id、name 兩列到 TDengine,使用 id 列作為任務(wù)劃分的列。
- reader 使用 datax 的 mysqlreader,parameter 的配置請參考:mysqlreader.md
3.3.3 TDengine 之間的遷移配置
以一個(gè)從 TDengine 到 TDengine 的數(shù)據(jù)遷移為例,配置文件 tdengine2tdengine.json 如下:
{
??"job": {
????"content": [{
??????"reader": {
????????"name":?"tdengine20reader",
????????"parameter": {
??????????"host":?"192.168.1.82",
??????????"port":?6030,
??????????"db":?"test",
??????????"user":?"root",
??????????"password":?"taosdata",
??????????"sql":?"select * from weather",
??????????"beginDateTime":?"2021-01-01 00:00:00",
??????????"endDateTime":?"2021-01-02 00:00:00",
??????????"splitInterval":?"1h"
????????}
??????},
??????"writer": {
????????"name":?"tdengine20writer",
????????"parameter": {
??????????"host":?"192.168.1.105",‘
??????????"port":?6030,
??????????"dbname":?"test",
??????????"user":?"root",
??????????"password":?"taosdata",
??????????"batchSize":?1000
????????}
??????}
????}],
????"setting": {
??????"speed": {
????????"channel":?1
??????}
????}
??}
}
配置說明:
- 上面的配置表示,從 192.168.1.82 到 192.168.1.105 的 TDengine 之間的數(shù)據(jù)遷移。tdenginereader 根據(jù) sql、begieDateTime、endDateTime 過濾數(shù)據(jù),使用 splitInteval 進(jìn)行任務(wù)劃分。
- reader 使用 tdengine20reader,parameter 的配置請參考:tdengine20reader.md#配置參數(shù)
3.4 執(zhí)行遷移任務(wù)
將上面寫好的配置文件保存在 datax/job 目錄下,執(zhí)行下面的命令,啟動(dòng)數(shù)據(jù)遷移任務(wù):
python bin/datax.py job/opentsdb2tdengine.json
4、限制條件
(1)目前,DataX 自帶的 opentsdbreader 僅支持 OpenTSDB-2.3.X 版本。詳細(xì)參考:opentsdbreader#約束限制
(2)數(shù)據(jù)遷移工具依賴 TDengine 客戶端中的 libtaos.so/taos.dll/libtaos.dylib,需要 TDengine-client-2.3.1.0 以上版本。
5、FAQ
(1)如何估算一個(gè)數(shù)據(jù)遷移任務(wù)所需要的資源
DataX 的每個(gè) reader 按照自己的 task 切分策略進(jìn)行任務(wù)劃分,具體請參考 DataX 的任務(wù)調(diào)度規(guī)則。在估算資源是,需要按照數(shù)據(jù)遷移的數(shù)據(jù)量,任務(wù)切分規(guī)則和網(wǎng)絡(luò)帶寬限制等綜合考慮,最好以實(shí)際數(shù)據(jù)遷移測試結(jié)果為準(zhǔn)。
(2)TDengine20Writer 的 batchSize 設(shè)置多大效率最高?
batchSize 是控制批量寫入的參數(shù),在獲取 batchSize 行紀(jì)錄后,TDengineWriter 會(huì)向 TDengine 發(fā)送一次寫入請求,這減少了與 TDengine 交互次數(shù),從而提高了性能。從測試結(jié)果來看,batchSize 在 500-1000 范圍內(nèi)效率最高。
(3)job 的配置中 channel 數(shù)為多少合適?
job 中的 channel 數(shù)為流量控制的參數(shù),每個(gè) channel 都需要開辟一塊內(nèi)存,用來緩存數(shù)據(jù)。如果 channel 設(shè)置過大,會(huì)引起 OOM,所以 channel 數(shù)并不是越大越好。增加 channel 數(shù)后,需要提高 JVM 內(nèi)存大小。從測試結(jié)果來看,channel 在 1~6 的范圍內(nèi)都是合適,能夠保證 DataX 的流量最大化即可。



互聯(lián)網(wǎng).png)



-1.png)




.png)


證.png)


伙伴.png)
伙伴.png)
伙伴.png)



