Apache Flume是一個分布式、可靠和高可用的系統,用于從大量不同的數據源有效地收集、聚合和移動大量日志數據,進行集中式的數據存儲。Flume的核心是Agent,Agent中包含Source、Channel和Sink。本文為您介紹如何使用HDFS Sink寫入數據至JindoFS。
前提條件
已創建集群,并選擇了Flume服務。創建集群詳情,請參見創建集群。
背景信息
Apache Flume的HDFS Sink通過Flush接口保證事務性寫入。JindoFS Block模式從SmartData 3.2.x及后續版本開始默認支持Flush接口,您可以直接配置Sink。
OSS本身不支持Flush接口,SmartData 3.4.x及后續版本支持Flume可恢復性寫入JindoFS Cache模式或OSS。通過支持Flush接口,雖然不能讓數據立刻可見,但是可以確保數據暫存在云端,當寫入程序發生Crash時,您可以通過調用SDK或命令行,恢復程序在Crash之前已經寫入JindoFS Cache模式或OSS的數據。
使用Flume寫入JindoFS Block模式
# 配置JFS Sink
xxx.sinks.jfs_sink.hdfs.path = jfs://${your_ns_name}/flume_dir/%H%M/%S
xxx.sinks.jfs_sink.hdfs.round =true
xxx.sinks.jfs_sink.hdfs.roundValue = 15
xxx.sinks.jfs_sink.hdfs.Unit = minute
xxx.sinks.jfs_sink.hdfs.filePrefix = your_topic
# Sink參數,batchSize需要設置大一些,建議每次Flush的量在32MB以上,否則會影響性能。
xxx.sinks.jfs_sink.hdfs.batchSize = 100000
...
xxx.sinks.jfs_sink.rollSize = 3600
xxx.sinks.jfs_sink.threadsPoolSize = 30
xxx.sinks.jfs_sink.fileType = DataStream
xxx.sinks.jfs_sink.writeFormat = Text
your_ns_name
為您NameSpace的名稱。
使用Flume寫入JindoFS Cache模式或OSS
開啟Flush和Recover功能
使用Flume寫入JindoFS Cache模式時,需要開啟Flush和Recover功能。
恢復文件Flush的數據
jindo jfs -recover [-R]
[-flushStagingPath {flushStagingPath}]
[-accessKeyId ${accessKeyId}]
[-accessKeySecret ${accessKeySecret}]
<path>
參數 | 描述 |
---|---|
-R | 是否遞歸Recover,恢復文件夾時需要添加該參數。 |
-flushStagingPath | Flush的數據和Manifest的暫存區,默認值為/tmp。 例如:在使用默認值時,如果文件的寫入路徑是:oss://test-bucket/dir1/file1,則Staging的路徑為oss://test-bucket/tmp/dir1/file1。 |
-accessKeyId | 阿里云賬號的AccessKey ID。 |
-accessKeySecret | 阿里云賬號的AccessKey Secret。 |
path | Flush的數據的寫入路徑。
例如:oss://test-bucket/dir1/file1或oss://test-bucket/dir1。 |
JindoOssFileSystem jindoFileSystem = (JindoOssFileSystem) fs;
boolean isFolder = true;
jindoFileSystem.recover(path, isFolder);