Apache Sqoop Eğitimi: ArchiYapı, Komutlar ve Örnek
⚡ Akıllı Özet
Apache Sqoop, bağlantı mimarisi kullanarak ilişkisel veritabanları ve HDFS arasında büyük miktarda veri taşır; bu işlem, tabloları Hive veya HBase'e aktaran ve işlenmiş sonuçları kaynak sisteme geri aktaran MapReduce işleri oluşturur.
Hadoop'ta SQOOP nedir?
Apache Sqoop'u (SQL-to-Hadoop), toplu veri dışa aktarımı ve içe aktarımını desteklemek üzere tasarlanmış bir araçtır. HDFS İlişkisel veritabanları, kurumsal veri ambarları ve NoSQL sistemleri gibi yapılandırılmış veri depolarından veri aktarımı için kullanılan bir araçtır. Yeni harici sistemlere bağlantı sağlamak için eklentileri destekleyen bir bağlantı mimarisine dayalı bir veri taşıma aracıdır.
Hadoop Sqoop'un örnek bir kullanım durumu, günün verilerini üretim işlemsel bir RDBMS'den bir RDBMS'ye yüklemek için her gece Sqoop içe aktarımı çalıştıran bir kuruluştur. kovan Daha fazla analiz için veri ambarı.
Bu Apache Sqoop eğitimimizin bir sonraki bölümünde Apache Sqoop mimarisini öğreneceğiz.
kepçe Archidoku
mevcut tüm Veritabanı Yönetim Sistemleri ile tasarlanmıştır SQL akılda standart. Bununla birlikte, her DBMS lehçeye göre bir dereceye kadar farklılık gösterir. Dolayısıyla bu fark, sistemler arasında veri aktarımı söz konusu olduğunda zorluklara yol açmaktadır. Sqoop Konektörleri bu zorlukların üstesinden gelmeye yardımcı olan bileşenlerdir.
Sqoop Hadoop ile harici depolama sistemi arasındaki veri aktarımı Sqoop'un konnektörleri yardımıyla mümkün olmaktadır.
Sqoop, aşağıdakiler de dahil olmak üzere bir dizi popüler ilişkisel veritabanlarıyla çalışmak için bağlayıcılara sahiptir: MySQL, PostgreSQL, Oracle, SQL Server ve DB2. Bu bağlayıcıların her biri, ilişkili DBMS ile nasıl etkileşim kuracağını bilir. Destekleyen herhangi bir veritabanına bağlanmak için genel bir JDBC konektörü de vardır. JavaSqoop, JDBC protokolünü destekler. Ayrıca, optimize edilmiş bir şekilde JDBC protokolünü de sunar. MySQL hem de PostgreSQL Toplu aktarımları verimli bir şekilde gerçekleştirmek için veritabanına özgü API'leri kullanan bağlayıcılar.
Aşağıdaki diyagramda Sqoop istemcisi, harici veri deposu ile Hadoop kümesi arasına yerleştirilir; bağlantı katmanı bir tarafta, HDFS, Hive ve HBase ise diğer tarafta bulunur.
Bağlantı katmanının altında, Sqoop bir şey oluşturur. Java Tablonun bir satırını yansıtan ve ardından yalnızca harita içeren bir veri gönderen sınıf. Harita indirgeme Her eşleme görevi, bölünmüş sütun aralığının kendi dilimini okur; bu nedenle verimlilik, tek bir JDBC imleciyle değil, eşleyici sayısıyla doğru orantılı olarak artar.
Bunun yanı sıra, Sqoop'un kurumsal düzeyden başlayarak veri depoları için çeşitli üçüncü taraf bağlantı araçları da bulunmaktadır. veri depoları (Netezza, Teradata ve Oracle) NoSQL mağazalarına (Couchbase gibi). Ancak bu konektörler Sqoop paketiyle birlikte gelmiyor; bunların ayrı olarak indirilmesi gerekir ve mevcut bir Sqoop kurulumuna kolayca eklenebilir.
Neden Sqoop'a ihtiyacımız var?
Hadoop kullanarak analitik işleme, çeşitli kaynaklardan büyük miktarda verinin Hadoop kümelerine yüklenmesini gerektirir. Bu, heterojen kaynaklardan Hadoop'a toplu veri yükleme ve ardından işleme süreci, belirli bir dizi zorlukla birlikte gelir. Veri tutarlılığını korumak ve sağlamak ve kaynakların verimli kullanımını sağlamak, veri yükleme için doğru yaklaşımı seçmeden önce dikkate alınması gereken bazı faktörlerdir.
Büyük sorunlar:
- Komut dosyaları kullanarak veri yükleme — Hadoop'a toplu veri yükleme için komut dosyaları kullanma şeklindeki geleneksel yaklaşım uygun değildir; bu yaklaşım verimsiz ve çok zaman alıcıdır.
- MapReduce uygulaması aracılığıyla harici verilere doğrudan erişim — MapReduce uygulamaları için harici sistemlerde bulunan verilere (Hadoop'a yüklemeden) doğrudan erişim sağlamak, bu uygulamaları karmaşıklaştırır. Bu nedenle, bu yaklaşım uygulanabilir değildir.
Hadoop, devasa veri kümeleriyle çalışabilme yeteneğinin yanı sıra, çeşitli farklı veri biçimleriyle de çalışabilir. Bu nedenle, bu tür heterojen verileri Hadoop'a yüklemek için farklı araçlar geliştirilmiştir. kepçe hem de suyolu bu tür iki veri yükleme aracıdır.
Örneklerle dolu bu Sqoop eğitiminde bir sonraki adımda Sqoop, Flume ve HDFS arasındaki farkı öğreneceğiz.
Hadoop'ta Sqoop vs Flume vs HDFS
| kepçe | suyolu | HDFS |
|---|---|---|
| Sqoop, RDBMS gibi yapılandırılmış veri kaynaklarından veri içe aktarmak için kullanılır. | Flume, toplu akış verilerini HDFS'ye taşımak için kullanılır. | HDFS, Hadoop ekosistemi tarafından veri depolamak için kullanılan dağıtılmış bir dosya sistemidir. |
| Sqoop bağlayıcı tabanlı bir mimariye sahiptir. Bağlayıcılar ilgili veri kaynağına nasıl bağlanacağını ve verileri nasıl alacağını bilir. | Flume, ajan tabanlı bir mimariye sahiptir. Burada, veriyi almakla ilgilenen bir kod yazılır (buna 'ajan' denir). | HDFS, verilerin birden fazla veri düğümüne dağıtıldığı dağıtılmış bir mimariye sahiptir. |
| HDFS, Sqoop kullanılarak veri aktarımı için bir hedeftir. | Veriler HDFS'ye sıfır veya daha fazla kanal üzerinden akar. | HDFS, veri depolama için nihai hedeftir. |
| Sqoop veri yüklemesi olaya dayalı değildir. | Flume veri yükü bir olay tarafından tetiklenebilir. | HDFS, herhangi bir yolla kendisine sağlanan verileri saklar. |
| Yapılandırılmış veri kaynaklarından veri aktarmak için yalnızca Sqoop komutlarını kullanmak gerekir çünkü bağlayıcıları yapılandırılmış veri kaynaklarıyla nasıl etkileşime gireceğini ve onlardan veri almayı bilir. | Twitter'da oluşturulan tweet'ler veya bir web sunucusunun günlük dosyaları gibi akış verilerini yüklemek için Flume kullanılmalıdır. Flume aracıları akış verilerini almak için oluşturulmuştur. | HDFS'nin veri depolamak için kendi yerleşik kabuk komutları vardır. HDFS akış halindeki verileri içe aktaramaz. |
Sqoop'un Başlıca Özellikleri
Yukarıdaki karşılaştırma, Sqoop'un nerede yer aldığını açıklıyor. Aşağıdaki özellik seti ise belirli bir veri alım işine uygun olup olmadığını belirliyor.
- Tam dolu: Tek bir komutla tablonun tamamı kopyalanır ve
import-all-tablesBir şemadaki tüm tabloları tek seferde kopyalar. - Artımlı yükleme:
appendkip tracks, vekil anahtar gibi monotonik olarak artan bir sütundur,lastmodifiedkip tracBir zaman damgası sütunu içerir, böylece yalnızca yeni veya değiştirilen satırlar aktarılır. - Paralel aktarım: Bölme sütunu, anahtar aralığını eşleme görevleri arasında böler ve eşleyici sayısı, aynı anda kaç tanesinin çalıştırılacağını belirler.
- Serbest biçimli sorgu içe aktarma: Veritabanı tarafındaki birleştirme ve filtreleme işlemlerini koruyarak, tüm tablo yerine rastgele bir SQL sorgusunun sonucu içe aktarılabilir.
- Depoya doğrudan yükleme: Bir içe aktarma işlemi, bir dosya oluşturabilir ve doldurabilir. kovan tabloya yazmak veya durdurmak yerine doğrudan bir HBase tablosuna yazmak.ping Ham HDFS dosyalarında.
- Sıkıştırma ve dosya formatları: Çıktı, isteğe bağlı kodek düzeyinde sıkıştırma ile birlikte, sınırlayıcı karakterlerle ayrılmış metin, SequenceFile, Avro veya Parquet formatında yazılabilir.
- Güvenlik: Sqoop, Kerberos ile entegre olur ve kimlik bilgileri, komut satırına yazılmak yerine bir parola dosyasından okunabilir veya istem yoluyla girilebilir.
Sqoop İçe ve Dışa Aktarma Komutları
Aktarımın her iki yönü de tek bir komut satırı yardımcı programı üzerinden gerçekleştirilir. İçe aktarma aracı, satırları veritabanından Hadoop'a taşırken, dışa aktarma aracı dosyaları Hadoop'tan tekrar veritabanı tablosuna taşır.
Tipik bir içe aktarma işlemi, JDBC bağlantısını, kaynak tabloyu, hedef dizini, bölme sütununu ve eşleyici sayısını belirtir:
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
Dışa aktarma işlemi akışı tersine çevirir. HDFS dizininde zaten bulunan sınırlayıcı karakterlerle ayrılmış dosyaları okur ve bunları mevcut bir tabloya ekler; bu nedenle hedef tablonun önce oluşturulması gerekir:
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 ','
Gece yapılan bir işlem nadiren tablonun tamamına iki kez ihtiyaç duyar. Artımlı içe aktarma, daha önce gördüğü en yüksek değeri kaydeder ve bir sonraki çalıştırmada oradan başlar:
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
Bunlar hemen hemen her iş görüşmesinde ortaya çıkan argümanlardır:
| Tartışma | Ne kontrol ediyor? |
|---|---|
--connect |
JDBC URL Kaynak veya hedef veritabanının. |
--table |
İçe aktarma işleminde okunan veya dışa aktarma işleminde yazılan tablo. |
--target-dir |
İçe aktarma işleminin yapılacağı HDFS dizini. Bu dizin önceden mevcut olmamalıdır. |
--export-dir |
Dışa aktarma işlemiyle okunacak dosyaların bulunduğu HDFS dizini. |
--split-by |
Değer aralığı harita görevleri arasında bölünmüş olan sütun. |
--num-mappers (-m) |
Paralel haritalama görevlerinin sayısı. Varsayılan değer dörttür. |
--incremental |
Seçer append or lastmodified değişiklik trackral. |
--hive-import |
İlgili Hive tablosunu oluşturur ve içe aktarılan verileri bu tabloya yükler. |
⚠️ Dikkat: Dışa aktarma tek bir işlem değildir. Her eşleme görevi kendi toplu işlemini gerçekleştirir, bu nedenle işlem yarıda kalırsa verilerin bir kısmı hedef tabloda kalabilir. Yüklemenin tamamen veya hiç olmaması gerektiğinde yazma işlemini bir ara tablo üzerinden yönlendirin.
Sqoop Projesinin Durumu ve Modern Alternatifleri
Yukarıdaki komutların herhangi birinin zamanlayıcıya girmesinden önce, sürümle ilgili önemli bir ayrıntı var.
Sqoop geliştiricileri Haziran 2021'de projeyi sonlandırma kararı aldı ve taşınma işlemi gerçekleşti. Apache Çatı Katı Temmuz 2021'de tamamlandı. Web sitesi, e-posta listeleri, git deposu, sorunlar tracKer ve indirme dosyaları hala mevcut ancak salt okunur durumda ve başka sürüm planlanmıyor. Son üretim sürümü 2017'den kalma Sqoop 1.4.7'dir; ayrı Sqoop 2 serisi (1.99.x) hiçbir zaman özellik eşdeğerliğine ulaşmadı ve üretim için hazır olarak ilan edilmedi.
Mevcut Sqoop işleri hala çalışıyor ve ticari Hadoop dağıtımları, kendi platformlarında bu aracı sunmaya ve desteklemeye devam ediyor. Ancak yeni veri alım çalışmaları genellikle bunun yerine şunlardan biri üzerine kuruludur:
| Alternatif | En uygun |
|---|---|
| Spark JDBC veri kaynağı ile | Toplu işlem tablosu örneğitraczaten bir şeyin içinde bulunan ts Spark Eşleyiciler yerine bölümlenmiş okumalar kullanan işlem hattı. |
| Apache NiFi | Farklı türdeki birçok sistem arasında akış tabanlı, görsel olarak yapılandırılmış yönlendirme. |
| CDC bağlantı noktasıyla Kafka Connect | Gece yapılan toplu işlem penceresi yerine sürekli değişiklik verisi yakalama. |
| Yönetilen ETL platformları, örneğin; Talend | Elle yazılmış işlere gerek kalmadan önceden oluşturulmuş bağlantılar, planlama ve soy ağacı. |

