亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

DataX的限速與調(diào)優(yōu)

不知名網(wǎng)友 / 4376人閱讀
DataX的限速與調(diào)優(yōu)

點(diǎn)擊上方“IT那活兒”公眾號,關(guān)注后了解更多內(nèi)容,不管IT什么活兒,干就完了!??!


前 言

眾所周知,當(dāng)一個程序需要傳輸數(shù)據(jù)的時候,它肯定會想盡辦法占用掉設(shè)備的資源,但是,隨著對DataX深入使用可以發(fā)現(xiàn),DataX并不會全力吃掉資源,所以究竟DataX是如何做到限速的?傳輸緩慢到底是限速原因還是其他原因?本文來一起探討下。


限 速

我們知道是在core.json文件里面的speed方法里面限速DataX的,可以通過record記錄數(shù)和byte字節(jié)數(shù)來限速。
這個配置在CoreConstant類里面定義了:
選中常量復(fù)制并查找,可以看到有兩個地方調(diào)用了這個值
分別是初始化、求最大通道數(shù)的時候
接下來,看看這兩個配置在Channel類如何實(shí)現(xiàn)限速的。

Channel類里實(shí)現(xiàn)限速:

從下圖,可以看到在Channel初始化時,順帶初始化了限速的記錄數(shù)(recordSpeed)以及字節(jié)數(shù)(byteSpeed) ,接下來Control+F看看recordSpeed在哪里調(diào)用了。
可以看到在statPush方法里面用到了:

statPush整個流程的描述:

  • 判斷byteSpeed(bps)和recordSpeed(tps)是否都大于0?如果不是,則退出;
  • 根據(jù)當(dāng)前的byteSpeed和設(shè)定的byteSpeed對比,求出睡眠時間(公式:currentByteSpeed * interval / this.byteSpeed- interval;)
  • 根據(jù)當(dāng)前的recordSpeed和設(shè)定的recordSpeed對比,求出睡眠時間(公式:currentRecordSpeed * interval / this.recordSpeed - interval;)
  • 取休眠時間最大值;
  • Thread.sleep(sleepTime)來休眠;
  • 實(shí)現(xiàn)限速。
下面貼上statPush的完整代碼:


調(diào) 優(yōu)

首先我們知道,傳輸受兩個因素影響:

  • 網(wǎng)絡(luò)本身的帶寬等硬件因素造成的影響;
  • DataX本身的參數(shù)。
即當(dāng)覺得DataX傳輸速度慢時,需要從上述兩個個方面著手開始排查。

3.1 網(wǎng)絡(luò)本身的帶寬等硬件因素造成的影響

此部分主要需要了解網(wǎng)絡(luò)本身的情況,即從源端到目的端的帶寬是多少(實(shí)際帶寬計(jì)算公式),平時使用量和繁忙程度的情況,從而分析是否是本部分造成的速度緩慢。以下提供幾個思路:

  • 可使用從源端到目的端scp,python http,nethogs等觀察實(shí)際網(wǎng)絡(luò)及網(wǎng)卡速度;
  • 結(jié)合監(jiān)控觀察任務(wù)運(yùn)行時間段時,網(wǎng)絡(luò)整體的繁忙情況,來判斷是否應(yīng)將任務(wù)避開網(wǎng)絡(luò)高峰運(yùn)行;
  • 觀察任務(wù)機(jī)的負(fù)載情況,尤其是網(wǎng)絡(luò)和磁盤IO,觀察其是否成為瓶頸,影響了速度。

3.2 DataX本身的參數(shù)

1)全局

全局:提升每個channel的速度**
在DataX內(nèi)部對每個Channel會有嚴(yán)格的速度控制,分兩種,一種是控制每秒同步的記錄數(shù),另外一種是每秒同步的字節(jié)數(shù),默認(rèn)的速度限制是1MB/s,可以根據(jù)具體硬件情況設(shè)置這個byte速度或者record速度,一般設(shè)置byte速度,比如:我們可以把單個Channel的速度上限配置為5MB,舉例:
Json:
{
   "core":{
        "transport":{
            "channel":{
                "speed":{
                  "channel": 2, 此處為數(shù)據(jù)導(dǎo)入的并發(fā)度,建議根據(jù)服務(wù)器硬件進(jìn)行調(diào)優(yōu)
                  "record":-1,此處解除對讀取行數(shù)的限制
                  "byte":-1,此處解除對字節(jié)的限制
                  "batchSize":204每次讀取batch的大小
                }
            }
        }
    },
    "job":{
            ...
        }
    }

2)局部

局部:提升DataX Job內(nèi)Channel并發(fā)數(shù)**
并發(fā)數(shù)=taskGroup的數(shù)量每一個TaskGroup并發(fā)執(zhí)行的Task數(shù) (默認(rèn)單個任務(wù)組的并發(fā)數(shù)量為5)。

提升job內(nèi)Channel并發(fā)有三種配置方式:

  • 配置全局Byte限速以及單Channel Byte限速,Channel個數(shù) = 全局Byte限速 / 單Channel Byte限速。
  • 配置全局Record限速以及單Channel Record限速,Channel個數(shù) = 全局Record限速 / 單Channel Record限速。
  • 直接配置Channel個數(shù)。

配置含義:

  • job.setting.speed.channel : channel并發(fā)數(shù);
  • job.setting.speed.record : 全局配置channel的record限速;
  • job.setting.speed.byte:全局配置channel的byte限速。
  • core.transport.channel.speed.record:單channel的record限速;
  • core.transport.channel.speed.byte:單channel的byte限速。
舉例:
Json:
"setting": {
            "speed": {
                "channel": 2,
                "record":-1,
                "byte":-1,
                "batchSize":2048
            }
        }
    }
}
# channel增大,為防止OOM,需要修改datax工具的datax.py文件。
# 如下所示,可根據(jù)任務(wù)機(jī)的實(shí)際配置,提升-Xms與-Xmx,來防止OOM。
# tunnel并不是越大越好,過分大反而會影響宿主機(jī)的性能。
DEFAULT_JVM = "-Xms1g -Xmx1g -XX:+HeapDumpOnOutOfMemoryError 
-XX:HeapDumpPath=%s/log"
 % (DATAX_HOME)

注意事項(xiàng):

此處根據(jù)服務(wù)器配置進(jìn)行調(diào)優(yōu),切記不可太大!否則直接Exception。以上為調(diào)優(yōu),應(yīng)該是可以針對每個json文件都可以進(jìn)行調(diào)優(yōu)。

當(dāng)提升DataX Job內(nèi)Channel并發(fā)數(shù)時,調(diào)整JVM堆參數(shù),原因如下:

  • 當(dāng)一個Job內(nèi)Channel數(shù)變多后,內(nèi)存的占用會顯著增加,因?yàn)镈ataX作為數(shù)據(jù)交換通道,在內(nèi)存中會緩存較多的數(shù)據(jù)。
  • 例如Channel中會有一個Buffer,作為臨時的數(shù)據(jù)交換的緩沖區(qū),而在部分Reader和Writer的中,也會存在一些Buffer,為了防止jvm報內(nèi)存溢出等錯誤,調(diào)大jvm的堆參數(shù)。
  • 通常我們建議將內(nèi)存設(shè)置為4G或者8G,這個也可以根據(jù)實(shí)際情況來調(diào)整。
  • 調(diào)整JVM xms xmx參數(shù)的兩種方式:一種是直接更改datax.py;另一種是在啟動的時候,加上對應(yīng)的參數(shù),如下:python datax/bin/datax.py --jvm="-Xms8G -Xmx8G" XXX.json。

Channel個數(shù)并不是越多越好,原因如下:

  • Channel個數(shù)的增加,帶來的是更多的CPU消耗以及內(nèi)存消耗。
  • 如果Channel并發(fā)配置過高導(dǎo)致JVM內(nèi)存不夠用,會出現(xiàn)的情況是發(fā)生頻繁的Full GC,導(dǎo)出速度會驟降,適得其反。

備注:

MysqlReader進(jìn)行數(shù)據(jù)抽取時,如果指定splitPk,表示用戶希望使用splitPk代表的字段進(jìn)行數(shù)據(jù)分片,DataX因此會啟動并發(fā)任務(wù)進(jìn)行數(shù)據(jù)同步,這樣可以大大提供數(shù)據(jù)同步的效能,splitPk不填寫,包括不提供splitPk或者splitPk值為空,DataX視作使用單通道同步該表數(shù)據(jù)。

結(jié)語:

學(xué)習(xí)之路沒有固定的,先了解原理,再根據(jù)原理及執(zhí)行過程開始研究,DataX是開源軟件,能直接看到開發(fā)者的思路,更能對其進(jìn)行研究和修改,使其更適合我們的工作。


本文作者:孫振興(上海新炬中北團(tuán)隊(duì))

本文來源:“IT那活兒”公眾號

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/129097.html

相關(guān)文章

  • DataPipeline |《Apache Kafka實(shí)戰(zhàn)》作者胡夕:Apache Kafka監(jiān)控與

    摘要:主機(jī)監(jiān)控個人認(rèn)為對于主機(jī)的監(jiān)控是最重要的。在實(shí)際監(jiān)控時可以有意識地驗(yàn)證這一點(diǎn)。另外還有兩個線程池空閑使用率小關(guān)注,最好確保它們的值都不要低于,否則說明已經(jīng)非常的繁忙。此時需要調(diào)整線程池線程數(shù)。 showImg(https://segmentfault.com/img/bVbgpkO?w=1280&h=720); 胡夕,《Apache Kafka實(shí)戰(zhàn)》作者,北航計(jì)算機(jī)碩士畢業(yè),現(xiàn)任某互金...

    lvzishen 評論0 收藏0
  • DataX在有贊大數(shù)據(jù)平臺實(shí)踐

    摘要:與大數(shù)據(jù)體系交互上報運(yùn)行統(tǒng)計(jì)數(shù)據(jù)自帶了運(yùn)行結(jié)果的統(tǒng)計(jì)數(shù)據(jù),我們希望把這些統(tǒng)計(jì)數(shù)據(jù)上報到元數(shù)據(jù)系統(tǒng),作為的過程元數(shù)據(jù)存儲下來?;谖覀兊拈_發(fā)策略,不要把有贊元數(shù)據(jù)系統(tǒng)的嵌入源碼,而是在之外獲取,截取出打印的統(tǒng)計(jì)信息再上報。一、需求 有贊大數(shù)據(jù)技術(shù)應(yīng)用的早期,我們使用 Sqoop 作為數(shù)據(jù)同步工具,滿足了 MySQL 與 Hive 之間數(shù)據(jù)同步的日常開發(fā)需求。 隨著公司業(yè)務(wù)發(fā)展,數(shù)據(jù)同步的場景越...

    JerryWangSAP 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<