すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:Apache FlumeでJindoSDKを使用してOSS-HDFSにデータを書き込む

最終更新日:May 06, 2024

Apache Flumeは、分散型で信頼性が高く、可用性の高いシステムです。 Apache Flumeを使用すると、大量のログデータを収集、集計、移動し、データを集中的に保存できます。 データは、Apache Flumeでflush() を呼び出してFlumeトランザクションにフラッシュされ、JindoSDKを使用してOSS-HDFSに書き込まれます。

前提条件

手順

  1. ECS インスタンスに接続します。 詳細については、「インスタンスへの接続」をご参照ください。

  2. JindoSDKを設定します。

    1. JindoSDK JARパッケージの最新バージョンをダウンロードします。 詳細については、『GitHub』をご参照ください。

    2. オプション。 Kerberos関連およびSASL関連の依存関係が環境に含まれていない場合は、JindoSDKがデプロイされているすべてのノードに次の依存関係をインストールします。

      • UbuntuまたはDebian

        sudo apt-getインストール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.

      エクスポート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. シンクを設定します。

    次のサンプルコードは、シンクを設定する方法の例を示しています。

    # OSSシンクを設定します。 your_bucketをOSS-HDFSが有効になっているバケットに設定します。 
    xxx.sinks.oss_sink.hdfs.path = oss://${your_bucket}/flume_dir/% Y-% m-% d/% H
    
    # Flumeトランザクションに書き込むことができるイベントの最大数を指定します。 毎回32 MB以上のデータをフラッシュすることを推奨します。 これにより、全体的なパフォーマンスへの影響を防ぎ、大量のステージングファイルが生成されなくなります。 
    # batchSizeパラメーターは、ログエントリの数であるイベントの数を指定します。 このパラメーターを設定する前に、イベントの平均サイズを評価する必要があります。 例えば、平均サイズは200バイトである。 毎回フラッシュされるデータのサイズが32 MBの場合、batchSizeパラメーターの値は約160,000 (32 MB/200バイト) です。 
    xxx.sinks.oss_sink.hdfs.batchSize = 100000
    
    ...
    # Hadoop分散ファイルシステム (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パラメーターを分に設定し、xxx.sinks.oss_sink.hdfs.roundValueパラメーターを60に設定した場合、データは60分以内にファイルに書き込まれます。 
    xxx.sinks.oss_sink.hdfs.roundValue = 15
    # タイムパーティションで使用されるタイムユニットを指定します。 デフォルト値: 分。 有効な値: second、minute、hour。 
    xxx.sinks.oss_sink.hdfs.roundUnit = minute
    # Apache Flumeによって生成された新しいファイルの固定プレフィックスをHDFSディレクトリに指定します。 
    xxx.sinks.oss_sink.hdfs.filePrefix = your_topic
    # システムが新しいファイルを作成するトリガーとなるファイルサイズを指定します。 ファイルサイズに達するたびに、システムは新しいファイルを作成します。 単位:バイト 値0は、ファイルがファイルサイズに基づいて分割されないことを指定します。 
    xxx.sinks.oss_sink.rollSize = 3600
    # 各シンクインスタンスがHDFS IO操作を実行するために有効になる、openやwriteなどのスレッドの数を指定します。 
    xxx.sinks.oss_sink.threadsPoolSize = 30
    ... 

    シンクの設定に必要なパラメーターの詳細については、「Apache Flume」をご参照ください。

よくある質問

"org.apache.flume.conf.ConfigurationException: コンポーネントに型がない場合はどうすればよいですか。 Canno t configure.us er_sink "エラーメッセージが返されますか?

次の設定をHadoopのcore-site.xml設定ファイルに追加して、問題を解決します。

JindoOSSの実装クラスを設定します。 
fs.AbstractFileSystem.oss.impl com.aliyun.jindodata.oss.OSS
fs.oss.impl com.aliyun.jindodata.oss.OssFileSystem
AccessKeyペアとエンドポイントを設定します。 
fs.oss.credentials.provider com.aliyun.jindodata.auth.SimpleAliyunCredentialsProvider
fs.oss.accessKeyId LTAI *********
fs.oss.accessKeySecret KZo1 ********
fs.oss.endpoint {regionI d}.oss-dls.aliyuncs.com