SQOOP mimarisine derinlemesine bir giriş

Apache Sqoop , Apache Hadoop ile ilişkisel veritabanları gibi yapılandırılmış veri depoları ve bunun tersi arasında toplu verilerin verimli bir şekilde aktarılması için tasarlanmış bir veri alma aracıdır.

Bu blogun bir parçası olarak, bir Sqoop komutunun yürütülmesinde mimarinin nasıl çalıştığını açıklayacağım. Codegen aracılığıyla jar oluşturma, MapReduce işinin yürütülmesi ve Sqoop içe / dışa aktarma komutunu çalıştırmanın çeşitli aşamaları gibi ayrıntıları ele alacağım.

Codegen

Codegen'i anlamak, dahili olarak Sqoop işimizi POJO, ORM gibi çeşitli Java sınıflarından ve DBWritable'ı uygulayan bir sınıftan oluşan bir kavanoza dönüştürdüğü için, SqoopRecord'u ilişkisel veritabanlarından Hadoop ve vice- versa.

Jar'ın bir parçası olarak bulunan sınıfları kontrol etmek için aşağıda gösterildiği gibi açıkça bir Codegen oluşturabilirsiniz.

sqoop codegen \ -- connect jdbc:mysql://ms.jayReddy.com:3306/retail_db \ -- username retail_user \ -- password ******* \ -- table products

Çıktı kavanozu yerel dosya sisteminize yazılacaktır. .Class dosyalarına derlenmiş bir Jar dosyası, Java dosyası ve java dosyaları alacaksınız:

Oluşturulacak kodun bir pasajını görelim.

Tablo 'ürünler' için ORM sınıfı // Eşleme için oluşturulan nesne ilişkisel modal:

Değerleri almak için Setter & Getter yöntemleri:

Dahili olarak, Hadoop'a yazmak için JDBC tarafından hazırlanmış ifadeleri ve Hadoop'tan verileri okumak için ResultSet'i kullanır.

Sqoop İçe Aktarma

Geleneksel ilişkisel veritabanlarından Hadoop'a veri aktarmak için kullanılır.

Aynı için örnek bir pasaj görelim.

sqoop import \ -- connect jdbc:mysql://ms.jayReddy.com:3306/retail_db \ -- username retail_user \ -- password ******* \ -- table products \ -- warehouse-dir /user/jvanchir/sqoop_prac/import_table_dir \ -- delete-target-dir

Aşağıdaki adımlar sqoop'un yürütülmesi sırasında dahili olarak gerçekleşir.

Adım 1 : MySQL'deki verileri akış biçiminde okuyun. Verileri HDFS'ye yazmadan önce çeşitli işlemler yapar.

Bu işlemin bir parçası olarak, önce Java kodundan başka bir şey olmayan kodu (tipik Harita azaltma kodu) üretecektir. Bu Java kodunu kullanarak içeri aktarmayı deneyecektir.

  • Kodu oluşturun. (Hadoop MR)
  • Kodu derleyin ve Jar dosyasını oluşturun.
  • Jar dosyasını gönderin ve içe aktarma işlemlerini gerçekleştirin

İçe aktarma sırasında, Sqoop içe aktarmanın ölçeklendirilebilmesi için verilerin birden çok iş parçacığına nasıl bölüneceğine dair belirli kararlar alması gerekir.

Adım 2 : Verinin yapısını anlayın ve CodeGen'i gerçekleştirin

Yukarıdaki SQL ifadesini kullanarak, sütun isimleriyle birlikte bir kayıt getirecektir. Bu bilgileri kullanarak sütunların, veri tiplerinin vb. Meta veri bilgilerini çıkaracaktır.

3. Adım : Java dosyasını oluşturun, derleyin ve bir jar dosyası oluşturun

Kod oluşturmanın bir parçası olarak, verilerin yapısını anlaması ve verilerin hedef veritabanına doğru bir şekilde kopyalandığından emin olmak için bu nesneyi gelen verilere dahili olarak uygulaması gerekir. Her benzersiz tablonun, verilerin yapısından bahseden bir Java dosyası vardır.

Bu jar dosyası, yapıyı gelen verilere uygulamak için Sqoop ikili dosyalarına enjekte edilecektir.

Adım 4 : Zaten varsa hedef dizini silin.

5. Adım : Verileri içe aktarın

Burada, bir kaynak yöneticisine bağlanır, kaynağı alır ve uygulama yöneticisini başlatır.

Harita görevleri arasında eşit veri dağıtımı gerçekleştirmek için, varsayılan olarak birincil anahtara dayalı olarak dahili olarak bir sınır sorgusu yürütür.

Tablodaki minimum ve maksimum kayıt sayısını bulmak için.

Maksimum sayıya bağlı olarak, eşleyici sayısına bölünecek ve her eşleyici arasında bölünecektir.

Varsayılan olarak 4 eşleyici kullanır:

Bu işleri aşağıda gösterildiği gibi farklı uygulayıcılarda yürütür:

Varsayılan eşleyici sayısı, aşağıdaki parametre ayarlanarak değiştirilebilir:

Yani bizim durumumuzda 4 iş parçacığı kullanıyor. Her iş parçacığı, birbirini dışlayan alt kümeleri işler, yani her iş parçacığı diğerlerinden farklı verileri işler.

Farklı değerleri görmek için aşağıdakilere göz atın:

Her yürütücü düğüm altında gerçekleştirilen işlemler:

Bir Sqooop kovanı içe aktarma işlemi gerçekleştirmeniz durumunda, yürütmenin bir parçası olarak fazladan bir adım gerçekleşir.

Adım 6 : Verileri kovan tablosuna kopyalayın

Sqoop İhracat

Bu, verileri Hadoop'tan geleneksel ilişkisel veritabanlarına aktarmak için kullanılır.

Aynısı için örnek bir pasaj görelim:

sqoop export \ -- connect jdbc:mysql://ms.jayReddy.com:3306/retail_export \ -- username retail_user \ -- password ******* \ -- table product_sqoop_exp \ -- export-dir /user/jvanchir/sqoop_prac/import_table_dir/products

On executing the above command, the execution steps (1–4) similar to Sqoop import take place, but the source data is read from the file system (which is nothing but HDFS). Here it will use boundaries upon block size to divide the data and it is internally taken care by Sqoop.

The processing splits are done as shown below:

After connecting to the respective database to which the records are to be exported, it will issue a JDBC insert command to read data from HDFS and store it into the database as shown below.

Now that we have seen how Sqoop works internally, you can determine the flow of execution from jar generation to execution of a MapReduce task on the submission of a Sqoop job.

Note: The commands that were executed related to this post are added as part of my GIT account.

Similarly, you can also read more here:

  • Hive Architecture in Depth with code.
  • HDFS Architecture in Depth with code.

If you would like too, you can connect with me on LinkedIn - Jayvardhan Reddy.

If you enjoyed reading this article, you can click the clap and let others know about it. If you would like me to add anything else, please feel free to leave a response ?