Flume & Twitterデータの投稿はすでにいくつかあるようだが、Cloudera QuickstartのDockerとCDH5.7(2016年4月27日時点で最新版)を使った投稿が無いようなので書いてみた。
動作環境
- Mac OS (Docker インストール済み)
Twitter Applicationの作成
このステップは、OAuthプロセスが超簡単で驚いた。
まずはMacOSのブラウザからTwitterにログインした状態で、https://apps.twitter.com にアクセス。
こんな感じのページが表示されるので、Create New Appをクリック。

次のページでアプリの名前、Description、URLを入力する欄があるので、適当に入力。
URLはFully qualified URL(日本語で「完全修飾ドメイン名」?)が必要。Callback URLは必要なし。

下にスクロールして、Developer Agreementにチェックを入れて、Create your Twitter Applicationのボタンをクリック。
Twitter Applicationが作成されましたよ、という画面が表示される。
そして、画面の上の方にあるKeys and Access Tokensというタブをクリック。次に表示される画面の下の方にある、Create my access tokenというボタンをクリック。
これで認証に必要なAccess token, secret keyなどが発行される。

上のConfirmationページで表示されている、画面右側のTest OAuthというボタンをクリックして、Access token, secret keyなどを表示させる。ここで表示される以下4つのキーは、後で使うのでメモ帳などにコピペしておくと便利。
- Consumer key
- Consumer secret
- Access token
- Access token secret:
Cloudera Quickstart バージョン5.7のDockerイメージをPull
$ docker pull cloudera/quickstart:5.7.0-0-beta
Dockerコンテナ立ち上げ
$ docker run --hostname=quickstart.cloudera --privileged=true -it -d \
cloudera/quickstart:5.7.0-0-beta /usr/bin/docker-quickstart
HDFSのディレクトリ作成
# hadoop fs -mkdir twiter_data
ディレクトリ名はなんでもOK。ついでにWrite accessも与えておく。
# hadoop fs -chmod 777 twitter_data
Flumeの設定
Cloudera QuickstartのDockerコンテナでは、Flumeは /usr/lib/flume-ng に配置されてる。
/usr/lib/flume-ng/conf を見ると、すでに参考の設定ファイルがある。
が、無視して新しい設定ファイルを作成。仮に、flume-twitter.confというファイル名にして、以下の設定を記入。
TwitterAgent.sources = Twitter
TwitterAgent.channels = MemChannel
TwitterAgent.sinks = HDFS
# Configuration for soruce
TwitterAgent.sources.Twitter.type = org.apache.flume.source.twitter.TwitterSource
TwitterAgent.sources.Twitter.consumerKey = <Twitter Appから取得したCustomer key>
TwitterAgent.sources.Twitter.consumerSecret = <Twitter Appから取得したCustomer secret>
TwitterAgent.sources.Twitter.accessToken = <Twitter Appから取得した Access token>
TwitterAgent.sources.Twitter.accessTokenSecret = <Twitter Appから取得したAccess token secret>
TwitterAgent.sources.Twitter.keywords = java, bigdata, mapreduce, hbase, Hadoop
# Configuration for sink
TwitterAgent.sinks.HDFS.type = hdfs
TwitterAgent.sinks.HDFS.hdfs.path = hdfs://quickstart.cloudera:8020/twitter_data/
TwitterAgent.sinks.HDFS.hdfs.fileType = DataStream
TwitterAgent.sinks.HDFS.hdfs.writeFormat = Text
TwitterAgent.sinks.HDFS.hdfs.batchSize = 1000
TwitterAgent.sinks.HDFS.hdfs.rollSize = 0
TwitterAgent.sinks.HDFS.hdfs.rollCount = 10000
# Configuration for Channel
TwitterAgent.channels.MemChannel.type = memory
TwitterAgent.channels.MemChannel.capacity = 10000
TwitterAgent.channels.MemChannel.transactionCapacity = 100
# Binding source and sink to the channel
TwitterAgent.sources.Twitter.channels = MemChannel
TwitterAgent.sinks.HDFS.channel = MemChannel
"TwitterAgent"は、いわゆるAgent名。
この設定で変える部分はTwitter Applicationで取得したOAuth情報と、TwitterAgent.sinks.HDFS.hdfs.pathに設定されているURL。
HDFSのURLは、/etc/hadoop/conf/core-site.xmlのfs.defaultFSを参照。
自分の場合Dockerコンテナを起動する際にホスト名をcloudera.quickstartと明記したため、HDFSのURL はデフォルトで hdfs://quickstart.cloudera:8020 になってた。
Flume Agentの起動
/usr/lib/flume-ngディレクトリから、以下のコマンドを実行。
# flume-ng agent --conf ./conf/ -f conf/flume-twitter.conf -Dflume.root.logger=DEBUG,console -n TwitterAgent
うまくいくと、コンソール上に膨大な量のログが表示されて、Hadoopファイルシステムのディレクトリにもログが保存されていきます。