Flume-ng HDFS sink原理解析
HDFS sink主要處理過程在process方法:
//迴圈batchSize次或者Channel為空
for (txnEventCount = 0; txnEventCount < batchSize; txnEventCount++) {
//該方法會呼叫BasicTransactionSemantics的具體實現
Event event = channel.take();
if (event == null) {
break;
}
......
//sfWriter是一個LRU快取,快取對檔案Handler,最大開啟檔案由引數maxopenfiles控制
BucketWriter bucketWriter = sfWriters.get(lookupPath);
// 如果不存在,則構造一個快取
if (bucketWriter == null) {
//透過HDFSWriterFactory根據filetype生成一個hdfswriter,由引數hdfs.Filetype控制;eg:HDFSDataStream
HDFSWriter hdfsWriter = writerFactory.getWriter(fileType);
//idleCallback會在bucketWriter flush完畢後從LRU中刪除;
bucketWriter = new BucketWriter(rollInterval, rollSize, rollCount,
batchSize, context, realPath, realName, inUsePrefix, inUseSuffix,
suffix, codeC, compType, hdfsWriter, timedRollerPool,
proxyTicket, sinkCounter, idleTimeout, idleCallback,
lookupPath, callTimeout, callTimeoutPool);
sfWriters.put(lookupPath, bucketWriter);
}
......
// track一個事務內的bucket
if (!writers.contains(bucketWriter)) {
writers.add(bucketWriter);
}
// 寫資料到HDFS;
bucketWriter.append(event);->
open();//如果底層支援append,則透過open介面開啟;否則create介面
//判斷是否進行日誌切換
//根據複製的副本書和目標副本數做對比,如果不滿足則doRotate=false
if (doRotate) {
close();
open();
}
HDFSWriter.append(event);
if (batchCounter == batchSize) {//如果達到batchSize行進行一次flush
flush();->
doFlush()->
HDFSWriter.sync()->
FSDataoutputStream.flush/sync
}
// 提交事務之前,重新整理所有的bucket
for (BucketWriter bucketWriter : writers) {
bucketWriter.flush();
}
transaction.commit();
這裡,無論是BucketWriter執行append,sync還是rename等操作都是提交到一個後臺執行緒池進行非同步處理:callWithTimeout,這個執行緒池的大小是由hdfs.threadsize來設定;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/11676357/viewspace-1060912/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Flume-ng FileChannel原理解析
- HDFS原理
- Flink kafka source & sink 原始碼解析Kafka原始碼
- Hadoop原理之——HDFS原理Hadoop
- HDFS2.0原理
- HDFS架構及原理架構
- HDFS的執行原理
- HDFS原始碼解析系列一——HDFS通訊協議原始碼協議
- 漫畫講解HDFS原理
- 圖說HDFS基本原理
- 【Hadoop】HDFS的執行原理Hadoop
- HDFS原始碼解析:教你用HDFS客戶端寫資料原始碼客戶端
- Hadoop2.7實戰v1.0之Flume1.6.0搭建(Http Source-->Memory Chanel --> Hdfs Sink)HadoopHTTP
- 【Hadoop學習】HDFS基本原理Hadoop
- HDFS讀寫過程解析(R1)
- Hadoop入門(二)之 HDFS 詳細解析Hadoop
- hadoop之 解析HDFS的寫檔案流程Hadoop
- SeaTunnel JDBC DB2 Sink Connector支援的工作原理,快來學習吧!JDBCDB2
- 16-Flink-Redis-SinkRedis
- 解析HOT原理
- DNS解析原理DNS
- Hadoop學習筆記之一 : HDFS原理二Hadoop筆記
- Hadoop學習筆記之一 : HDFS原理一Hadoop筆記
- Hadoop 學習系列(二)之 HDFS 詳細解析Hadoop
- HDFS系列之DataNode磁碟管理解析及實踐!
- Hadoop3.2.1 【 HDFS 】原始碼分析 : Standby Namenode解析Hadoop原始碼
- Flutter原理深度解析Flutter
- Promise原理解析Promise
- CAS原理深度解析
- webpack原理解析Web
- kafka原理解析Kafka
- cli原理解析
- gpfdist原理解析
- Sentinel 原理-全解析
- EventBus 原理解析
- BlockCanary原理解析BloC
- MJExtension原理深入解析
- MyBatis原理解析MyBatis