Sqoop ile Veri Transferi

İbrahim Baran
3 min readOct 20, 2020

--

Apache Sqoop, ilişkisel veri tabanları ile hadoop arasında büyük verilerin aktarımını sağlayan java tabanlı bir araçtır. Bu aktarım iki yönlü de yapılabilmektedir. Veriyi ilişkisel veri tabanından okuyup (oracle, mysql, sqlserver …) hadoop dağıtık dosya sistemine (HDFS, Hive, Hbase …) aktarabildiği gibi hadoop ortamından okuyup ilişkisel veri tabanına da yazılabilmesini sağlıyor.

Sqoop Kurulumu

Cloudera ortamında sqoop çalıştırabilmek için önce cloudera admin ekranından “sqoop 1 client” servis olarak eklenir. Sonrasında aşağıdaki komutlarla ilgili dizin yaratılıp yetki verilir.

mkdir -p /var/lib/sqoop
chown sqoop:sqoop /var/lib/sqoop
chmod 755 /var/lib/sqoop

Oracle veri tabanına bağlanmak için ilgili jdbc dosyası /var/lib/sqoop/ dizinine kopyalanır.

sudo cp ojdbc6.jar /var/lib/sqoop/

Kurulumla ilgili detaylı bilgiye cloudera’nın kendi web adresinden [1] erişebilirsiniz.

Sqoop Komut Örneği

Sqoop import komutu ile veriyi oracle veri tabanından hadoop ortamına hive tablosu olarak alabiliyoruz. Benzer örnekleri başka veri tabanları için de yapabiliriz ancak benim vereceğim örnek oracle veri tabanından veriyi okuyup hadoop ortamındaki hive tablosuna aktarmak olacak. Çalıştıracağımız komut aşağıdaki gibidir.

sqoop import — connect jdbc:oracle:thin:@0.0.0.0:1521/instance — username user — password pass -m 1 — table DWH.MEMBER — hive-import — hive-overwrite — hive-database default — hive-table Test — target-dir /user/cloudera_scm/Test — delete-target-dir

Sırasıyla kullandığım parametreleri açıklayacağım.

— connect parametresi ile bağlanacağımız oracle veri tabanının ip adresi ve instance ismi verilir. jdbc:oracle:thin:@0.0.0.0:1521/instance

— username parametresi ile oracle veri tabanına bağlanacağımız kullanıcı adı bilgisi verilir. user

— password parametresi ile oracle veri tabanına bağlanacağımız kullanıcının şifre bilgisi girilir. pass

-m parametresi ile arka plandan kaç tane paralel işin çalışacağı bilgisi girilir. 1

— table parametresi ile okunacak olan tablonun ismi girilir. DWH.MEMBER

— query parametresi ile okunacak olan verinin sql sorgusu girilebilir. Bu örnekte table parametresi ile sadece tablo ismi girildi. Aynı anda query ve table parametrelerinden sadece birini kullanabiliriz.

— hive-import parametresi ile veriyi hive tablosu olarak yazmak istediğimizin bilgisini girmiş oluyoruz.

— hive-overwrite parametresi ile mevcutta eğer tablo varsa onu drop edip tekrar yaratmamızı sağlar. Bu parametreyi kullanmayacaksak hive tablosunu manual olarak yaratmak gerekecektir.

— hive-database parametresi ile hive tablosunun hangi veri tabanına yazılacağı bilgisi girilir. default

— hive-table parametresi ile yaratılacak olan hive tablosunun isim bilgisi girilir. Test

— target-dir parametresi ile yaratılacak olan hdfs dosyasının dizini belirtilir. /user/cloudera_scm/Test

— delete-target-dir parametresi ile hdfs için yaratılan dizin silinir.

Yukarıdaki sqoop komutu çalıştığında aşağıdaki gibi log yazmaya başlar.

Sorunsuz bir şekilde tamamlandığında loglarda aşağıdaki gibi özet bilgisine ulaşabiliyoruz.

Kontrol ettiğimizde oracle tarafında ilgili tabloda 66 kayıt bulunuyor.

Veri taşıma işlemi tamamlandıktan sonra cloudera üzerindeki hue ekranında aşağıdaki gibi hive sorgusu yazdığımızda da 66 sonucunu görüyoruz.

Oracle veri tabanından hive a veri taşıma işlemi başarı ile tamamlanmış görünüyor.

Yukarıdaki örnekte sqoop için belirli parametreleri kullandım. Ancak veriyi text , parquet gibi formatlarda da taşıyabiliyoruz. İlgili ihtiyaca göre sqoop komutu parametreleri kendi web sayfasından [2] kontrol edilerek değiştirilebilir.

Kaynaklar

[1]https://docs.cloudera.com/documentation/enterprise/latest/topics/cm_mc_sqoop1_client.html

[2]https://sqoop.apache.org/docs/1.4.7/SqoopUserGuide.html

--

--