Amazon Web Services ブログ

既存の Amazon EMR クラスターから Hue データベースを移行する方法

Hadoop User Experience (Hue) は、Amazon EMR および Apache Hadoop で使用する、オープンソースでウェブベースのグラフィカルユーザーインターフェイスです。Hue データベースには、ユーザー、グループ、許認可、Apache Hive クエリ、Apache Oozie ワークフローなどが格納されています。

Hue データベースを新しい EMR クラスターに移行したいとしましょう。例えば、Amazon EMR AMI (Amazon Machine Image) の古いバージョンからアップグレードしたいとします。Hue アプリケーションとそのデータベースには、数多くのカスタマイズがあります。これらのユーザーエンティティの再作成は必要なく、さらに既存の Hue データベースまたは Amazon RDS のリモートデータベースを新しいクラスターに移行することで、Hue のクエリとワークフロー履歴を保持する必要もありません。

デフォルトでは、Hue のユーザー情報とクエリ履歴は、EMR クラスターのマスターノード上のローカル MySQL データベースに格納されます。ですが、Amazon S3 に格納されている構成とリモートの MySQL データベースを Amazon RDS で使用して、1 つ以上の Hue 対応クラスターを作成できます。これにより、Amazon EMR クラスターを稼動させずに、Hue で作成するユーザー情報とクエリ履歴を保持することが可能となります。

この記事では、既存の EMR クラスターから Hue データベースへ移行するための手順を、ステップバイステップで説明します。

注 : Amazon EMR は、異なる AMI releases では異なる Hue バージョンをサポートしています。この移行アクティビティでは、古いクラスターと新しいクラスター間での Hue のバージョンの互換性に注意してください。現在、Hue 3.xx バージョンは Hue 4.xx バージョンと互換性がないため、これら 2 つの Hue バージョン間の移行では問題が発生する可能性があります。加えて、Hue 3.10.0 はそれ以前の 3.xx バージョンと下位互換性がありません。

始める前に

まず次のように、既存の EMR クラスターの Hue に新しい testUser を作成します。

後でこれらの承認情報を使って、新しい EMR クラスターの Hue にログインし、Hue データベースを正常に移行したかどうかを検証します。

それでは、始めましょう。

移行の方法

次の手順に従って、データベースを新しい EMR クラスターに移行してから、移行プロセスを検証します。

1.) 既存の Hue データベースのバックアップを作成する。

次の図に示すように (Linux/Unix/macOS を使用している場合)、SSH を使用して古いクラスターのマスターノードに接続し、Hue データベースを JSON ファイルにダンプします。

$ ssh -i ~/key.pem hadoop@ec2-xx-xxx-xxx-228.us-west-2.compute.amazonaws.com
$ /usr/lib/hue/build/env/bin/hue dumpdata > ./hue-mysql.json

Model フィールドに useradmin.userprofile があるすべての JSON オブジェクトを削除して、hue-mysql.json 出力ファイルを編集してから、ファイルを保存します。例えば、次のようにオブジェクトを削除します。

{
  "pk": 1,
  "model": "useradmin.userprofile",
  "fields": {
    "last_activity": "2018-01-10T11:41:04",
    "creation_method": "HUE",
    "first_login": false,
    "user": 1,
    "home_directory": "/user/hue_admin"
  }
},

2.) hue-mysql.json ファイルを Amazon S3 のような永続的ストレージに保存します。

AWS CLI または Secure Copy (SCP) クライアントを使用して、古い EMR クラスターから Amazon S3 にファイルをコピーします。例えば、次の例では AWS CLI を使用しています。

$ aws s3 cp ./hue-mysql.json s3://YourBucketName/folder/

3.) バックアップした Hue データベースを、新しい EMR クラスターにリカバリおよびリロードします。

a.) SSH を使用して新しい EMR クラスターのマスターノードに接続し、すでに実行中の Hue サービスを停止します。

$ ssh -i ~/key.pem hadoop@ec2-xx-xxx-xxx-229.us-west-2.compute.amazonaws.com
$ sudo stop hue
hue stop/waiting

b.) 次に示すように、クラスタの Hue データベース (ローカル MySQL データベースまたは Amazon RDS のリモートデータベース) に、mysql クライアントを使って接続します。

$ mysql -h HOST –u USER –pPASSWORD

ローカル MySQL データベースの場合、マスターノードの /etc/hue/conf/hue.ini ファイルで、データベースに接続するためのホスト名、ユーザー名、およびパスワードを見つけることができます。

[[database]]
    engine = mysql
    name = huedb
    case_insensitive_collation = utf8_unicode_ci
    test_charset = utf8
    test_collation = utf8_bin
    host = ip-172-31-37-133.us-west-2.compute.internal
    user = hue
    test_name = test_huedb
    password = QdWbL3Ai6GcBqk26
    port = 3306

上記の構成例に基づき、サンプルコマンドは次のとおりです。(EMR クラスター設定に基づいて、ホスト、ユーザー、およびパスワードの詳細を置き換えます。)

$ mysql -h ip-172-31-37-133.us-west-2.compute.internal -u hue -pQdWbL3Ai6GcBqk26

c.) huedb という名前のついた既存の Hue データベースを MySQL サーバーから削除します。

mysql> DROP DATABASE IF EXISTS huedb;

d.) 同じ名前の新しい空のデータベースを作成します huedb

mysql> CREATE DATABASE huedb DEFAULT CHARACTER SET utf8 DEFAULT COLLATE=utf8_bin;

e.) Hue をそのデータベースの huedb と同期させます。

$ sudo /usr/lib/hue/build/env/bin/hue syncdb --noinput
$ sudo /usr/lib/hue/build/env/bin/hue migrate

(これで、新しい huedb に、必要なすべての Hue テーブルを追加します)。

f.) もう一度 MySQL にログインし、外部キーをクリーンなテーブルにドロップします。

mysql> SHOW CREATE TABLE huedb.auth_permission;

次の例では、前の出力からの実際の値 <id value> に置き換えています。

mysql> ALTER TABLE huedb.auth_permission DROP FOREIGN KEY
content_type_id_refs_id_<id value>;

g.) django_content_type のコンテンツを削除する

mysql> DELETE FROM huedb.django_content_type;

h.) バックアップした Hue データベースダンプを、Amazon S3 から新しい EMR クラスターにダウンロードし、それを Hue にロードします。

$ aws s3 cp s3://YourBucketName/folder/hue-mysql.json ./
$ sudo /usr/lib/hue/build/env/bin/hue loaddata ./hue-mysql.json

i.) MySQL では、外部キー content_type_id を追加し、auth_permission に戻ります。

mysql> use huedb;
mysql> ALTER TABLE huedb.auth_permission ADD FOREIGN KEY (`content_type_id`) REFERENCES `django_content_type` (`id`);

j.) Hue サービスをもう一度開始します。

$ sudo start hue
hue start/running, process XXXX

それでおしまいです! 次に、Hue UI に正常にアクセスできるかどうかを確認し、既存の testUser 認証情報を使用してログインします。

新しい EMR クラスターの Hue にログインに成功すると、次に示すようなユーザーがサインインした時に testUser が現れるような Hue のホームページが表示されるはずです。

結論

既存の Hue データベースを新しい Amazon EMR クラスターに移行し、移行プロセスを検証する方法を学びました。今後の記事で取り上げて欲しい Amazon EMR 管理に関するトピックがあれば、ぜひ下記のコメント欄でお知らせください。


その他の参考資料

この記事がお役に立ったのであれば、Anomaly Detection Using PySpark, Hive, and Hue on Amazon EMRDynamically Create Friendly URLs for Your Amazon EMR Web Interfaces もぜひ参照してください。


著者について

Anvesh Ragi は、アマゾン ウェブ サービスのビッグデータサポートエンジニアです。 AWS のお客様と緊密に協力して、データ処理ワークフローのためのアーキテクチャおよびエンジニアリングをサポートしています。自由な時間には、旅行とハイキングに行くのが楽しみです。