flume高階:
講解flume的事務,因為flume是乙個傳輸的工具,所以,它希望資料不要丟,這就需要加事務,三個元件有三個事務。channel都是被動的,從source到channel是source推資料,從channel到sink,是sink主動拉取資料。
flume有兩個事務
除了埠可以做資料來源,本地檔案也可以是,可以按資料夾,單個檔案和多個檔案均可,有批量上傳的,也有斷點徐傳的,都有。
source負責和外面的資料來源打交道
讀取過來的資料,都封裝在enent事件中,event是乙個介面,不是直接把這個event給到channel,而是放到批量提交的地方
這裡有個put事務,channel怎麼都是被動的。
source主動推資料,sink主動拉取資料,
put事務:
source要傳輸資料,也要放在記憶體中,如果用
filechannel也是要用到記憶體的,只不過之後是要將資料放到磁碟中。
如果hdfs的機器比較慢,讀取很慢,導致sink 寫出的速度很慢,那sink拉取的資料就很慢,就會導致channel出現滿了的情況,這時候docommit的話,會出現異常的情況,這時候就需要回滾。已經做了提交,但是出現了異常,因為channel已經滿了,這時候資料只能乖乖的繼續放在putlist裡面等著。
長期channel處於滿的狀態,
之後putlist集合(也在記憶體中)就會記憶體溢位,直接崩了。
這就是put事務
如果已經成功的將putlist的資料寫到了channel中去,就輪到了take事務。
sink自己去拉取資料。
資料從channel到集合takelist,然後sink就從集合中take資料。
總結:記住:兩個事務的名字:put事務,take事務
記住兩個集合:putlist,takelist
source—>channel
先將資料通過doput()寫到到putlist集合裡面,再通過docommit()將putlist集合中的資料推送到channel中,如果在這裡提交失敗,異常了,就需要回滾。將資料在回滾到putlist集合。
先做doput(),然後提交做docommit()
channel—>sink
先將資料放到takelist,sink從takelist裡面拉取資料,如果拉取失敗,這個資料就需要回滾到channel裡面。
後面自定義元件裡面,寫**的時候就需要寫到事務這個東西。但是這個事務已經幫我們封裝好了,我們只需要呼叫api就行。和mysql的事務差不多。
SSIS高階轉換任務 OLE DB命令
ole db commond任務接受輸入流中的行資料並執行一段sql語句或自定義儲存過程。這個轉換和execute sql任務容易混淆,但是它非常類似於在ado連線中迴圈接收乙個結果集中的資料,建立,執行乙個ado命令。輸入流中的引數資料可以提供給乙個sql命令或者儲存過程。這裡我們看到 迴圈 可能...
SSIS高階轉換任務 OLE DB命令
ole db commond任務接受輸入流中的行資料並執行一段sql語句或自定義儲存過程。這個轉換和execute sql任務容易混淆,但是它非常類似於在ado連線中迴圈接收乙個結果集中的資料,建立,執行乙個ado命令。輸入流中的引數資料可以提供給乙個sql命令或者儲存過程。這裡我們看到 迴圈 可能...
非同步任務 AsyncTack高階 結合動態介面
github csdn 2,需要我們寫乙個註解,用於標示介面需要傳入的資料 target elementtype.method retention retentionpolicy.runtime public inte ce urlstring3,寫乙個工具類tools,生成介面的例項 create...