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 つのコンポーネントからなるプロセス –水流源、 水路チャンネル および 水路シンク– 外部ソースで開始されたイベントがそれを介して伝播します。

用水路 Archi構造
用水路 Archi構造
  1. 上の図では、外部ソース (WebServer) によって生成されたイベントは Flume データ ソースによって消費されます。 外部ソースは、ターゲット ソースによって認識される形式でイベントを Flume ソースに送信します。
  2. Flume Source はイベントを受信し、それを XNUMX つ以上のチャネルに保存します。 チャネルは、イベントがフルーム シンクによって消費されるまでイベントを保持するストアとして機能します。 このチャネルは、これらのイベントを保存するためにローカル ファイル システムを使用する場合があります。
  3. Flume シンクは、チャネルからイベントを削除し、HDFS などの外部リポジトリに保存します。 複数の水路エージェントが存在する可能性があり、その場合、水路シンクはイベントをフロー内の次の水路エージェントの水路ソースに転送します。

FLUME のいくつかの重要な機能

  • Flume は、ストリーミング データ フローに基づいた柔軟な設計を備えています。 複数のフェイルオーバーと回復メカニズムを備えた耐障害性と堅牢性を備えています。 Flume ビッグデータには、次のようなさまざまなレベルの信頼性が提供されます。 「ベストエフォート型配信」「エンドツーエンドの配信」. ベストエフォート型配信 Flume ノードの障害は許容されませんが、 「エンドツーエンドの配信」 モードでは、複数のノードに障害が発生した場合でも配信が保証されます。
  • Flume はソースとシンクの間でデータを伝送します。 このデータ収集は、スケジュールすることも、イベント駆動型にすることもできます。 Flume には独自のクエリ処理エンジンがあり、データの新しいバッチを目的のシンクに移動する前に簡単に変換できます。
  • 可能 水路シンク include HDFS および HBaseFlume Hadoop は、ネットワーク トラフィック データ、ソーシャル メディア Web サイトによって生成されたデータ、電子メール メッセージなど、イベント データを転送するためにも使用できます。

Flume、ライブラリ、ソースコードのセットアップ

実際のプロセスを始める前に、Hadoop がインストールされていることを確認してください。 ユーザーを「hduser」に変更します (Hadoop 構成中に使用される ID。Hadoop 構成中に使用されるユーザー ID に切り替えることができます)

Flume、ライブラリ、ソースコードのセットアップ

ステップ1) 「FlumeTutorial」という名前で新しいディレクトリを作成します。

sudo mkdir FlumeTutorial
  1. 読み取り、書き込み、および実行の権限を与える
    sudo chmod -R 777 FlumeTutorial
  2. ファイルをコピーする MyTwitterSource.java および MyTwitterSourceForFlume.java このディレクトリにあります。

ここから入力ファイルをダウンロード

これらすべてのファイルのファイル権限を確認し、「読み取り」権限がない場合は、同じ権限を付与します。

Flume、ライブラリ、ソースコードのセットアップ

ステップ2) サイトから「Apache Flume」をダウンロードします。 https://flume.apache.org/download.html

この Flume チュートリアルでは、Apache Flume 1.4.0 が使用されています。

Flume、ライブラリ、ソースコードのセットアップ

次へクリック

Flume、ライブラリ、ソースコードのセットアップ

ステップ3) ダウンロードしたtarballを任意のディレクトリにコピーし、次のコマンドを使用して内容を抽出します。

sudo tar -xvf apache-flume-1.4.0-bin.tar.gz

Flume、ライブラリ、ソースコードのセットアップ

このコマンドは、という名前の新しいディレクトリを作成します。 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

Flume、ライブラリ、ソースコードのセットアップ

このコマンドが「読み取り」権限を付与した後、 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/*"

Flume を使用して Twitter からデータをロードする

ステップ3) コマンドを使用してソース コードをコンパイルします。

javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java

Flume を使用して Twitter からデータをロードする

ステップ4)瓶を作成する

まず、作成 マニフェスト.txt 選択したテキストエディタを使用してファイルを作成し、そのファイルに以下の行を追加します。

Main-Class: flume.mytwittersource.MyTwitterSourceForFlume

.. ここ flume.mytwittersource.MyTwitterSourceForFlume メインクラスの名前です。 この行の最後で Enter キーを押す必要があることに注意してください。

Flume を使用して Twitter からデータをロードする

次に、JAR を作成します。MyTwitterSourceForFlume.jar' なので-

jar cfm MyTwitterSourceForFlume.jar Manifest.txt flume/mytwittersource/*.class

Flume を使用して Twitter からデータをロードする

ステップ5) この瓶をコピーする /lib/

sudo cp MyTwitterSourceForFlume.jar <Flume Installation Directory>/lib/

Flume を使用して Twitter からデータをロードする

ステップ6) Flume の設定ディレクトリに移動し、 /conf

flume.conf が存在しない場合は、flume-conf.properties.template をコピーし、名前を flume.conf に変更します。

sudo cp flume-conf.properties.template flume.conf

Flume を使用して Twitter からデータをロードする

If flume-env.sh 存在しない場合はコピーします flume-env.sh.テンプレート 名前を次のように変更します flume-env.sh

sudo cp flume-env.sh.template flume-env.sh

Flume を使用して Twitter からデータをロードする

Twitter アプリケーションの作成

ステップ1) にサインインして Twitter アプリケーションを作成します https://developer.twitter.com/

Twitter アプリケーションの作成

Twitter アプリケーションの作成

ステップ2) に行く 「私のアプリケーション」 (このオプションは次の場合にドロップダウンされます) '卵' 右上隅のボタンをクリックします)

Twitter アプリケーションの作成

ステップ3) をクリックして新しいアプリケーションを作成します。 「新しいアプリを作成」

ステップ4) アプリケーション名、説明、Web サイトを指定して、アプリケーションの詳細を入力します。各入力ボックスの下にある注記を参照してください。

Twitter アプリケーションの作成

ステップ5) ページを下にスクロールし、マークを付けて規約に同意します 'はい私は同意する' そしてボタンをクリックしてください「Twitter アプリケーションを作成する」

Twitter アプリケーションの作成

ステップ6) 新しく作成したアプリケーションのウィンドウで、タブに移動し、 「APIキー」 ページを下にスクロールして ボタンをクリックします 「アクセストークンを作成する」

Twitter アプリケーションの作成

Twitter アプリケーションの作成

ステップ7) ページを更新。

ステップ8) ソフトウェアの制限をクリック 「OAuth のテスト」。 これは表示されます 「OAuth」 アプリケーションの設定。

Twitter アプリケーションの作成

ステップ9) 修正します 「flume.conf」 これらを使用して OAuth設定。 変更手順 「flume.conf」 以下に示します。

Twitter アプリケーションの作成

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

「Flume.conf」ファイルを変更する

ステップ2) また、設定します TwitterAgent.sinks.HDFS.hdfs.path 以下のように、

TwitterAgent.sinks.HDFS.hdfs.path = hdfs:// : / /フラム/ツイート/

「Flume.conf」ファイルを変更する

知るために , および 、パラメータの値を参照してください 'fs.defaultFS' に設定 $HADOOP_HOME/etc/hadoop/core-site.xml

「Flume.conf」ファイルを変更する

ステップ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"

Flume を使用した Twitter データのストリーミング

ステップ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 ~/

Flume を使用した Twitter データのストリーミング

b. 以下のように JAR ファイル「guava」を検索します。

find . -name "guava*"

Flume を使用した Twitter データのストリーミング

移動 グアバ-10.0.1.jar' /lib」。

sudo mv guava-10.0.1.jar ~/

Flume を使用した Twitter データのストリーミング

c. ダウンロード グアバ-17.0.jar from http://mvnrepository.com/artifact/com.google.guava/guava/17.0

Flume を使用した Twitter データのストリーミング

次に、このダウンロードした jar ファイルを次の場所にコピーします。 ' /lib'

ステップ4) に行く ' /置き場' そしてFlumeを次のように起動します-

./flume-ng agent -n MyTwitAgent -c conf -f <Flume Installation Directory>/conf/flume.conf

Flume を使用した Twitter データのストリーミング

Flume がツイートを取得しているコマンド プロンプト ウィンドウ -

Flume を使用した Twitter データのストリーミング

コマンド ウィンドウのメッセージから、出力が次の場所に書き込まれていることがわかります。 /user/hduser/flume/ツイート/ ディレクトリにあります。

次に、Web ブラウザを使用してこのディレクトリを開きます。

ステップ5) データロードの結果を確認するには、ブラウザを使用して開いた http://localhost:50070/ ファイル システムを参照し、データがロードされているディレクトリに移動します。

/フラム/ツイート/

Flume を使用した Twitter データのストリーミング