Apache Flumeは、分散型で信頼性が高く、可用性の高いシステムです。 Apache Flumeを使用すると、大量のログデータを収集、集計、移動し、データを集中的に保存できます。 データは、Apache Flumeでflush() を呼び出してFlumeトランザクションにフラッシュされ、JindoSDKを使用してOSS-HDFSに書き込まれます。
前提条件
Elastic Compute Service (ECS) インスタンスが作成されました。 詳細は、インスタンスの作成をご参照ください。
Hadoop環境が作成されます。 Hadoopのインストール方法の詳細については、「手順2: Hadoopランタイム環境の作成」をご参照ください。
Apache Flumeがデプロイされました。 詳細については、Apache Flumeをご覧ください。
バケットのOSS-HDFSが有効になり、OSS-HDFSに対するアクセス許可が付与されます。 詳細については、「OSS-HDFSの有効化とアクセス許可の付与」をご参照ください。
手順
ECS インスタンスに接続します。 詳細については、「インスタンスへの接続」をご参照ください。
JindoSDKを設定します。
JindoSDK JARパッケージの最新バージョンをダウンロードします。 詳細については、『GitHub』をご参照ください。
オプション。 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
ダウンロードしたインストールパッケージを解凍します。
次のサンプルコードは、
jindosdk-x.x.x-linux.tar.gz
という名前のパッケージを解凍する方法の例を示しています。 別のバージョンのJindoSDKを使用する場合は、パッケージ名を対応するJARパッケージの名前に置き換えます。tar -zxvf jindosdk-x.x.x-linux.tar.gz -C/usr/lib
設定
JINDOSDK_HOME
.エクスポート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以上のデータをフラッシュすることを推奨します。 これにより、全体的なパフォーマンスへの影響を防ぎ、大量のステージングファイルが生成されなくなります。 # 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