kettle 記憶體設定 一次kettle效能優化

2021-10-13 14:46:15 字數 1695 閱讀 1176

將2.04g的資料匯入到mysql資料庫中,資料格式是json格式,由於包含不同型別的資料,需要將不同型別的資料進行拆分操作,提取出目標資料。其中涉及值替換,json解析,字段選擇等操作。剛開始執行的過程發現很慢,而且解析到最後出現oom的情況,完全崩潰,執行了幾個小時oom了,淚流滿面。

既然oom,當然第一想到的是,那肯定記憶體不夠啊,立馬給加記憶體。好歹也學了一段時間深入虛擬機器記憶體,開啟jvisualvm,通過visualgc看各個區域的記憶體占用情況。事實證明還是too *****。記憶體占用居然超過了13g,而且基本上是處於old區。大部分記憶體占用得不到釋放,dump出來的prof也顯示基本是char陣列的資料。此時才想起我應該注意一下執行步驟,果真還是太年輕,沒經驗,執行步驟基本上卡在json input那一步,導致大量的資料讀入進來之後,json解析處理不及時,資料堆在json input的上流,最後只好oom了。

pentaho-kettle

kettle-core

6.1.0.1-196

pentaho-kettle

kettle-engine

6.1.0.1-196

pentaho-kettle

kettle-ui-swt

6.1.0.1-196

pentaho-kettle

kettle-test

6.1.0.1-196

pentaho

metastore

6.1.0.1-196

com.googlecode.json-******

json-******

1.1jsonpath

jsonpath

1.0com.jayway.jsonpath

json-path

1.2.0

net.minidev

json-smart

2.2net.minidev

asm1.0.2

org.apache.commons

commons-vfs2

2.1-20150824

org.eclipse.swt

org.eclipse.swt

3.1然後就是愉快的按照作者的方式打包外掛程式。等等。。好想忘了什麼事,外掛程式?怎麼安裝外掛程式啊?還好領悟能力可以,直接放到plugins目錄下,怎麼找不到新的外掛程式啊?筆者摸索了半天,才發現自己需要重新啟動kettle,先前一直是通過快捷方式啟動,不知道怎麼回事,就是一直看不到,然後到安裝目錄中重新啟動,果斷看到了fastjson。淚奔啊。。。。

但是好像沒有我預想的那麼快,不過解析速度還是比json input快些的。發現瓶頸基本上還在json解析這塊。想想不對啊,這麼慢的東東,不可能那麼多人用,肯定還有什麼地方不對。果斷google了一下,kettle效能優化。發現了問題。原來我是暴殄天物啊,所有步驟都是乙個執行緒在執行,人家可是支援多執行緒的。你這不是浪費資源嗎?果斷右擊步驟 -> change number of copies to start..」並輸入合適的執行緒數8(筆者的電腦是8核的),有些步驟會提示得現增加乙個dummy才能修改執行緒數,直接按照提示操作即可。至此,重新啟動轉換,發現速度立馬飆公升上去了。效能瓶頸基本上的資料庫寫入上了。

那麼資料庫我們還能不能優化呢?由於筆者這裡都是插入操作,就去看了下表結構,果斷去除索引。其實到此,筆者已經較為滿意,原先3,4個小時的匯入,半個小時不到就搞定了。

還有個能夠優化的地方,鑑於環境限制,筆者還沒有去實踐,那就是上集群。有興趣的朋友可以去試試。。。

記一次goto記憶體洩漏

學習c語言時一直被告誡盡量不要使用goto語句,所以對其了解很少。在一次專案使用時由於之前的程式已經使用了goto,按照自己的理解去處理,結果導致記憶體未釋放。例子如下 include int main return 0 error printf aaaaa n printf 11111.n ret...

只有一次 只有一次

二十多歲的年紀我累了很久,也在努力的尋找機會向陽而生。十三歲時迫於生活父母把剛上初一的我獨自留在老家,被父母伺候慣的我沒有一點生活常識,不懂得如何把衣服洗淨,不懂得如何生火做飯,不懂得如何花錢,不懂得如何戰勝黑暗和孤獨,每次乙個人回家時都會出現幻聽和幻覺,看著家裡好像有炊煙,聽誰都像媽媽的聲音.好不...

記一次記憶體溢位(PermGen Space)的坑

環境 jdk1.6 使用技術 urlclassloader 事件描述 使用urlclassloader類載入器,實現熱部署。定時任務載入jar包,任務執行300次左右就會報 permgen space 分析過程 1.檢視記憶體使用情況 jmap heap pid jdk8以後檢視元空間大小 jsta...