Gunakan Apache Sqoop pada kluster E-MapReduce (EMR) untuk mengimpor data dari database MySQL ke OSS-HDFS. Sqoop mengakses OSS-HDFS melalui konektor Hadoop-OSS yang telah terintegrasi dalam EMR, sehingga format titik akhir OSS-HDFS berbeda dari OSS standar—gunakan oss://bucket.region.oss-dls.aliyuncs.com/path, bukan oss://bucket/path.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
Kluster EMR yang menjalankan EMR V3.42.0 atau versi lebih baru, atau EMR V5.8.0 atau versi lebih baru. Untuk petunjuknya, lihat Create a cluster.
OSS-HDFS diaktifkan untuk suatu bucket, dengan izin yang diberikan untuk mengaksesnya. Untuk petunjuknya, lihat Enable OSS-HDFS and grant access permissions.
Hubungkan ke kluster EMR
Masuk ke Konsol EMR. Di panel navigasi sebelah kiri, klik EMR on ECS.
Klik kluster EMR tersebut.
Klik tab Nodes, lalu klik ikon plus (
) di sisi kiri kelompok node.Klik ID instans ECS. Di halaman Instances, klik Connect di samping ID instans.
Untuk petunjuk masuk menggunakan pasangan kunci SSH atau password SSH dari Windows atau Linux, lihat Log on to a cluster.
Impor data dari MySQL ke OSS-HDFS
Jalankan perintah berikut untuk mengimpor data dari tabel MySQL ke direktori OSS-HDFS:
sudo sqoop import \
--connect <dburi>/<dbname> \
--username <username> \
--password <password> \
--table <tablename> \
--target-dir <oss-dir> \
-m <count>Parameter
| Parameter | Wajib | Deskripsi |
|---|---|---|
dburi | Ya | URI JDBC untuk database. Contoh: jdbc:mysql://192.168.xxx.xxx:3306/ |
dbname | Ya | Nama database. |
username | Ya | Username untuk login ke database. |
password | Ya | Password untuk pengguna tersebut. |
tablename | Ya | Nama tabel MySQL yang akan diimpor. |
oss-dir | Ya | Direktori target OSS-HDFS. Gunakan format titik akhir OSS-HDFS: oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/dir/ |
count | Tidak | Jumlah tugas MapReduce. |
format | Tidak | Format file output. Nilai yang valid: avrodatafile, sequencefile, textfile (default), parquetfile. Tentukan menggunakan --as-<format>, misalnya --as-parquetfile. |
Format titik akhir OSS-HDFS (oss://bucket.region.oss-dls.aliyuncs.com/path) berbeda dari OSS standar. Pastikan Anda menggunakan titik akhir khusus OSS-HDFS.Contoh
Perintah berikut mengimpor tabel src_kv dari database sqoop_test ke OSS-HDFS dalam format Parquet:
sudo 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-parquetfileImpor data secara inkremental
Untuk impor inkremental, tambahkan --incremental, --check-column, dan --last-value ke perintah Anda. Dua mode didukung: append dan lastmodified.
Mode append
Gunakan mode append ketika tabel Anda hanya menerima baris baru (insert, tanpa update). Sqoop mengimpor baris-baris yang nilai kolom pemeriksanya lebih besar dari --last-value.
Saat menggunakan mode append, parameter --temporary-rootdir wajib digunakan. Sqoop pertama-tama menulis data ke direktori sementara, lalu memindahkan file-file tersebut ke direktori target. Jika direktori target sudah ada, Sqoop tidak akan mengimpor atau menimpa data di dalamnya.
sudo sqoop import \
--connect <dburi>/<dbname> \
--username <username> \
--password <password> \
--table <tablename> \
--target-dir <oss-dir> \
--temporary-rootdir <oss-tmpdir> \
--incremental append \
--check-column <col> \
--last-value <value> \
-m <count>Parameter inkremental
| Parameter | Wajib | Deskripsi |
|---|---|---|
oss-tmpdir | Ya (untuk mode inkremental) | Direktori sementara OSS-HDFS. Contoh: oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/tmp/sqoop_tmp/ |
col | Ya | Kolom yang digunakan untuk mengidentifikasi baris baru. |
value | Ya | Nilai maksimum kolom pemeriksa dari impor sebelumnya. Sqoop hanya mengimpor baris dengan nilai yang lebih tinggi. |
Contoh
sudo sqoop import \
--connect jdbc:mysql://master-1-1/sqoop_test \
--username root \
--password password1 \
--table src_kv \
--target-dir oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/tmp/sqoop_kv \
--temporary-rootdir oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/tmp/sqoop_tmp \
--incremental append \
--check-column id \
--last-value 100 \
-m 1Mode lastmodified
Gunakan mode lastmodified ketika tabel Anda menerima insert maupun update. Sqoop mengimpor baris-baris yang kolom pemeriksanya (berupa timestamp) lebih baru dari --last-value. Mode ini memerlukan parameter --merge-key untuk menggabungkan baris yang diperbarui dengan data yang sudah ada.
Saat menggunakan mode lastmodified, parameter --temporary-rootdir wajib digunakan.
sudo sqoop import \
--connect <dburi>/<dbname> \
--username <username> \
--password <password> \
--table <tablename> \
--target-dir <oss-dir> \
--temporary-rootdir <oss-tmpdir> \
--incremental lastmodified \
--check-column <col> \
--merge-key <key-col> \
--last-value <value> \
-m <count>Contoh
sudo sqoop import \
--connect jdbc:mysql://master-1-1/sqoop_test \
--username root \
--password password1 \
--table src_kv \
--target-dir oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/tmp/sqoop_kv \
--temporary-rootdir oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/tmp/sqoop_tmp \
--incremental lastmodified \
--check-column updated_at \
--merge-key id \
--last-value "2024-01-01 00:00:00" \
-m 1