- 印刷する
- PDF
Sqoop+Oozie Workflowを活用した MySQL 8.0マイグレーション
- 印刷する
- PDF
VPC環境で利用できます。
Sqoop(SQL to Hadoop)は、Hadoopと関係データベースの間でデータを配信できるように設計されたオープンソースソフトウェアです。
簡単な CLIで Oracle、MySQLなど RDBMSの特定のテーブルまたは特定の条件に合ったデータを手軽に HDFSに移動でき、Hive、Pig、HBaseなどにすぐに移して確認できます。逆に、HDFSに保存されているデータを RDBMSへ移すこともできます。
Oozieは Hadoopの様々な Jobを簡単に管理するために作成された Workflowのスケジューリングシステムです。Jobの開始、処理、分岐、終了などの様々な Actionで構成され、Cloud Hadoop(VPC)で提供する Hue(Hadoop User Experience)内で Oozie Workflowを簡単に使用できます。
本ガイドでは Hueの Oozie Workflow内に Sqoopを使用して Cloud DB for MySQL(VPC)データを読み取り、Hive Tableを作成します。その後 Hive Queryで当該デーブルと同じコピー Hive Tableを作成します。最後に Sqoopを用いてコピーの Hive Tableを再び Cloud DB for MySQL(VPC)に配信する方法について説明します。
Hueの Oozie Workflowと Ambariで発生する Alertsについてメールまたはメッセージを活用したユーザー定義の通知を設定できます。詳細は、ユーザー定義の通知設定ガイドをご参照ください。
事前タスク
Oozieで Sqoopを使用するには、以下のような事前タスクが必要です。
項目 | 説明 | ガイド |
---|---|---|
MySQL 8バージョン connecto設定 | MySQLに接続するために connectorをインストールして Oozieに設定 | |
MySQLテーブルの準備 | ソースデータを持っている Source Tableと Hive Queryの実行結果を受け取る Target Tableを準備 | |
ACG設定 | Cloud Hadoop(VPC)と Cloud DB for MySQL(VPC)の ACGを設定 | ファイアウォール設定(ACG) |
1. MySQL 8バージョン connectorの設定
Sqoopで MySQLにアクセスするにはバージョンに合った connector設定が必要です。以下の手順に従って、MySQL connectorのインストールと設定を行います。
a. エッジノードで MySQL 8バージョン connector設定
- Cloud Hadoop(VPC)エッジノードに sshでアクセスします。エッジノードにでアクセスする方法は、SSHでクラスタノードにアクセスガイドをご参照ください。
- 以下のコマンドを実行して MySQL 8バージョン connector をダウンロードします。
wget http://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.26.tar.gz
- 以下のコマンドを実行してダウンロードした MySQL 8バージョン connectorの圧縮を解凍します。
tar -xvzf mysql-connector-java-8.0.26.tar.gz
- 以下のコマンドを実行して既に設定されている MySQL connectorを新規ダウンロードした MySQL 8バージョンに connectorで上書きします。
sudo cp /home1/sshuser/mysql-connector-java-8.0.26/mysql-connector-java-8.0.26.jar /usr/share/java/mysql-connector-java-8.0.26.jar sudo ln -Tfs /usr/share/java/mysql-connector-java-8.0.26.jar /usr/hdp/current/sqoop-client/lib/mysql-connector-java.jar
/user/oozie/share/lib/lib_{timestamp}/sqoop
パスに mysql-connector-java-8.0.26.jar ファイルをコピーします。例えば、/user/oozie/share/lib/lib_{timestamp}/sqoop
パスに複数のlib_{timestamp}
ファイルがある場合、最新ディレクトリにコピーします。sudo -u oozie hadoop fs -put /home1/sshuser/mysql-connector-java-8.0.26/mysql-connector-java-8.0.26.jar /user/oozie/share/lib/lib_{timestamp}/sqoop/mysql-connector-java-8.0.26.jar
b. Hueで MySQL 8バージョン connector設定
/user/oozie/share/lib/lib_{timestamp}/sqoop
パスに mysql-connector-java-8.0.26.jar ファイルがコピーされたか確認します。
- Oozieの libraryをアップデートするためにエッジノードにアクセスして、以下のコマンドを実行します。
sudo -u oozie oozie admin -oozie http://{その1のマスターノードのホスト名}:11000/oozie -sharelibupdate sudo -u oozie oozie admin -oozie http://{その2のマスターノードのホスト名}:11000/oozie -sharelibupdate
Ambari UIの Hosts ページでホスト名を確認できます。Ambari UIに関する詳細は、Ambari UIガイドをご参照ください。
- Ambariにアクセスしてから左メニューの [Oozie] > [ACTIONS] > [Restart All] ボタンをクリックして Oozieを再起動します。Ambariにアクセスする方法は、Ambari UIガイドをご参照ください。
2. MySQLテーブルの準備
Hueで Oozieを使用した Workflowを作成するためにソースデータを持っている Source Tableと Hive Queryの実行結果を受け取る Target Tableを準備します。本ガイドでは、以下の SQLを通じて作成した SQOOP TEST1、SQOOP TEST2テーブルを使用します。
CREATE TABLE SQOOP_TEST1
(
gp_sum INT PRIMARY KEY,
player VARCHAR(30)
);
INSERT INTO SQOOP_TEST1(gp_sum, player)
VALUES(1,'test_player');
CREATE TABLE SQOOP_TEST2
(
gp_sum INT PRIMARY KEY,
player VARCHAR(30)
);
3. ACG設定
NAVERクラウドプラットフォームコンソールで MySQL Serverの ACG(Access Control Group)を設定する方法は、次の通りです。
ここでは、ACGの設定方法を簡単に説明します。ACGの設定方法に関する詳細は、ACGご利用ガイドをご参照ください。
- アクセスする Cloud DB for MySQL(VPC)の ACGを選択した後、次の4つの情報を入力して2つの ACG Ruleを追加します。
プロトコル: TCP
アクセスソース: アクセスする Cloud Hadoop(VPC)の ACG名
許可ポート: 3306
メモ(選択)
プロトコル: TCP
アクセスソース: アクセスするユーザー PCの IPアドレス( [myip] ボタンをクリック)
許可ポート: 3306
メモ(選択)
- アクセスする Cloud Hadoop(VPC)の ACGを選択した後、次の4つの情報を入力して ACG Ruleを追加します。
- プロトコル: TCP
- アクセスソース: アクセスするユーザー PCの IPアドレス( [myip] ボタンをクリック)
- 許可ポート: 1-65535
- メモ(選択)
事前タスクの完了後、以下の手順に従ってください。
1. Sqoopにデータをインポートする
- Hue左メニューから [スケジューラ] > [Workflow] をクリックします。
- [文書] > [タスク] をクリックします。
- [Sqoop 1] ボタンをここにタスクを置く にドラッグします。
- 以下の Sqoop commandを入力して [追加] ボタンをクリックします。
sqoop import --connect jdbc:mysql://{Cloud DB for MySQL(VPC)Privateドメイン}/{DB名} --username {DBアカウント} --password "{DBアカウントパスワード}" --table SQOOP_TEST1 --hive-import --hive-database default --hive-table sqoop_test1 -m 1 --external-table-dir "{Object Storageバケット URI}/sqoop_test1"
- 右上の [保存] ボタンをクリックして作成した Workflowを保存します。
2. Hive Queryで新しいテーブルを作成
Hue左メニューから [エディタ] > [Hive] をクリックします。
以下の例の Hive Queryを入力します。
USE default; CREATE EXTERNAL TABLE sqoop_test2 STORED AS TEXTFILE LOCATION 「{Object Storageバケット URI}/sqoop_test2」 AS SELECT * FROM sqoop_test1;
右上の [保存] ボタンをクリックした後、名前を設定して作成した Hive Queryを保存します。
Hueの左メニューから [スケジューラ] > [Workflow] をクリックして [文書] ボタンをクリックした後、上記で作成した Workflowを選択します。
右上の [修正] ボタンをクリックした後、[タスク] > [文書] ボタンをクリックします。
[Hive Query] ボタンを Sqoop 1下のエリアにドラッグしてから文書検索.... をクリックして上記で作成した Hive Queryを選択した後、[追加] ボタンをクリックします。
3. Sqoopddで Hiveデータを MySQLに配信
[文書] > [タスク] をクリックします。
[Sqoop 1] ボタンを Hiveの下のエリアにドラッグします。
以下の例の Sqoop commandを入力します。
sqoop export --connect jdbc:mysql://{Cloud DB for MySQL(VPC)Privateドメイン}/{DB名} --username {DBアカウント} --password "{DBアカウントパスワード}" --table SQOOP_TEST2 --export-dir "{Object Storageバケット URI}/sqoop_test2" -m 1 --input-fields-terminated-by "\001"
右上の [保存] ボタンをクリックして作成した Workflowを保存した後、[開始する] ボタンをクリックして作成した Workflowを実行します。
4. Hiveと MySQLテーブルを確認
- Hiveを通じて、テーブルが正常に保存されているか確認します。
- Hiveの使用方法は、Hive を使用するガイドをご参照ください。
SELECT * FROM SQOOP_TEST1;
SELECT * FROM SQOOP_TEST2;
- MySQLを通じて、テーブルが正常に保存されているか確認します。
SELECT * FROM SQOOP_TEST1;
SELECT * FROM SQOOP_TEST2;