つかびーの技術日記

情報系修士卒のWeb系技術日記です。現在のフォーカス分野はアドテクです。

AWS EMRでImpalaを試す!起動〜クエリ実行まで

      2014/06/02

今回はAmazon Elastic MapReduce(EMR)でImpalaを試してみます。

EMRというのはAmazonのサービスの1つでHadoop環境を提供しまっせ、的なサービスです。

ImpalaはClouderaが開発しているHadoop環境用のSQLクエリエンジン的な物です。

全体の流れ

  1. AWSコンソールからEMRのクラスタ構築・起動
  2. ログイン、テストデータのロード
  3. Impalaでクエリ発行

EMRはデフォルトでImpalaをサポートしていますので、Impalaのインストールなどは不要です。

個人的にHadoop構築はかなり面倒な部類の作業なので、そこが自動化されつつさらにImpalaインストールも不要というのは大きいですね。どうせならPrestoとかもデフォで提供してよ!って感じですが。

EMRの起動

まずは環境構築から。

コンソール画面からElastic MapReduceを選択します。

AWS Management Console

 

以下のように適当に入力していきます。

Log出力先のS3バケットは予め作っておきました。

AWS Elastic MapReduce Management Console

AMIはHadoop 2.x以上のものを選択します。ここでは最新バージョンを選択しました。

すると下のAdditional applicationsでimpalaが選択できるので選択しておきます。impalaを選択した後でちゃんとConfigure and addを押してimpalaをaddしておきます。初めこれを忘れて「Impalaインストールされてねーじゃん!」となりました。。。

AWS Elastic MapReduce Management Console2-2

クラスタの各インスタンス数などはデフォルトで。

AWS Elastic MapReduce Management Console3

m1.mediumが合計3つです。2014/6/1(日)現在の東京リージョンの料金はEC2代金0.122ドル+EMR代金0.022ドルなので1時間0.144ドルです。これが3台分なので、1時間約43円というところです。試してみる程度ならそれほど痛くない料金かと思います。

ちなみにHadoop 2.x系を選択するとm1.smallは選択できなくなります。

EC2 key pairは予め他のEC2のときに作成していたものをそのまま流用しました。

こんな感じで設定してクラスタを作成すると管理画面に移動します。

AWS Elastic MapReduce Management Console4

状態がStartingなのでクラスタ作成中です。大体3分ほどでRunningになり、起動完了です。

AWS Elastic MapReduce Management Console5

マスタノードログイン

次はマスターノードにログインします。

~/.ssh/configに以下の設定を追加してSSH接続できるようにします。

Host名のところはお好きにどうぞ。Userはhadoopです。HostnameはEMR管理画面上に出たMaster public DNSの値を入れます。IdentityFileの値はEC2管理画面などで作成しDLしておいたpemファイルのパスを指定します。

初めUserをec2-userにしたままログインしてしまったため、「あれ!?hadoopコマンドないんですけど!!」となって混乱しました。

上記の設定をするとssh aws_impalaコマンドで入れます。

やりました!

これで入れない人はpemのパーミッション設定やクラスタ作成時のkey指定部分を確認しましょう。

初回はsudo yum updateしておきましょう。

テストデータ作成

テストデータはAmazonが用意してくれているのでそれを使います。

このページを参考にしてログインしたマスターノード上でjavaプログラムを実行するとテストデータが作成されます。

こんな感じで完了します。

ここまででHDFS上に合計3GBのテストデータを作成することができました。

次はImpala用のテーブルを作成します。

こちらも同様にAmazonのこのページを参考にしてテーブルを作成します。以下のような感じで完了します。

どのファイル(テーブル)も1GBあるのに数秒でロード完了していますね。早い。

クエリ実行

ココまで来たら後はSQLなので、多少の違いはあれどいつも通り、という感じですね。

例によってAmazonの公式を参考にしながらクエリ実行します。(impala-shell上から実行します。)

クエリ1つめ。

クエリ2つめ。

クエリ3つめ。

クエリ4つめ。

m1.mediumインスタンスでこれはかなり早いです!Impalaすごい・・・。

[visualizer id=”592″]

ClouderaのCDH5やCDH4+Impala(別途インストール)でも結局impala-shellから上記コマンドを実行するので、差はありません。個人的にはCDHを使ってもHadoop個別でセットアップしても設定部分が面倒なので、EMR凄くいい感じでした。

みなさんもImpalaやりたいときはEMRを使ってみてはいかがでしょうか。

ImpalaとMySQLを簡単に比較してみました。

※最後に忘れずにEMRクラスタをTerminateしましょう。

 - Impala , ,