Apache Sqoop ile SQL Server’dan HDFS’a Table Aktarımı

Apache Sqoop, RDBMS ile HDFS (Hadoop Distributed File System) arasında veri aktarımı için geliştirilmiş açık kaynak kodlu bir araçtır. Sqoop ismi, SQL-to-Hadoop kelimelerinin kısaltılmasıyla oluşmuştur. Detaylı bilgi için: Apache Sqoop

Örnekte kullanacağımız RDBMS, SQL Server olacak ve 2014 versiyonu üzerinde çalışma yapacağız. Hadoop distribution olarak da Cloudera’nın, single node cluster üzerinde test, yönetim, geliştirme, demo ve öğrenim için hazırlamış olduğu VM imajını kullanıyor olacağız. İndirme linki: Cloudera QuickStart VM

VM imajı indirdikten sonra mutlaka dosyanın hashini kontrol etmenizde fayda var. SHA1 for VMware image: f6bb5abdde3e2f760711939152334296dae8d586 gibi..

Test için AdventureWorksDW2014 veri tabanından (ambarından) seçeceğimiz herhangi bir dimension ya da fact table ı HDFS e aktarıyor olacağız. Veri tabanı backupı için : AdventureWorksDW2014

Öncelikle instance a erişim sağladığımızdan emin olmalıyız. Ayrıca vmde hangi java versiyonun kurulu olduğunu kontrol etmek için “java -version” komutunu girmek yeterli. Versiyon ileriki adımlarda bize gerekli olacak.

Bu örnekte java versiyonunun 1.7.~ olduğunu görmekteyiz. Java kontrolü sonrasında sqoop ile aktarımı sağlayacak olan jdbc driver’ın sqoop library içerisinde olduğundan emin olmalıyız. Bunun kontrolü için “ls /usr/lib/sqoop/lib” komutunu girdikten sonra çıktıda “sqljdbc_~” ismiyle başlayan .jar uzantılı dosyayı görmemiz gerekiyor. Eğer mevcut değilse aşağıdaki adımları izlemeliyiz.

VM üzerinde terminalde “wget https://download.microsoft.com/download/~/enu/sqljdbc_~” komutunu girerek jdbc driver ı indiriyoruz. Driver sürekli güncellebileceği için tam linki yanıltıcı olmaması amacıyla vermiyorum. Örnek olarak girdiğim komutun ekran görüntüsünü inceleyebilirsiniz. İndirme linki: Microsoft JDBC Driver 6.0 for SQL Server

Dosyayı indirdikten sonra, zipten çıkartıp ilgili dizine kopyalamamız gerekiyor. Bu işlem için “tar zxvf sqljdbc~.tar.gz” komutunu terminalde girmemiz yeterli. Zipi açtıktan sonra yukarıda öğrendiğimiz java versiyonuna bağlı olarak ilgili jar dosyasını sqoop library pathinin altına kopyalamalıyız. Bunun için “sudo cp -p sqljdbc_6.0/enu/jre7/sqljdbc41.jar /usr/lib/sqoop/lib/” komutunu çalıştırıyoruz.

İşlemleri tamamladıktan sonra veri aktarımını gerçekleştirebiliriz. Veri aktarımını sağlamak için aşağıdaki komutları sahip olduğumuz ortama göre düzenleyip çalıştırıyoruz. Örnek olarak, sqlserver://dev-mssql\sql2014, SQL Server instance ının kurulu olduğu server ismi ve SQL2014 instance name ini ifade etmektedir. Server ismi yerine IP adresi de kullanılabilir.

sqoop import –connect ‘jdbc:sqlserver://dev-mssql\sql2014;database=AdventureWorksDW2014’ –username ‘hadoop’ -P –table DimReseller

sqoop import: RDBMS’te yer alan table ya da view in HDFS e aktarımını sağlayan komut

–connect: SQL Server, MySQL, Oracle gbi RDBMS’lere erişim sağlamak için kullanılan parametre

–jdbc:sqlserver: Erişim sağlanacak RDBMS için kullanılacak driver

–username:’hadoop’: RDBMS’e erişim sağlayacak login name

Komutu çalıştırdıktan sonra, sqoop bizim için tableda eğer primary key yer alıyorsa, primary key e göre MIN ve MAX değerlerini bularak toplam satır sayısına göre tek seferde aktarılacak veri miktarını belirleyecektir. Bu örnekte “Split size:175” ve “mapreduce.JobSubmitter: number of splits:4” bölümleri bu kısmı ifade etmektedir.

En son mesajda ise aktarılan toplam kayıt sayısı görülmektedir. Aşağıdaki ekran görüntüsünde 701 kaydın alındığı gösteriliyor, bir yukarıda ise number of splits: 4 değeri ise 701 kaydın 4 parçaya bölünerek bloklar halinde aktarılacağını, bunun da 175×4:~701 kayıt olacağı görülüyor.

AdventureWorksDW2014’te yer alan DimReseller kayıt sayısını da kontrol edelim.

Kayıt sayılarını da kontrol ettikten sonra, ilgili table ın HDFS’te dosya olarak yer aldığını kontrol etmek amacıyla, “hdfs dfs -ls ./DimReseller” komutu çalıştırabilir ya da Cloudera QuickStart arayüzünden HDFS explorer ile erişim sağlanabilir.

Partlar halinde yer alan DimReseller’da, herhangi bir partın içeriğini kontrol edebilmek ve TOP 10 kaydı listelemek için “hdfs dfs -cat DimReseller/part-m-00000|head” komutunu giriyoruz.

Ekran görüntülerinde de görüldüğü üzere, table başarılı bir şekilde aktarılmış durumda. Bu aşamadan sonra DimReseller, sorgulama ya da batch processing için veri hazırlama süreçlerine hazır duruma gelmiş oldu.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir