Hiveを動作させる場合の環境の切り替え方法

Hiveでテストする場合の話ですが、データ量が少ないならVirtualBox上のLinuxにCDHを擬似分散で入れてHiveを動かしてテストすればいいと思います。

ただある程度のデータ量がないとテストにならないという場合もあるでしょう。

本番環境で試行錯誤したいという状況もあると思います。

そういった場合でもすでに動いている本番環境に影響を与えないようにしなければなりません。

ここで言っている影響とは、例えば別の人がHiveで本番環境をばりばり使っている最中にうっかりデータを消してしまってLeaseExceptionとか発生させてしまうようなことです。

なので使っているハードウェア、OS、ミドルウェアは同じでも他に影響を与えないようなサンドボックスを作ってそこでテストする必要があります。

そこで僕のところでは今どうやっているかというと、例えばpage_viewというHiveのテーブルは本番用として扱い、テストの場合はpage_view_utテーブルを使うようにするというようなことをしています。

この切り替えは設定ファイル、シンボリックリンクを活用します。

HiveQLを実行する各シェルスクリプトはすべて共通の設定ファイルcommon.shを読み込みます。

テスト用の設定ファイルcommon.sh.utは

...
export DEV=_ut
...

という感じにします。

本番用の設定ファイルcommon.sh.productionは

...
export DEV=
...

という感じです。

テストの場合はあらかじめ

ln -s common.sh.ut common.sh

としてからシェルスクリプトを実行します。本番の場合はcommon.sh.productionを使います。

HiveQLは

select * from page_view%DEV%;

という感じにして%DEV%の部分をcommon.shのDEVの値で置換して実行します。

これによってテストのときはpage_view_ut、本番はpage_viewにアクセスするといったことが可能になります。