Apache Flumeへのイントロダクション

Apache Flumeへのイントロダクション

  • オーケストレーション
6分で読めます 更新日 Apr 20, 2017

ポイント: Apache Flumeは、高ボリュームのデータストリームを効率的に読み取り、データ損失なくストレージシステムに書き込むためのツールです。ログやTwitterフィードなど、さまざまなソースをサポートしています。

  • FlumeはHDFS、Hive、ElasticSearchなどのシステムにデータを出力します。
  • 設定は、データフローを管理するためにソース、シンク、チャネルを定義することを含みます。

Flume 101

Apache Flumeはデータソースからデータを読み込み、高ボリュームでストレージに書き込み、イベントを失うことなく処理します。これらのデータフィードには、ストリーミングログ、ネットワークトラフィック、Twitterフィードなどが含まれます(下記の例を参照)。

ただし、データ操作は行いません。代わりに、Hiveのようにそれを操作できるものに書き込むことができます。その場合、HiveのSQLに似たコマンド(HQL)を使用して処理します。または、ElasticSearchに出力することもでき、データはJSON形式で保存され、Kibanaでクエリできます。データを保存するための他の多くの選択肢もあります。

play

インストール

Flumeのインストールは簡単です。ダウンロードして解凍するだけです。設定するクラスパスなどはありません。Flumeを開始するのではなく、代わりに読み取りと保存を行いたいデータソースごとにエージェントを起動します。

Flumeのソースとシンク

習得すべき専門用語はあまりありません:

ソースは入力データです。シンクは出力です。そしてメモリチャネルはメモリ内にイベントを保存し、エージェントがダウンした場合にはそれらが失われるという条件があります。Flumeがサポートするシンク、ソース、メモリチャネルのいくつかには以下が含まれます:

ソース—Avro(スキーマを用いたデータシリアル化)、Thrift(異なるプログラミング言語間の通信を促進するためにFacebookによって書かれた抽象化)、Exec(シェルコマンド)、JMS(メッセージング)、Twitter、Kafka(LinkedInのストリーミング製品)、NetCat、Syslog、HTTP、カスタム(自分で書くことができ、サードパーティのものもたくさんあります。)

シンク—HDFS、Hive、Logger(Apache log4j)、ElasticSearch、Kafka、カスタム(Cassandra、HBase、MongoDBなどのサードパーティプラグイン)

メモリチャネル—JDBC(データベースを意味する)、Kafka、ファイル、カスタム

設定

Flumeエージェントの設定は以下に示す形式です。ソース(入力)、シンク(出力)、チャネル(ソースをシンクに接続)があります。エージェント名は自由に作成したものです。

色分けは、ソース、シンク、チャネルの名前を宣言し、それらを対応するオプションと関連付ける方法を示しています。

    (agent name).sources = (source name)
(agent name).channels = (channel name)
(agent name).sinks = (sink name)

(agent name).sources.(source name).options = value
(agent name).sinks.(sink name).options = value

(agent name).channels.(channel name).options = value

(agent name).sinks.(sink name).channel =   (channel name)
(agent name).sources.(sink name).channel =   (channel name)

エージェントを起動するには、binフォルダーに移動し、実行します:

    ./flume-ng agent -n (agent name) -c conf -f ../conf/(agent config file name)

ファイルをテールする

ここにCentOSシステムでsyslogを読み取る方法の例があります。実際には、syslogを使用し、FlumeをTCPまたはUDPメッセージをリッスンするように設定することが最も一般的ですが、ここでは単にtailを使用します。

このデータをHadoopに保存したいので、ディレクトリを作成します:

    hadoop fs -mkdir /flume

こちらが私たちの設定ファイルです。execおよびhdfsのタイプに注意してください。各タイプには異なるオプションがあります。execタイプはコマンドを実行する必要があります。また、hdfsタイプはパスが必要です。

    cat ../conf/flume.conf

# give names to the agent, source, sinks, and channels
agent.sources=tail
agent.sinks=hdfs
agent.channels=ch1

# tell it what command to run
agent.sources.tail.type=exec
agent.sources.tail.command=tail -F /var/log/messages

# give Hadoop options
agent.sinks.hdfs.type=hdfs
agent.sinks.hdfs.hdfs.path=/flume
agent.sinks.hdfs.hdfs.filePrefix=syslog
agent.sinks.hdfs.hdfs.rollInterval=10
agent.sinks.hdfs.hdfs.rollSize=0

# give channel options
agent.channels.ch1.type=memory
agent.channels.ch1.capacity=1000

# connect the sources and sinks to the channel
agent.sources.tail.channels=ch1
agent.sinks.hdfs.channel=ch1

Flumeエージェントを起動します。エージェントの名前はflume.confに記載したエージェント名と一致させる必要があります。

    ./flume-ng agent -n (agent  name) -c conf -f ../conf/(config file)

その後、stdoutがデータが書き込まれたことを示すメッセージを出力します:

    17/03/08 16:42:44 INFO hdfs.HDFSEventSink: Closing /flume/syslog
17/03/08 16:42:44 INFO hdfs.BucketWriter: Closing /flume/syslog.1488987752411.tmp
17/03/08 16:42:44 INFO hdfs.BucketWriter: Renaming /flume/syslog.1488987752411.tmp to /flume/syslog.1488987752411

catを使用して書き込まれた内容を確認できます。必ずしも読みやすいテキストではないかもしれません。

    hadoop fs -cat /flume/syslog.1488987752411

設定ファイルに誤りがある場合、FlumeはJavaスタックトレースを出力し、何が問題かを示す比較的フレンドリーなエラーメッセージを表示します。

Twitter

ここでは、TwitterのストリーミングAPIを使用してTwitterのツイートを書き込み、それをHadoopに保存します。これを行うには、最初にhttps://apps.twitter.com/でアプリを作成する必要があり、接続に必要なキーが得られます。

ツイートはFlume内に構造を持ちません。したがって、それらを操作したい場合は、例えばHiveに書き込むことになります。しかし、それを行うにはHiveでTwitterスキーマを作成する必要があります。その方法についてはインターネットで指示を探すことができます。この例では、単にHadoopに書き込みます。

    TwitterAgent.sources = Twitter
TwitterAgent.channels = t1
TwitterAgent.sinks = hdfs

TwitterAgent.sources.Twitter.type = org.apache.flume.source.twitter.TwitterSource
TwitterAgent.sources.Twitter.consumerKey = (obfuscated)
TwitterAgent.sources.Twitter.consumerSecret =  (obfuscated)
TwitterAgent.sources.Twitter.accessToken =  (obfuscated)
TwitterAgent.sources.Twitter.accessTokenSecret =  (obfuscated)
TwitterAgent.sources.Twitter.keywords = health
TwitterAgent.sinks.console.type = logger

TwitterAgent.sinks.hdfs.type=hdfs
TwitterAgent.sinks.hdfs.hdfs.path=/flume/twitter
TwitterAgent.sinks.hdfs.hdfs.filePrefix=messages
TwitterAgent.sinks.hdfs.hdfs.rollInterval=10
TwitterAgent.sinks.hdfs.hdfs.rollSize=0

TwitterAgent.channels.t1.type=memory
TwitterAgent.channels.t1.capacity = 1000


TwitterAgent.sources.Twitter.channels = t1
TwitterAgent.sinks.hdfs.channel = t1

次に、Hadoopに書き込まれたファイルをリストします:

    -rw-r--r--   1 root supergroup  217127 2017-03-08 14:54 
/flume/twitter/messages.1488981289896
-rw-r--r--   1 root supergroup  232847 2017-03-08 14:55
/flume/twitter/messages.1488981289897
-rw-r--r--   1 root supergroup     227083 2017-03-08 14:55 
/flume/twitter/messages.1488981289898

コンソールにツイートをログするには:

    TwitterAgent.sinks.console.type = logger

ただし、見ての通り、16進数で表示され、読みづらいです:

    7/03/08 14:44:39 INFO sink.LoggerSink: Event: { headers:{} body: 4F 62 6A 01 02 16 61
76 72 6F 2E 73 63 68 65 6D Obj...avro.schem }
17/03/08 14:44:41 INFO sink.LoggerSink: Event: { headers:{} body: 4F 62 6A 01 02 16 61 
76 72 6F 2E 73 63 68 65 6D Obj...avro.schem }

これがFlumeの基本的な紹介です。見ての通り、全く複雑な製品ではありません。演習として、syslogをFlumeに書き込んでみることをお勧めします。

これらの投稿は私自身の意見であり、BMCの立場、戦略、または意見を必ずしも代表するものではありません。

オーケストレーションの関連記事

The Briefを購読する

このオファーに登録することで、あなたはBMCのプライバシーポリシーを読み、同意したことを確認します。

ありがとう

あなたはThe Briefに登録されました
The Briefはメインフレームとエンタープライズオーケストレーション—BMC AMIとControl-M—および、両者に関するアナリストの研究、顧客の展開、イベントをカバーしています。