PR

Hadoopコースを攻略しよう(HDInsightによる大量ログ解析編)

2014年4月29日(火)
佐々木 邦暢(@ksasakims)

この記事では、『Tuning Maniax 2014 - 蒼き調律者たち』Hadoop編に参加される方に向けて、 次の事柄を説明いたします。

  • 競技の内容
  • 解析対象ファイルセットの入手方法
  • MapReduceプログラムの作成方法

競技内容の再確認

前回の記事にもありましたが、この競技は簡単に言えば以下のようなものです。

総計1TBのWebアクセスログ(を模して生成されたデータ)を解析し、次の3項目を抽出する時間を競う

  1. アクセス数の多いURI:上位10件
  2. 多く利用されているユーザーエージェント:上位10件
  3. URIごとの平均レスポンスタイム:下位10件(時間が長い方から10件)

解析対象となるファイルは次のような行の繰り返しです。

2014-04-01 02:52:48  192.168.47.74 user734 100.77.60.35 /javadocs /BucketizedHiveInputFormat.html 759 Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:22.0) Gecko/20130328 Firefox/22.0

フィールドは下記の7項目で、スペースではなくタブで区切られています。

  1. 日時
  2. クライアントのIPアドレス
  3. ユーザー名
  4. サーバーのIPアドレス
  5. リクエストURI
  6. リクエスト所要時間
  7. ユーザーエージェント

解析対象ファイルセット

こちらのBLOBストレージで公開しております。リージョンは「東南アジア」です。
> http://tuningmaniax.blob.core.windows.net/hdinsight/logs/full-1GBx1280

1GB程度(500万行)のファイルが1280個、総計1.2 TBほどあります。「ビッグデータ」というほどではない量ですが、あまり多いとAzure無償評価枠の中で解析できなくなってしまうので!

また、何度もジョブを実行して試行錯誤する際に、毎回1.2 TBを解析するのは大変ですから、「練習用」のファイルセットをいくつか用意しました。

■「本番」と同じ1 GBのファイルを、64個に減らしたもの。
> http://tuningmaniax.blob.core.windows.net/hdinsight/logs/medium-1GBx64

■さらに軽い練習用に、1ファイルのサイズを100 MBにしたもの。
こちらは16個、32個、64個の3セットあります。

> http://tuningmaniax.blob.core.windows.net/hdinsight/logs/small-100MBx16
> http://tuningmaniax.blob.core.windows.net/hdinsight/logs/small-100MBx32
> http://tuningmaniax.blob.core.windows.net/hdinsight/logs/small-100MBx64

自分のBLOBストレージへコピー

前述の解析対象ファイルセットは、公開されたものをそのまま利用することも原理的には可能ですが、多数のHadoopクラスタから同時にアクセスされると、性能面で悪影響が出る可能性もあります。そのため、前回の記事にあったように「東南アジア」リージョンにストレージアカウントを作成し、そちらへコピーしてのご利用をお勧めします。

コピーの方法ですが、前回記事の手順でWindows Azure PowerShellをインストールしてあれば、同時にazcopyというツールが導入されています。これは「Azure用のrobocopy」とでも言うべきもので、ストレージアカウント間のコピーを効率的に行うことができます(一旦ダウンロードすることなく、Azure-to-Azureでコピーできます)。

なお、インストールしただけではパスが通っていませんので、下記のフルパス名を使うか、環境変数PATHにフォルダ名を追加してください。

"C:\Program Files (x86)\Microsoft SDKs\Windows Azure\AzCopy\AzCopy.exe"

azcopyのコマンドラインは、BLOBのURLやストレージアクセスキーを指定するため長くなりがちですから、下記のようなバッチファイルにして実行するのも便利です。

@echo off
setlocal
set azcopy="C:\Program Files (x86)\Microsoft SDKs\Windows Azure\AzCopy\AzCopy.exe"
set src="http://tuningmaniax.blob.core.windows.net/hdinsight/logs/small-100MBx16"
set dest="http://sasakinsight.blob.core.windows.net/maniax/logs/small-100MBx16"
set destkey="Azure管理ポータルからコピーしたアクセスキー"

%azcopy% %src% %dest% /S /DestKey:%destkey%

※これは私の環境で100MBx16フォルダをコピーした際の例です。実行の際は、src, dest, destkeyあたりを適切に書き換えてください。

HDInsight Emulatorのファイルシステムへコピー

前回の記事で、Windows AzurePowerShellと共に”HDInsight Emulator”をインストールしました。これを使ってローカルで練習できるように、解析対象ファイルをHDInsight Emulatorのファイルシステムにもコピーしておくと便利です。
HDInsight Emulatorをインストールしてあると、デスクトップに”Hadoop Command Line”というショートカットがあるはずです。これを起動するとコマンドプロンプトが出てきますから、その中で次のようなコマンドを実行します。

hadoop distcp wasb://hdinsight@tuningmaniax.blob.core.windows.net/logs/small-100MBx16 /examples/logs

※一番小さな、100MBのファイルが16個配置されたフォルダを、/examples/logsへコピーする例です。

著者
佐々木 邦暢(@ksasakims)
日本マイクロソフト株式会社

日本マイクロソフト所属。かつては仮想化コンサルタントとして多くのHyper-V案件を担当。その後、オンプレの重力から人類を開放すべくAzure専門のセールス部隊に転身。HPCやHadoop等、大量のリソースを必要とするワークロードで一儲けしようと画策中。

連載バックナンバー

Think IT会員サービス無料登録受付中

Think ITでは、より付加価値の高いコンテンツを会員サービスとして提供しています。会員登録を済ませてThink ITのWebサイトにログインすることでさまざまな限定特典を入手できるようになります。

Think IT会員サービスの概要とメリットをチェック

他にもこの記事が読まれています