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 Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

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