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 サービスを有効にする」をご参照ください。
操作手順
ECS インスタンスに接続します。詳細については、「ECS インスタンスへの接続」をご参照ください。
-
JindoSDK を設定します。
-
最新の JindoSDK JAR パッケージをダウンロードします。ダウンロードリンクは、GitHub をご参照ください。
-
ダウンロードしたインストールパッケージを解凍します。
次の例では、
jindosdk-x.x.x-linux.tar.gzを解凍する方法を示します。別のバージョンの JindoSDK を使用する場合は、パッケージ名を実際のパッケージ名に置き換えてください。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
-
-
シンクを設定します。
次のコードは、シンク設定の例を示しています。
# 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