Apache Flume是一個分布式、可靠和高可用的系統,用于從大量不同的數據源有效地收集、聚合和移動大量日志數據,進行集中式的數據存儲。Flume通過調用flush()保證事務性寫入,并通過JindoSDK寫入OSS-HDFS服務,確保flush后的數據立刻可見,保證數據不丟失。
前提條件
已創建ECS實例。具體步驟,請參見選購ECS實例。
已創建Hadoop環境。具體步驟,請參見創建Hadoop運行環境。
已部署Apache Flume。具體步驟,請參見Apache Flume。
已開通并授權訪問OSS-HDFS服務。具體操作,請參見開通并授權訪問OSS-HDFS服務。
操作步驟
連接ECS實例。具體操作,請參見連接ECS實例。
配置JindoSDK。
下載最新版本的Jindo SDK JAR包。下載地址,請參見GitHub。
可選:如果您的環境中未包含Kerberos和SASL相關依賴,則需要在部署JindoSDK的所有節點安裝以下依賴。
Ubuntu或Debian
sudo apt-get install libkrb5-dev krb5-admin-server krb5-kdc krb5-user libsasl2-dev libsasl2-modules libsasl2-modules-gssapi-mit
Red Hat Enterprise Linux或CentOS
sudo yum install krb5-server krb5-workstation cyrus-sasl-devel cyrus-sasl-gssapi cyrus-sasl-plain
macOS
brew install krb5
解壓下載的安裝包。
以下以解壓
jindosdk-x.x.x-linux.tar.gz
為例,如使用其他版本的JindoSDK,請替換為對應的JAR包名稱。tar -zxvf jindosdk-x.x.x-linux.tar.gz -C/usr/lib
配置
JINDOSDK_HOME
。export JINDOSDK_HOME=/usr/lib/jindosdk-x.x.x-linux export PATH=$JINDOSDK_HOME/bin:$PATH
配置
HADOOP_CLASSPATH
。export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:${FLUME_HOME}/lib/*
重要請將安裝目錄和環境變量部署到每個節點Flume根目錄下的lib文件夾。
配置
FLUME_CLASSPATH
。cp ${FLUME_HOME}/conf/flume-env.sh.template ${FLUME_HOME}/conf/flume-env.sh echo "FLUME_CLASSPATH=/usr/lib/jindosdk-x.x.x-linux/lib/*" >> ${FLUME_HOME}/conf/flume-env.sh
配置Sink。
配置Sink示例如下:
# 配置OSS Sink。your_bucket填寫為已開啟OSS-HDFS服務的Bucket。 xxx.sinks.oss_sink.hdfs.path = oss://${your_bucket}/flume_dir/%Y-%m-%d/%H # 寫入Flume事務中最大的event數量。推薦每次Flush的量在32 MB以上,避免Flush過小影響整體性能以及產生大量的staging文件。 # batchSize單位為event數量(即日志行數),設置時需要先評估event平均大小(例如200 Byte),假設每次Flush的大小預期為32 MB,則batchSize約為160000(32 MB / 200 Byte)。 xxx.sinks.oss_sink.hdfs.batchSize = 100000 ... # 用于HDFS文件按照時間分區,時間戳向下取整。默認值為true。 xxx.sinks.oss_sink.hdfs.round = true # 當xxx.sinks.oss_sink.hdfs.round設置為true時,配合xxx.sinks.oss_sink.hdfs.roundUnit時間單位一起使用。例如,xxx.sinks.oss_sink.hdfs.roundUnit值為minute,該值設置為60,則表示60分鐘之內的數據寫到一個文件中,相當于每60分鐘生成一個文件。 xxx.sinks.oss_sink.hdfs.roundValue = 15 # 按時間分區使用的時間單位。默認值為minute,可選值為second、minute和hour。 xxx.sinks.oss_sink.hdfs.roundUnit = minute # Flume在HDFS文件夾下創建新文件的固定前綴。 xxx.sinks.oss_sink.hdfs.filePrefix = your_topic # 當前文件寫入達到該大小后觸發滾動創建新文件,單位為字節。0表示不根據文件大小來分割文件。 xxx.sinks.oss_sink.rollSize = 3600 # 每個Sink實例操作HDFS IO時開啟的線程數(例如open、write等)。 xxx.sinks.oss_sink.threadsPoolSize = 30 ...
關于配置Sink涉及的各參數含義,請參見Apache Flume。
常見問題
報錯“org.apache.flume.conf.ConfigurationException: Component has no type. Cannot configure.user_sink”
在Hadoop的core-site.xml配置文件中添加以下配置解決該問題。
配置JindoOSS實現類。
fs.AbstractFileSystem.oss.impl com.aliyun.jindodata.oss.OSS
fs.oss.impl com.aliyun.jindodata.oss.OssFileSystem
配置AccessKey及Endpoint。
fs.oss.credentials.provider com.aliyun.jindodata.auth.SimpleAliyunCredentialsProvider
fs.oss.accessKeyId LTAI********
fs.oss.accessKeySecret KZo1********
fs.oss.endpoint {regionId}.oss-dls.aliyuncs.com
文檔內容是否對您有幫助?