全部產品
Search
文件中心

:Flume使用JindoSDK寫入OSS-HDFS服務

更新時間:Jun 19, 2024

Apache Flume是一個分布式、可靠和高可用的系統,用於從大量不同的資料來源有效地收集、彙總和移動大量日誌資料,進行集中式的資料存放區。Flume通過調用flush()保證事務性寫入,並通過JindoSDK寫入OSS-HDFS服務,確保flush後的資料立刻可見,保證資料不丟失。

前提條件

操作步驟

  1. 串連ECS執行個體。具體操作,請參見串連ECS執行個體

  2. 配置JindoSDK。

    1. 下載最新版本的Jindo SDK JAR包。下載地址,請參見GitHub

    2. 可選:如果您的環境中未包含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
    3. 解壓下載的安裝包。

      以下以解壓jindosdk-x.x.x-linux.tar.gz為例,如使用其他版本的JindoSDK,請替換為對應的JAR包名稱。

      tar -zxvf jindosdk-x.x.x-linux.tar.gz -C/usr/lib
    4. 配置JINDOSDK_HOME

      export JINDOSDK_HOME=/usr/lib/jindosdk-x.x.x-linux
      export PATH=$JINDOSDK_HOME/bin:$PATH
    5. 配置HADOOP_CLASSPATH

      export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:${FLUME_HOME}/lib/*
      重要

      請將安裝目錄和環境變數部署到每個節點Flume根目錄下的lib檔案夾。

    6. 配置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
  3. 配置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