Sqoop - İçe aktar

Bu bölümde, verilerin MySQL veritabanından Hadoop HDFS'ye nasıl aktarılacağı açıklanmaktadır. 'İçe Aktarma aracı', tek tek tabloları RDBMS'den HDFS'ye aktarır. Tablodaki her satır, HDFS'de kayıt olarak kabul edilir. Tüm kayıtlar, metin dosyalarında metin verileri olarak veya Avro ve Sıra dosyalarında ikili veriler olarak saklanır.

Sözdizimi

Verileri HDFS'ye aktarmak için aşağıdaki sözdizimi kullanılır.

$ sqoop import (generic-args) (import-args) 
$ sqoop-import (generic-args) (import-args)

Misal

Şöyle adlı üç tablodan bir örnek alalım emp, emp_add, ve emp_contactMySQL veritabanı sunucusunda userdb adlı bir veritabanında bulunanlar.

Üç tablo ve verileri aşağıdaki gibidir.

emp:

İD isim derece maaş borç
1201 gopal yönetici 50.000 TP
1202 Manisha Prova okuyucu 50.000 TP
1203 Khalil php dev 30.000 AC
1204 prasant php dev 30.000 AC
1204 Kranthi yönetici 20.000 TP

emp_add:

İD hno sokak Kent
1201 288A Vgiri Jublee
1202 108I aoc sn-kötü
1203 144Z pgutta hid
1204 78B eski şehir sn-kötü
1205 720X yüksek teknoloji sn-kötü

emp_contact:

İD phno e-posta
1201 2356742 [email protected]
1202 1661663 [email protected]
1203 8887776 [email protected]
1204 9988774 [email protected]
1205 1231231 [email protected]

Tablo İçe Aktarma

Sqoop aracı 'içe aktarma', tablo verilerini tablodan Hadoop dosya sistemine metin dosyası veya ikili dosya olarak içe aktarmak için kullanılır.

Aşağıdaki komut, emp MySQL veritabanı sunucusundan HDFS'ye tablo.

$ sqoop import \
--connect jdbc:mysql://localhost/userdb \
--username root \
--table emp --m 1

Başarıyla yürütülürse, aşağıdaki çıktıyı alırsınız.

14/12/22 15:24:54 INFO sqoop.Sqoop: Running Sqoop version: 1.4.5
14/12/22 15:24:56 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset.
14/12/22 15:24:56 INFO tool.CodeGenTool: Beginning code generation
14/12/22 15:24:58 INFO manager.SqlManager: Executing SQL statement: 
   SELECT t.* FROM `emp` AS t LIMIT 1
14/12/22 15:24:58 INFO manager.SqlManager: Executing SQL statement: 
   SELECT t.* FROM `emp` AS t LIMIT 1
14/12/22 15:24:58 INFO orm.CompilationManager: HADOOP_MAPRED_HOME is /usr/local/hadoop
14/12/22 15:25:11 INFO orm.CompilationManager: Writing jar file: 
   /tmp/sqoop-hadoop/compile/cebe706d23ebb1fd99c1f063ad51ebd7/emp.jar
-----------------------------------------------------
-----------------------------------------------------
14/12/22 15:25:40 INFO mapreduce.Job: The url to track the job: 
   http://localhost:8088/proxy/application_1419242001831_0001/
14/12/22 15:26:45 INFO mapreduce.Job: Job job_1419242001831_0001 running in uber mode : 
   false
14/12/22 15:26:45 INFO mapreduce.Job: map 0% reduce 0%
14/12/22 15:28:08 INFO mapreduce.Job: map 100% reduce 0%
14/12/22 15:28:16 INFO mapreduce.Job: Job job_1419242001831_0001 completed successfully
-----------------------------------------------------
-----------------------------------------------------
14/12/22 15:28:17 INFO mapreduce.ImportJobBase: Transferred 145 bytes in 177.5849 seconds 
   (0.8165 bytes/sec)
14/12/22 15:28:17 INFO mapreduce.ImportJobBase: Retrieved 5 records.

İçe aktarılan verileri HDFS'de doğrulamak için aşağıdaki komutu kullanın.

$ $HADOOP_HOME/bin/hadoop fs -cat /emp/part-m-*

Size gösterir emp tablo verileri ve alanlar virgül (,) ile ayrılmıştır.

1201, gopal,    manager, 50000, TP
1202, manisha,  preader, 50000, TP
1203, kalil,    php dev, 30000, AC
1204, prasanth, php dev, 30000, AC
1205, kranthi,  admin,   20000, TP

Hedef Dizine Aktarma

Sqoop içe aktarma aracını kullanarak tablo verilerini HDFS'ye aktarırken hedef dizini belirleyebiliriz.

Hedef dizini Sqoop içe aktarma komutuna seçenek olarak belirtmek için sözdizimi aşağıdadır.

--target-dir <new or exist directory in HDFS>

İçe aktarmak için aşağıdaki komut kullanılır emp_add tablo verilerini '/ queryresult' dizinine yerleştirin.

$ sqoop import \
--connect jdbc:mysql://localhost/userdb \
--username root \
--table emp_add \
--m 1 \
--target-dir /queryresult

Aşağıdaki komut, / queryresult dizin formundaki içeri aktarılan verileri doğrulamak için kullanılır. emp_add tablo.

$ $HADOOP_HOME/bin/hadoop fs -cat /queryresult/part-m-*

Size emp_add tablo verilerini virgülle (,) ayrılmış alanlarla gösterecektir.

1201, 288A, vgiri,   jublee
1202, 108I, aoc,     sec-bad
1203, 144Z, pgutta,  hyd
1204, 78B,  oldcity, sec-bad
1205, 720C, hitech,  sec-bad

Tablo Verilerinin Alt Kümesini İçe Aktar

Sqoop içe aktarma aracındaki 'where' cümlesini kullanarak bir tablonun alt kümesini içe aktarabiliriz. İlgili veritabanı sunucusunda karşılık gelen SQL sorgusunu yürütür ve sonucu HDFS'de bir hedef dizinde depolar.

Where cümlesi için sözdizimi aşağıdaki gibidir.

--where <condition>

Aşağıdaki komut bir alt kümesini içe aktarmak için kullanılır emp_addtablo verileri. Alt küme sorgusu, Secunderabad şehrinde yaşayan çalışan kimliği ve adresini almak içindir.

$ sqoop import \
--connect jdbc:mysql://localhost/userdb \
--username root \
--table emp_add \
--m 1 \
--where “city =’sec-bad’” \
--target-dir /wherequery

Aşağıdaki komut, / wherequery dizinindeki içe aktarılan verileri doğrulamak için kullanılır. emp_add tablo.

$ $HADOOP_HOME/bin/hadoop fs -cat /wherequery/part-m-*

Size gösterecek emp_add virgülle (,) ayrılmış alanlara sahip tablo verileri.

1202, 108I, aoc,     sec-bad
1204, 78B,  oldcity, sec-bad
1205, 720C, hitech,  sec-bad

Artımlı İçe Aktarma

Artımlı içe aktarma, bir tabloya yalnızca yeni eklenen satırları içe aktaran bir tekniktir. Artımlı içe aktarmayı gerçekleştirmek için 'artımlı', 'kontrol sütunu' ve 'son değer' seçeneklerinin eklenmesi gerekir.

Sqoop import komutundaki artımlı seçenek için aşağıdaki sözdizimi kullanılır.

--incremental <mode>
--check-column <column name>
--last value <last check column value>

Yeni eklenen verileri varsayalım. emp tablo aşağıdaki gibidir -

1206, satish p, grp des, 20000, GR

Aşağıdaki komut, artımlı içe aktarmayı gerçekleştirmek için kullanılır. emp tablo.

$ sqoop import \
--connect jdbc:mysql://localhost/userdb \
--username root \
--table emp \
--m 1 \
--incremental append \
--check-column id \
-last value 1205

Aşağıdaki komut, içeri aktarılan verileri doğrulamak için kullanılır. emp HDFS emp / dizinine tablo.

$ $HADOOP_HOME/bin/hadoop fs -cat /emp/part-m-*

Size gösterir emp virgülle (,) ayrılmış alanlara sahip tablo verileri.

1201, gopal,    manager, 50000, TP
1202, manisha,  preader, 50000, TP
1203, kalil,    php dev, 30000, AC
1204, prasanth, php dev, 30000, AC
1205, kranthi,  admin,   20000, TP
1206, satish p, grp des, 20000, GR

Aşağıdaki komut, listeden değiştirilen veya yeni eklenen satırları görmek için kullanılır. emp tablo.

$ $HADOOP_HOME/bin/hadoop fs -cat /emp/part-m-*1

Size yeni eklenen satırları gösterir. emp virgülle (,) ayrılmış alanlara sahip tablo.

1206, satish p, grp des, 20000, GR