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