Apache Flume チュートリアル: とは Archi構造と Hadoop の例
Hadoop の Apache Flume とは何ですか?
アパッチフルーム 大量のログ データを収集、集約、移動するための信頼性の高い分散システムです。ストリーミング データ フローに基づくシンプルでありながら柔軟なアーキテクチャを備えています。Apache Flume は、Web サーバーからログ ファイルに存在するログ データを収集し、分析のために HDFS に集約するために使用されます。
Hadoop の Flume は、次のような複数のソースをサポートしています。
- 'tail' (Unix コマンドの 'tail' と同様に、ローカル ファイルからデータをパイプし、Flume 経由で HDFS に書き込みます)
- システムログ
- Apache ログ 4j (有効にする Java アプリケーションが Flume 経由で HDFS 内のファイルにイベントを書き込むことを可能にします。
用水路 Archi構造
A 水流エージェント JVM 3 つのコンポーネントからなるプロセス –水流源、 水路チャンネル および 水路シンク– 外部ソースで開始されたイベントがそれを介して伝播します。

- 上の図では、外部ソース (WebServer) によって生成されたイベントは Flume データ ソースによって消費されます。 外部ソースは、ターゲット ソースによって認識される形式でイベントを Flume ソースに送信します。
- Flume Source はイベントを受信し、それを XNUMX つ以上のチャネルに保存します。 チャネルは、イベントがフルーム シンクによって消費されるまでイベントを保持するストアとして機能します。 このチャネルは、これらのイベントを保存するためにローカル ファイル システムを使用する場合があります。
- Flume シンクは、チャネルからイベントを削除し、HDFS などの外部リポジトリに保存します。 複数の水路エージェントが存在する可能性があり、その場合、水路シンクはイベントをフロー内の次の水路エージェントの水路ソースに転送します。
FLUME のいくつかの重要な機能
- Flume は、ストリーミング データ フローに基づいた柔軟な設計を備えています。 複数のフェイルオーバーと回復メカニズムを備えた耐障害性と堅牢性を備えています。 Flume ビッグデータには、次のようなさまざまなレベルの信頼性が提供されます。 「ベストエフォート型配信」 と 「エンドツーエンドの配信」. ベストエフォート型配信 Flume ノードの障害は許容されませんが、 「エンドツーエンドの配信」 モードでは、複数のノードに障害が発生した場合でも配信が保証されます。
- Flume はソースとシンクの間でデータを伝送します。 このデータ収集は、スケジュールすることも、イベント駆動型にすることもできます。 Flume には独自のクエリ処理エンジンがあり、データの新しいバッチを目的のシンクに移動する前に簡単に変換できます。
- 可能 水路シンク include HDFS および HBaseFlume Hadoop は、ネットワーク トラフィック データ、ソーシャル メディア Web サイトによって生成されたデータ、電子メール メッセージなど、イベント データを転送するためにも使用できます。
Flume、ライブラリ、ソースコードのセットアップ
実際のプロセスを始める前に、Hadoop がインストールされていることを確認してください。 ユーザーを「hduser」に変更します (Hadoop 構成中に使用される ID。Hadoop 構成中に使用されるユーザー ID に切り替えることができます)
ステップ1) 「FlumeTutorial」という名前で新しいディレクトリを作成します。
sudo mkdir FlumeTutorial
- 読み取り、書き込み、および実行の権限を与える
sudo chmod -R 777 FlumeTutorial
- ファイルをコピーする MyTwitterSource.java および MyTwitterSourceForFlume.java このディレクトリにあります。
これらすべてのファイルのファイル権限を確認し、「読み取り」権限がない場合は、同じ権限を付与します。
ステップ2) サイトから「Apache Flume」をダウンロードします。 https://flume.apache.org/download.html
この Flume チュートリアルでは、Apache Flume 1.4.0 が使用されています。
次へクリック
ステップ3) ダウンロードしたtarballを任意のディレクトリにコピーし、次のコマンドを使用して内容を抽出します。
sudo tar -xvf apache-flume-1.4.0-bin.tar.gz
このコマンドは、という名前の新しいディレクトリを作成します。 apache-flume-1.4.0-bin そこにファイルを抽出します。 このディレクトリは次のように呼ばれます 記事の残りの部分で。
ステップ4) Flume ライブラリのセットアップ
コピー twitter4j-core-4.0.1.jar、flume-ng-configuration-1.4.0.jar、flume-ng-core-1.4.0.jar、flume-ng-sdk-1.4.0.jar 〜へ
/lib/
コピーされた JAR のいずれかまたはすべてに実行権限が必要な場合があります。 これにより、コードのコンパイルで問題が発生する可能性があります。 したがって、そのような JAR に対する実行権限を取り消します。
私の場合、 twitter4j-core-4.0.1.jar は 許可を実行する必要があります。 以下のように取り消しました-
sudo chmod -x twitter4j-core-4.0.1.jar
このコマンドが「読み取り」権限を付与した後、 twitter4j-core-4.0.1.jar すべてに。
sudo chmod +rrr /usr/local/apache-flume-1.4.0-bin/lib/twitter4j-core-4.0.1.jar
ダウンロードしたことに注意してください-
– twitter4j-core-4.0.1.jar from https://mvnrepository.com/artifact/org.twitter4j/twitter4j-core
– すべての炎の JAR、すなわち、 flume-ng-*-1.4.0.jar from http://mvnrepository.com/artifact/org.apache.flume
Flume を使用して Twitter からデータをロードする
ステップ1) ソース コード ファイルが含まれるディレクトリに移動します。
ステップ2) 作成セッションプロセスで クラスパス 含む /lib/* および ~/FlumeTutorial/flume/mytwittersource/*
export CLASSPATH="/usr/local/apache-flume-1.4.0-bin/lib/*:~/FlumeTutorial/flume/mytwittersource/*"
ステップ3) コマンドを使用してソース コードをコンパイルします。
javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java
ステップ4)瓶を作成する
まず、作成 マニフェスト.txt 選択したテキストエディタを使用してファイルを作成し、そのファイルに以下の行を追加します。
Main-Class: flume.mytwittersource.MyTwitterSourceForFlume
.. ここ flume.mytwittersource.MyTwitterSourceForFlume メインクラスの名前です。 この行の最後で Enter キーを押す必要があることに注意してください。
次に、JAR を作成します。MyTwitterSourceForFlume.jar' なので-
jar cfm MyTwitterSourceForFlume.jar Manifest.txt flume/mytwittersource/*.class
ステップ5) この瓶をコピーする /lib/
sudo cp MyTwitterSourceForFlume.jar <Flume Installation Directory>/lib/
ステップ6) Flume の設定ディレクトリに移動し、 /conf
flume.conf が存在しない場合は、flume-conf.properties.template をコピーし、名前を flume.conf に変更します。
sudo cp flume-conf.properties.template flume.conf
If flume-env.sh 存在しない場合はコピーします flume-env.sh.テンプレート 名前を次のように変更します flume-env.sh
sudo cp flume-env.sh.template flume-env.sh
Twitter アプリケーションの作成
ステップ1) にサインインして Twitter アプリケーションを作成します https://developer.twitter.com/
ステップ2) に行く 「私のアプリケーション」 (このオプションは次の場合にドロップダウンされます) '卵' 右上隅のボタンをクリックします)
ステップ3) をクリックして新しいアプリケーションを作成します。 「新しいアプリを作成」
ステップ4) アプリケーション名、説明、Web サイトを指定して、アプリケーションの詳細を入力します。各入力ボックスの下にある注記を参照してください。
ステップ5) ページを下にスクロールし、マークを付けて規約に同意します 'はい私は同意する' そしてボタンをクリックしてください「Twitter アプリケーションを作成する」
ステップ6) 新しく作成したアプリケーションのウィンドウで、タブに移動し、 「APIキー」 ページを下にスクロールして ボタンをクリックします 「アクセストークンを作成する」
ステップ7) ページを更新。
ステップ8) ソフトウェアの制限をクリック 「OAuth のテスト」。 これは表示されます 「OAuth」 アプリケーションの設定。
ステップ9) 修正します 「flume.conf」 これらを使用して OAuth設定。 変更手順 「flume.conf」 以下に示します。
Consumer key、Consumer Secret、Access Token、Access Token Secret をコピーして「flume.conf」を更新する必要があります。
注: これらの値はユーザーに属し、機密情報であるため、共有しないでください。
「flume.conf」ファイルを変更する
ステップ1) 店は開いています 「flume.conf」 書き込みモードで以下のパラメータの値を設定します。
sudo gedit flume.conf
以下の内容をコピーします-
MyTwitAgent.sources = Twitter MyTwitAgent.channels = MemChannel MyTwitAgent.sinks = HDFS MyTwitAgent.sources.Twitter.type = flume.mytwittersource.MyTwitterSourceForFlume MyTwitAgent.sources.Twitter.channels = MemChannel MyTwitAgent.sources.Twitter.consumerKey = <Copy consumer key value from Twitter App> MyTwitAgent.sources.Twitter.consumerSecret = <Copy consumer secret value from Twitter App> MyTwitAgent.sources.Twitter.accessToken = <Copy access token value from Twitter App> MyTwitAgent.sources.Twitter.accessTokenSecret = <Copy access token secret value from Twitter App> MyTwitAgent.sources.Twitter.keywords = guru99 MyTwitAgent.sinks.HDFS.channel = MemChannel MyTwitAgent.sinks.HDFS.type = hdfs MyTwitAgent.sinks.HDFS.hdfs.path = hdfs://localhost:54310/user/hduser/flume/tweets/ MyTwitAgent.sinks.HDFS.hdfs.fileType = DataStream MyTwitAgent.sinks.HDFS.hdfs.writeFormat = Text MyTwitAgent.sinks.HDFS.hdfs.batchSize = 1000 MyTwitAgent.sinks.HDFS.hdfs.rollSize = 0 MyTwitAgent.sinks.HDFS.hdfs.rollCount = 10000 MyTwitAgent.channels.MemChannel.type = memory MyTwitAgent.channels.MemChannel.capacity = 10000 MyTwitAgent.channels.MemChannel.transactionCapacity = 1000
ステップ2) また、設定します TwitterAgent.sinks.HDFS.hdfs.path 以下のように、
TwitterAgent.sinks.HDFS.hdfs.path = hdfs:// : / /フラム/ツイート/
知るために , および 、パラメータの値を参照してください 'fs.defaultFS' に設定 $HADOOP_HOME/etc/hadoop/core-site.xml
ステップ3) データを HDFS にフラッシュするには、以下のエントリが存在する場合は削除します。
TwitterAgent.sinks.HDFS.hdfs.rollInterval = 600
例: Flume を使用した Twitter データのストリーミング
ステップ1) 店は開いています 「flume-env.sh」 書き込みモードで以下のパラメータの値を設定します。
JAVA_HOME=<Installation directory of Java>
FLUME_CLASSPATH="<Flume Installation Directory>/lib/MyTwitterSourceForFlume.jar"
ステップ2) Hadoopを開始する
$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh
ステップ3) Flume tarball の 2.2.0 つの JAR ファイルは、Hadoop 2.2.0 と互換性がありません。 そのため、Flume を Hadoop XNUMX と互換性を持たせるには、この Apache Flume の例で以下の手順に従う必要があります。
a. 移動 protobuf-java-2.4.1.jar の ' /lib」。
に行く ' /lib'
CD /lib
sudo mv protobuf-java-2.4.1.jar ~/
b. 以下のように JAR ファイル「guava」を検索します。
find . -name "guava*"
移動 グアバ-10.0.1.jar の ' /lib」。
sudo mv guava-10.0.1.jar ~/
c. ダウンロード グアバ-17.0.jar from http://mvnrepository.com/artifact/com.google.guava/guava/17.0
次に、このダウンロードした jar ファイルを次の場所にコピーします。 ' /lib'
ステップ4) に行く ' /置き場' そしてFlumeを次のように起動します-
./flume-ng agent -n MyTwitAgent -c conf -f <Flume Installation Directory>/conf/flume.conf
Flume がツイートを取得しているコマンド プロンプト ウィンドウ -
コマンド ウィンドウのメッセージから、出力が次の場所に書き込まれていることがわかります。 /user/hduser/flume/ツイート/ ディレクトリにあります。
次に、Web ブラウザを使用してこのディレクトリを開きます。
ステップ5) データロードの結果を確認するには、ブラウザを使用して開いた http://localhost:50070/ ファイル システムを参照し、データがロードされているディレクトリに移動します。
/フラム/ツイート/