Hadoopコースを攻略しよう(HDInsightによる大量ログ解析編)
この記事では、『Tuning Maniax 2014 - 蒼き調律者たち』Hadoop編に参加される方に向けて、 次の事柄を説明いたします。
- 競技の内容
- 解析対象ファイルセットの入手方法
- MapReduceプログラムの作成方法
競技内容の再確認
前回の記事にもありましたが、この競技は簡単に言えば以下のようなものです。
総計1TBのWebアクセスログ(を模して生成されたデータ)を解析し、次の3項目を抽出する時間を競う
- アクセス数の多いURI:上位10件
- 多く利用されているユーザーエージェント:上位10件
- 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項目で、スペースではなくタブで区切られています。
- 日時
- クライアントのIPアドレス
- ユーザー名
- サーバーのIPアドレス
- リクエストURI
- リクエスト所要時間
- ユーザーエージェント
解析対象ファイルセット
こちらの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へコピーする例です。