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.

  • ๐Ÿ”˜ Definisi: Sqoop mentransfer data dalam jumlah besar antara penyimpanan terstruktur dan HDFS melalui lapisan konektor berbasis plugin.
  • โ˜‘๏ธ Architekstur: Setiap pekerjaan dikompilasi menjadi program MapReduce khusus peta (map-only) yang tugas-tugasnya mengambil bagian-bagian tabel secara terpisah secara paralel.
  • โœ… Konektor: Termasuk perlindungan pengemudi MySQL, PostgreSQL, Oracle, SQL Server dan DB2, ditambah fallback JDBC generik.
  • ๐Ÿงช Perintah: Alat impor menarik tabel ke HDFS, Hive, atau HBase; alat ekspor mengirimkan kembali file yang telah diproses ke dalam tabel.
  • ๏ธ Mode pemuatan: Full load menyalin seluruh tabel, sedangkan mode incremental append dan lastmodified hanya mengambil baris baru.
  • โš ๏ธ Status proyek: Sqoop pensiun ke Apache Attic pada Juli 2021, jadi Spark JDBC dan NiFi kini memiliki pipeline baru.

Tutorial Apache Sqoop yang membahas arsitektur, konektor, serta perintah impor dan ekspor.

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.

Diagram arsitektur Sqoop yang menunjukkan lapisan konektor yang menghubungkan RDBMS ke klaster Hadoop.

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:

  1. 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.
  2. 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-tables menyalin setiap tabel dalam skema dalam satu kali proses.
  • Beban bertahap: append mode tracks adalah kolom yang meningkat secara monoton seperti kunci pengganti, sedangkan lastmodified mode 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.

Pertanyaan Umum Demo Slot

Sqoop 1 adalah satu-satunya klien baris perintah yang digunakan di setiap tutorial. Sqoop 2 menambahkan server, REST API, dan UI web, tetapi tidak pernah mencapai kesamaan fitur dan tidak pernah dinyatakan siap untuk produksi, sehingga versi 1.4.x tetap menjadi standar.

Model-model tersebut memprofilkan tabel sumber untuk menyimpulkan tipe, kunci, dan kolom pemisah, menyarankan batas partisi dari distribusi baris, dan menandai pergeseran skema sebelum pemuatan gagal. Mereka juga mengusulkan kolom pemeriksaan inkremental dengan mendeteksi perilaku monoton atau stempel waktu dalam data sampel.

Copilot membuat kerangka argumen dengan cepat, tetapi mencampur sintaks Sqoop 1 dan Sqoop 2 serta menciptakan flag yang tidak diterima oleh rilis mana pun. Periksa setiap argumen terhadap Panduan Pengguna Sqoop untuk versi yang terpasang sebelum menjadwalkan pekerjaan.

Sqoop tidak dapat memilih kolom pemisah secara otomatis dan impor akan gagal. Anda dapat menentukan kolom numerik atau tanggal yang sesuai secara eksplisit sebagai kolom pemisah, atau memaksa satu tugas pemetaan (map task) yang akan menserialisasi transfer.

Kata sandi yang diketik pada baris perintah akan terlihat oleh siapa pun yang melihat daftar proses. Simpan kata sandi tersebut dalam file HDFS yang hanya dapat dibaca oleh pemilik tugas dan arahkan argumen file kata sandi ke file tersebut, atau gunakan prompt interaktif sebagai gantinya.

Teks yang dipisahkan oleh pembatas adalah format default. SequenceFile, Avro, dan Parquet juga didukung, masing-masing dipilih dengan argumennya sendiri. Parquet kolom cocok untuk kueri analitis selanjutnya, sementara teks yang dipisahkan oleh pembatas tetap yang paling sederhana untuk diperiksa dan dimasukkan ke dalam ekspor.

Empat adalah nilai default dan merupakan permulaan yang wajar. Semakin banyak mapper berarti semakin banyak koneksi simultan ke basis data, sehingga batas praktisnya adalah apa pun yang dapat ditoleransi oleh server sumber, bukan apa pun yang dapat dijadwalkan oleh klaster Hadoop.

A Java runtime, dikonfigurasi Hadoop Klien yang dapat terhubung ke cluster, dan JAR driver JDBC untuk database target ditempatkan di direktori pustaka Sqoop. JAR driver yang hilang adalah penyebab kegagalan paling umum saat pertama kali dijalankan.

Ringkaslah postingan ini dengan: