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

Object Storage Service:JindoSDK と Flume を使用した OSS-HDFS サービスへのデータ書き込み

最終更新日:Sep 09, 2026

Apache Flume は、分散型で信頼性の高い、高可用性 (HA) のシステムです。さまざまなデータソースから大量のログデータを効率的に収集、集約、転送し、集中データストアに格納します。Flume は flush() 呼び出しを使用して、トランザクショナルな書き込みを保証します。JindoSDK を使用して OSS-HDFS サービスにデータを書き込む場合、flush 後にデータがすぐに可視になるため、データ損失を防ぐことができます。

前提条件

  • たとえば、デプロイメント環境が Alibaba Cloud Elastic Compute Service (ECS) インスタンスである場合は、ECS インスタンスを購入する必要があります。

  • Hadoop 環境が作成済みであること。詳細については、「Hadoop ランタイム環境の作成」をご参照ください。

  • Apache Flume がデプロイ済みであること。詳細については、「Apache Flume」をご参照ください。

  • OSS-HDFS サービスが有効化され、承認済みであること。詳細については、「OSS-HDFS サービスを有効にする」をご参照ください。

操作手順

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

  2. JindoSDK を設定します。

    1. 最新の JindoSDK JAR パッケージをダウンロードします。ダウンロードリンクは、GitHub をご参照ください。

    2. ダウンロードしたインストールパッケージを解凍します。

      次の例では、jindosdk-x.x.x-linux.tar.gz を解凍する方法を示します。別のバージョンの JindoSDK を使用する場合は、パッケージ名を実際のパッケージ名に置き換えてください。

      tar -zxvf jindosdk-x.x.x-linux.tar.gz -C /usr/lib
    3. JINDOSDK_HOME 環境変数を設定します。

      export JINDOSDK_HOME=/usr/lib/jindosdk-x.x.x-linux
      export PATH=$JINDOSDK_HOME/bin:$PATH
    4. HADOOP_CLASSPATH 環境変数を設定します。

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

      各ノードで、Flume のルートディレクトリにある lib フォルダーに必要なファイルをデプロイし、環境変数を設定します。

    5. 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 のデータを flush することを推奨します。
    # batchSize の単位はイベント数、つまりログエントリの数です。このパラメーターを設定するには、まず平均イベントサイズを見積もります。たとえば、平均イベントサイズが 200 バイトで、一度に 32 MB のデータを flush する場合、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 が minute に設定され、このパラメーターが 15 に設定されている場合、15 分間のデータが単一のファイルに書き込まれます。これは、15 分ごとに新しいファイルが生成されることを意味します。
    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
    # 各シンクインスタンスが open や write などの HDFS I/O 操作のために使用するスレッドの数。
    xxx.sinks.oss_sink.threadsPoolSize = 30
    ...

    シンク設定パラメーターの詳細については、「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
<!-- アクセスキーとエンドポイントを設定 -->
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