LoginSignup
4
4

More than 5 years have passed since last update.

DockerでFlumeからHDFSにTwitterデータを収集してみる

Last updated at Posted at 2016-04-27

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をクリック。

Screen Shot 2016-04-27 at 12.44.22 AM.png

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

Screen Shot 2016-04-27 at 2.05.00 AM.png

下にスクロールして、Developer Agreementにチェックを入れて、Create your Twitter Applicationのボタンをクリック。
Twitter Applicationが作成されましたよ、という画面が表示される。

Screen Shot 2016-04-27 at 2.10.44 AM.png

そして、画面の上の方にあるKeys and Access Tokensというタブをクリック。次に表示される画面の下の方にある、Create my access tokenというボタンをクリック。

Screen Shot 2016-04-27 at 2.13.19 AM.png

これで認証に必要なAccess token, secret keyなどが発行される。

Screen Shot 2016-04-27 at 2.14.49 AM.png

上の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.xmlfs.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ファイルシステムのディレクトリにもログが保存されていきます。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4