Tutorial Apache Sqoop: ArchiKuliah, Perintah & Contoh
โก Ringkasan Cerdas
Apache Sqoop memindahkan data dalam jumlah besar antara basis data relasional dan HDFS menggunakan arsitektur konektor, menghasilkan pekerjaan MapReduce yang mengimpor tabel ke Hive atau HBase dan mengekspor hasil yang telah diproses kembali ke sistem sumber.
Apa itu SQOOP di Hadoop?
Apache Sqoop (SQL-to-Hadoop) adalah alat yang dirancang untuk mendukung ekspor dan impor data secara massal ke dalam HDFS dari penyimpanan data terstruktur seperti basis data relasional, gudang data perusahaan, dan sistem NoSQL. Ini adalah alat migrasi data yang berbasis pada arsitektur konektor yang mendukung plugin untuk menyediakan konektivitas ke sistem eksternal baru.
Contoh kasus penggunaan Hadoop Sqoop adalah perusahaan yang menjalankan impor Sqoop setiap malam untuk memuat data hari itu dari RDBMS transaksional produksi ke dalam Sarang lebah gudang data untuk analisis lebih lanjut.
Berikutnya dalam tutorial Apache Sqoop ini, kita akan mempelajari tentang arsitektur Apache Sqoop.
Skup Architekstur
Semua yang ada Sistem Manajemen Basis Data dirancang dengan SQL standar dalam pikiran. Namun, setiap DBMS berbeda dalam hal dialek sampai batas tertentu. Jadi, perbedaan ini menimbulkan tantangan dalam hal transfer data antar sistem. Konektor Sqoop adalah komponen yang membantu mengatasi tantangan ini.
Transfer data antara Sqoop Hadoop dan sistem penyimpanan eksternal dimungkinkan dengan bantuan konektor Sqoop.
Sqoop memiliki konektor untuk bekerja dengan berbagai database relasional populer, termasuk MySQL, PostgreSQL, Oracle, SQL Server, dan DB2. Masing-masing konektor mengetahui cara berinteraksi dengan DBMS terkait. Ada juga konektor JDBC generik untuk menyambung ke database apa pun yang mendukung Javaprotokol JDBC. Selain itu, Sqoop juga menyediakan pengoptimalan. MySQL ke PostgreSQL konektor yang menggunakan API khusus database untuk melakukan transfer massal secara efisien.
Diagram di bawah ini menempatkan klien Sqoop di antara penyimpanan data eksternal dan klaster Hadoop, dengan lapisan konektor di satu sisi dan HDFS, Hive, serta HBase di sisi lainnya.
Di bawah lapisan konektor, Sqoop menghasilkan sebuah Java kelas yang mencerminkan satu baris tabel dan kemudian mengirimkan hanya peta PetaKurangi Setiap tugas pemetaan membaca bagiannya sendiri dari rentang kolom yang dipisahkan, sehingga throughput meningkat seiring dengan jumlah mapper, bukan dengan kursor JDBC tunggal.
Selain itu, Sqoop memiliki berbagai konektor pihak ketiga untuk penyimpanan data, mulai dari tingkat perusahaan. gudang data (termasuk Netezza, Teradata, dan Oracle) ke penyimpanan NoSQL (seperti Couchbase). Namun, konektor ini tidak disertakan dengan paket Sqoop; itu perlu diunduh secara terpisah dan dapat ditambahkan dengan mudah ke instalasi Sqoop yang sudah ada.
Mengapa kita membutuhkan Sqoop?
Pemrosesan analitis menggunakan Hadoop memerlukan pemuatan sejumlah besar data dari berbagai sumber ke dalam kluster Hadoop. Proses pemuatan data massal ke Hadoop, dari berbagai sumber heterogen, lalu memprosesnya, disertai serangkaian tantangan tertentu. Mempertahankan dan memastikan konsistensi data serta memastikan pemanfaatan sumber daya yang efisien, adalah beberapa faktor yang perlu dipertimbangkan sebelum memilih pendekatan yang tepat untuk pemuatan data.
Masalah Utama:
- Pemuatan data menggunakan skrip โ Pendekatan tradisional menggunakan skrip untuk memuat data tidak cocok untuk pemuatan data massal ke Hadoop; pendekatan ini tidak efisien dan sangat memakan waktu.
- Akses langsung ke data eksternal melalui aplikasi Map-Reduce. โ Memberikan akses langsung ke data yang berada di sistem eksternal (tanpa memuatnya ke Hadoop) untuk aplikasi map-reduce akan mempersulit aplikasi tersebut. Oleh karena itu, pendekatan ini tidak layak.
Selain memiliki kemampuan untuk mengolah data dalam jumlah besar, Hadoop juga dapat mengolah data dalam berbagai bentuk. Oleh karena itu, untuk memuat data heterogen tersebut ke dalam Hadoop, berbagai alat telah dikembangkan. Skup ke Mengalir adalah dua alat pemuatan data tersebut.
Selanjutnya dalam tutorial Sqoop ini beserta contohnya, kita akan belajar tentang perbedaan antara Sqoop, Flume dan HDFS.
Sqoop vs Flume vs HDFS di Hadoop
| Skup | Mengalir | HDFS |
|---|---|---|
| Sqoop digunakan untuk mengimpor data dari sumber data terstruktur seperti RDBMS. | Flume digunakan untuk memindahkan data streaming massal ke HDFS. | HDFS adalah sistem berkas terdistribusi yang digunakan oleh ekosistem Hadoop untuk menyimpan data. |
| Sqoop memiliki arsitektur berbasis konektor. Konektor mengetahui cara menghubungkan ke sumber data terkait dan mengambil data. | Flume memiliki arsitektur berbasis agen. Di sini, kode ditulis (yang disebut sebagai 'agen') yang menangani pengambilan data. | HDFS memiliki arsitektur terdistribusi di mana data didistribusikan ke beberapa node data. |
| HDFS merupakan tujuan import data menggunakan Sqoop. | Data mengalir ke HDFS melalui nol atau lebih saluran. | HDFS adalah tujuan akhir untuk penyimpanan data. |
| Pemuatan data Sqoop tidak didorong oleh peristiwa. | Pemuatan data Flume dapat didorong oleh suatu peristiwa. | HDFS hanya menyimpan data yang diberikan dengan cara apa pun. |
| Untuk mengimpor data dari sumber data terstruktur, kita harus menggunakan perintah Sqoop saja, karena konektornya mengetahui cara berinteraksi dengan sumber data terstruktur dan mengambil data dari sumber tersebut. | Untuk memuat data streaming seperti tweet yang dihasilkan di Twitter atau file log server web, Flume harus digunakan. Agen Flume dibuat untuk mengambil data streaming. | HDFS memiliki perintah shell bawaan sendiri untuk menyimpan data ke dalamnya. HDFS tidak dapat mengimpor data streaming. |
Fitur Utama Sqoop
Perbandingan di atas menjelaskan di mana Sqoop berada. Kumpulan fitur di bawah ini menentukan apakah Sqoop cocok untuk pekerjaan penyerapan data tertentu.
- Penuh: Satu perintah saja dapat menyalin seluruh tabel, dan
import-all-tablesmenyalin setiap tabel dalam skema dalam satu kali proses. - Beban bertahap:
appendmode tracks adalah kolom yang meningkat secara monoton seperti kunci pengganti, sedangkanlastmodifiedmode tracks adalah kolom stempel waktu, jadi hanya baris baru atau yang diubah yang akan dikirim. - Transfer paralel: Kolom pemisah membagi rentang kunci di seluruh tugas pemetaan, dan jumlah pemetaan menentukan berapa banyak yang berjalan sekaligus.
- Impor kueri bentuk bebas: Hasil dari pernyataan SQL sembarang dapat diimpor sebagai pengganti seluruh tabel, yang menjaga penggabungan (join) dan filter tetap berada di sisi basis data.
- Pemuatan langsung ke gudang: Impor dapat membuat dan mengisi sebuah Sarang lebah tabel atau menulis langsung ke dalam tabel HBase daripada berhentiping pada file HDFS mentah.
- Kompresi dan format file: Output dapat ditulis sebagai teks yang dipisahkan dengan pembatas, SequenceFile, Avro atau Parquet, dengan kompresi tingkat codec opsional.
- Keamanan: Sqoop terintegrasi dengan Kerberos, dan kredensial dapat dibaca dari file kata sandi atau diminta sebagai pengganti pengetikan di baris perintah.
Perintah Impor dan Ekspor Sqoop
Kedua arah transfer dijalankan melalui satu utilitas baris perintah. Alat impor memindahkan baris dari basis data ke Hadoop, dan alat ekspor memindahkan file dari Hadoop kembali ke tabel basis data.
Impor tipikal akan menyebutkan koneksi JDBC, tabel sumber, direktori tujuan, kolom pemisah, dan jumlah mapper:
sqoop import \ --connect jdbc:mysql://localhost:3306/employees \ --username hadoop \ --password-file /user/hadoop/.mysql.password \ --table employees \ --target-dir /user/hadoop/warehouse/employees \ --split-by emp_no \ --num-mappers 4
Ekspor membalikkan alur. Ia membaca file yang sudah dipisahkan dengan pembatas yang ada di direktori HDFS dan memasukkannya ke dalam tabel yang sudah ada, sehingga tabel target harus dibuat terlebih dahulu:
sqoop export \ --connect jdbc:mysql://localhost:3306/employees \ --username hadoop \ --password-file /user/hadoop/.mysql.password \ --table employee_summary \ --export-dir /user/hadoop/warehouse/employee_summary \ --input-fields-terminated-by ','
Pekerjaan harian jarang memerlukan seluruh tabel dua kali. Impor inkremental mencatat nilai tertinggi yang telah dilihatnya dan mulai dari sana pada proses berikutnya:
sqoop import \ --connect jdbc:mysql://localhost:3306/sales \ --table orders \ --incremental append \ --check-column order_id \ --last-value 15000 \ --target-dir /user/hadoop/warehouse/orders
Berikut adalah argumen-argumen yang muncul di hampir setiap pekerjaan:
| Argumen | Apa yang dikendalikannya |
|---|---|
--connect |
JDBC URL dari basis data sumber atau target. |
--table |
Tabel yang dibaca saat impor atau ditulis saat ekspor. |
--target-dir |
Direktori HDFS yang menerima impor. Direktori tersebut tidak boleh sudah ada. |
--export-dir |
Direktori HDFS yang file-filenya dibaca oleh sebuah ekspor. |
--split-by |
Kolom yang rentangnya dibagi di seluruh tugas peta. |
--num-mappers (-m) |
Jumlah tugas pemetaan paralel. Nilai defaultnya adalah empat. |
--incremental |
Memilih append or lastmodified perubahan tracraja. |
--hive-import |
Membuat tabel Hive yang sesuai dan memuat data yang diimpor ke dalamnya. |
โ ๏ธ Hati-hati: Ekspor bukanlah transaksi tunggal. Setiap tugas pemetaan melakukan commit batch-nya sendiri, sehingga kegagalan di tengah proses dapat meninggalkan sebagian data di tabel target. Arahkan penulisan melalui tabel sementara (staging table) ketika pemuatan harus dilakukan secara keseluruhan atau tidak sama sekali (all-or-nothing).
Status Proyek Sqoop dan Alternatif Modern
Satu detail versi penting sebelum perintah-perintah di atas dimasukkan ke dalam penjadwal.
Para pengembang Sqoop memutuskan untuk menghentikan proyek tersebut pada Juni 2021, dan perpindahan ke Loteng Apache Selesai pada Juli 2021. Situs web, milis, repositori git, masalah tracSemua file ker dan unduhan tetap tersedia, tetapi hanya untuk dibaca, dan tidak ada rilis lebih lanjut yang direncanakan. Rilis produksi terakhir adalah Sqoop 1.4.7 dari tahun 2017; lini Sqoop 2 yang terpisah (1.99.x) tidak pernah mencapai kesamaan fitur dan tidak pernah dinyatakan siap untuk produksi.
Job Sqoop yang sudah ada masih berjalan, dan distribusi Hadoop komersial terus mengirimkan dan mendukung alat tersebut di dalam platform mereka sendiri. Namun, pekerjaan ingest data baru biasanya dibangun di atas salah satu dari pilihan berikut:
| Alternatif | Paling cocok |
|---|---|
| Spark dengan sumber data JDBC | Tabel batch extracyang sudah berada di dalam Spark pipeline, dengan pembacaan yang dipartisi sebagai pengganti mapper. |
| Apache NiFi | Perutean berbasis aliran dan dikonfigurasi secara visual antara banyak sistem heterogen. |
| Kafka Connect dengan konektor CDC | Pengambilan data perubahan secara terus-menerus sebagai pengganti jendela pemrosesan batch setiap malam. |
| Platform ETL terkelola seperti Talend | Konektor bawaan, penjadwalan, dan silsilah tanpa perlu menulis tugas secara manual. |

