このトピックでは、E-MapReduce (EMR) クラスター上で Apache Sqoop を使用し、OSS-HDFS に保存されたデータへの読み書きアクセスを実装する方法について説明します。
前提条件
-
EMR V3.42.0 以降または EMR V5.8.0 以降を実行する EMR クラスターを作成済みで、Sqoop コンポーネントを選択している必要があります。詳細については、「クラスターの作成」をご参照ください。
-
OSS-HDFS を有効化し、必要なアクセス権限を付与済みである必要があります。詳細については、「OSS-HDFS の有効化」をご参照ください。
操作手順
-
EMR クラスターに接続します。
-
EMR コンソールにログインします。左側のナビゲーションウィンドウで EMR on ECS をクリックします。
-
作成済みの EMR クラスターをクリックします。
-
Nodes タブをクリックし、ノードグループの左側にある
アイコンをクリックします。 -
ECS ID をクリックします。インスタンスページで、インスタンス ID の横にある 接続 をクリックします。
SSH キーペアまたはパスワードを使用して Windows または Linux 環境からクラスターにログインする方法については、「クラスターへのログイン」をご参照ください。
-
-
OSS-HDFS から MySQL へデータをインポートします。
sudo sqoop import --connect <dburi>/<dbname> --username <username> --password <password> --table <tablename> --target-dir <oss-dir> --temporary-rootdir <oss-tmpdir> --check-column <col> --incremental <mode> --last-value <value> --as-<format> -m <count>-
以下の表は、コマンド内のパラメーターを示しています。
パラメーター
必須
説明
dburi
Yes
データベース接続 URI。例:
jdbc:mysql://192.168.xxx.xxx:3306/。dbname
Yes
データベース名。
username
Yes
データベースへのログインユーザー名。
password
Yes
データベースユーザーのパスワード。
tablename
Yes
MySQL テーブル名。
oss-dir
Yes
インポートデータの OSS-HDFS 内の送信先ディレクトリ。例:
oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/dir/。oss-tmpdir
No
インポートジョブの一時ディレクトリ。このパラメーターは「append」増分インポートモードで必須です。
mode パラメーターを append に設定すると、Apache Sqoop はデータを一時ディレクトリにインポートした後、ファイル名を変更して送信先ディレクトリに格納します。OSS-HDFS 内に送信先ディレクトリが既に存在する場合、Apache Sqoop はそのディレクトリへのデータインポートや上書きを行いません。
col
No
増分インポート時のチェック対象カラム。
mode
No
増分インポートモード。有効な値:
appendおよびlastmodified。-
append:自動インクリメントカラムに基づいてデータを増分的にインポートします。 -
lastmodified:タイムスタンプカラムに基づいてデータを増分的にインポートします。
value
No
前回の増分インポート時のチェックカラムの最大値。
format
No
出力ファイル形式。有効な値:
avrodatafile、sequencefile、textfile(デフォルト)、およびparquetfile。count
No
MapReduce タスク数。
-
-
例
次のサンプルコードは、examplebucket の指定ディレクトリ内のデータを MySQL の src_kv テーブルにインポートする例を示しています。
sqoop import --connect jdbc:mysql://master-1-1/sqoop_test --username root --password password1 --table src_kv -m 1 --target-dir oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/tmp/sqoop_kv --as-parquetfile
-