无码人妻精品一区二区三18禁,影音先锋男人AV橹橹色,污污污污污污www网站免费,日韩成人av无码一区二区三区,欧美性受xxxx狂喷水

基于 DataX 的 TDengine 3.0 版本數據遷移工具

基于 DataX,我們實現了 TDengine Database 的數據遷移工具,目前可以做到 OpenTSDB、MySQL、TDengine(Time Series DataBase,TSDB) 等不(bu)同數據源之間的(de)數據遷移。這篇(pian)文章的(de)目(mu)的(de)是,讓用戶能夠快速了(le)解(jie)如何使(shi)用這個數據遷移工具(ju)。

1、介紹

基于 DataX,我(wo)們完成了 TDengine 的適配,對于 TDengine 3.0 版本,實現(xian)了 TDengine30Reader 和 TDengine30Writer 兩個(ge)插件(jian)。

TDengine30Reader 提供的(de)功能(neng):

  1. 支持通過 SQL 進行數據篩選;
  2. 根據時間間隔進行任務切分;
  3. 支持 TDengine 的全部數據類型;
  4. 支持批量讀取,通過 batchSize 參數控制批量拉取結果集的大小,提高讀取性能。

TDengine30Writer 支持(chi)的功能(neng):

  1. 支持 OpenTSDB 的 json 格式的行協議,使用 TDengine 的 schemaless 方式寫入 TDengine。
  2. 支持批量寫入,通過 batchSize 參數控制批量寫入的數量,提高寫入性能。

2、實現原理

TDengine30Reader:使用 JNI 方(fang)式從 TDengine 拉取數據。

TDengine30Writer:使(shi)用(yong)(yong) JNI 方式寫數據(ju)到 TDengine。對 OpenTSDB 等(deng)使(shi)用(yong)(yong) schemaless 寫入(ru),對于 MySQL 等(deng)關系型數據(ju)庫,使(shi)用(yong)(yong)批量(liang) stmt 寫入(ru)。

3、使用方法

3.1 環境準備

(1)需要安裝 TDengine 客戶端

(2)需要安裝 JDK 1.8 環(huan)境(運行 DataX)

(3)需要安(an)裝 Python 環境(運行 DataX)

(4)需要 maven 編譯環境(如果不編譯 DataX 則可以不安裝 maven)

3.2 安裝

下載源碼

git clone //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 數據遷移 Job 的配置

3.3.1 時序數據的遷移配置

以(yi)一個從(cong) OpenTSDB 到 TDengine 3.0 版本的數據遷移任務為(wei)例,配置文件 opentsdb2tdengine.json 如下(xia):

 {
   "job":{
     "content":[{
       "reader": {
         "name": "opentsdbreader",
         "parameter": {
           "endpoint": "//192.168.1.180:4242",
           "column": ["weather_temperature"],
           "beginDateTime": "2021-01-01 00:00:00",
           "endDateTime": "2021-01-01 01:00:00"
         }
       },
     "writer": {
       "name": "tdengine30writer",
       "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,時間從 2021-01-01 00:00:00 開始,到 2021-01-01 01:00:00 結束的數據。
  • reader 使用 datax 的 opentsdbreader,parameter 的配置請參考:
  • tdengine30writer 的 parameter 中,user,password 為必須項,沒有默認值。batchSize 不是必須項,默認值為 1。詳細參考:
  • TDengine 中,如果 dbname 指定的 database 不存在,則需要在遷移前創建數據庫。

3.3.2 關系型數據的遷移配置

以一個從 MySQL 到 TDengine 3.0 版本的數據遷移任務為例,配置文件(jian) 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": "tdengine30writer",
         "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 列作為任務劃分的列。
  • reader 使用 datax 的 mysqlreader,parameter 的配置請參考:

3.3.3 TDengine 之間的遷移配置

以一個(ge)從 TDengine 到 TDengine 的(de)數(shu)據遷移為例(li),配置文(wen)件 tdengine2tdengine.json 如下:

 {
   "job": {
     "content": [{
       "reader": {
         "name": "tdengine30reader",
         "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": "tdengine30writer",
         "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 之間的數據遷移。tdenginereader 根據 sql、begieDateTime、endDateTime 過濾數據,使用 splitInteval 進行任務劃分。
  • reader 使用 tdengine30reader,parameter 的配置請參考:

3.4 執行遷移任務

將上(shang)面(mian)寫好的配置文(wen)件保存在(zai) datax/job 目錄下,執行下面(mian)的命令(ling),啟動(dong)數據遷移任務:

python bin/datax.py job/opentsdb2tdengine.json

4、限制條件

(1)目前,DataX 自帶的 opentsdbreader 僅支持 OpenTSDB-2.3.X 版本(ben)。詳細參考:

(2)數據遷移工具(ju)依賴 TDengine 客戶端中(zhong)的(de) libtaos.so/taos.dll/libtaos.dylib,需要與(yu)服務端對應版本的(de) TDengine-client。

5、FAQ

(1)如何估(gu)算一個數據遷移(yi)任務所需要的資(zi)源

DataX 的(de)(de)每個 reader 按(an)照自己的(de)(de) task 切分(fen)策略進(jin)行(xing)任(ren)務劃分(fen),具體(ti)請參考 DataX 的(de)(de)任(ren)務調度規則。在估算資源是,需要按(an)照數據遷移的(de)(de)數據量(liang),任(ren)務切分(fen)規則和網絡(luo)帶寬限制等綜合考慮(lv),最好以實際數據遷移測試結(jie)果(guo)為準。

(2)TDengine30Writer 的(de) batchSize 設置多大效率最高?

batchSize 是控制(zhi)批量(liang)寫(xie)入(ru)(ru)的參數,在獲(huo)取 batchSize 行紀錄后,TDengineWriter 會向 TDengine 發送一次(ci)寫(xie)入(ru)(ru)請求(qiu),這(zhe)減少了與 TDengine 交互次(ci)數,從而提高(gao)了性能。從測試結果來(lai)看,batchSize 在 500-1000 范圍內效率最(zui)高(gao)。

(3)job 的配置(zhi)中 channel 數為多少合適(shi)?

job 中的(de) channel 數(shu)(shu)為流(liu)量控制的(de)參數(shu)(shu),每(mei)個 channel 都(dou)(dou)需(xu)要(yao)開辟一塊內存,用來緩存數(shu)(shu)據。如(ru)果 channel 設置過大(da),會引起(qi) OOM,所以 channel 數(shu)(shu)并不是越大(da)越好。增加 channel 數(shu)(shu)后,需(xu)要(yao)提高 JVM 內存大(da)小。從(cong)測(ce)試結果來看,channel 在(zai) 1~6 的(de)范圍內都(dou)(dou)是合(he)適,能夠保證 DataX 的(de)流(liu)量最大(da)化即可。

(4)java.sql.SQLException: TDengine ERROR (8000060b): Invalid client value

配置文件中(zhong) column 中(zhong)沒有配置 tbname,此時會觸發(fa)行(xing)(xing)協(xie)議(yi)數(shu)據(ju)寫(xie)入(行(xing)(xing)協(xie)議(yi)寫(xie)入只會自動(dong)創(chuang)建(jian)子表(biao)名,但(dan)需要提前創(chuang)建(jian)好超級(ji)表(biao)),行(xing)(xing)協(xie)議(yi)寫(xie)入的(de)情況下不(bu)支持 TAG 數(shu)據(ju)類型(xing)為(wei)非 NCHAR,所以此種(zhong)情況有兩種(zhong)解決方案:1.將(jiang) TAG 全部修(xiu)改(gai)為(wei) NCHAR 類型(xing);2.在 Column 中(zhong)配置好表(biao)名稱這樣不(bu)會觸發(fa)行(xing)(xing)協(xie)議(yi)寫(xie)入。

(5)java.sql.SQLException: TDengine ERROR (8000060b): Timestamp data out of range

配置(zhi)文件(jian)中 column 中沒有配置(zhi) tbname,此(ci)時(shi)(shi)會觸發行(xing)協議(yi)數據寫入,且 TAG 全部為 NCHAR 類型,此(ci)時(shi)(shi)需要保證時(shi)(shi)間戳(chuo)的(de)一列名(ming)稱為 _ts,而不能(neng)是其他(ta)名(ming)稱(行(xing)協議(yi)寫入下,默(mo)認將(jiang)最(zui)后的(de)時(shi)(shi)間戳(chuo)寫入到 _ts 一列,且不能(neng)隨(sui)意(yi)命名(ming))。若想避(bi)免(mian)請使(shi)用 tbname 指定(ding)表名(ming)以避(bi)免(mian)觸發行(xing)協議(yi)寫入。