Wednesday, July 29, 2015

SQOOP ile database den HADOOP'a data aktarimi

Merhaba,

Artık BigData kavramı hayatımıza girdi ve dba lerin bigdata ya kayıtsız kalması mümkün kalmamakta :)

HADOOP'a yeni yeni başlayan birisi olarak bu yeni dünya ilk başta karışık gelse de, aslında oynayarak epey eğlenceli olduğunu görüyorsunuz.

Bu yazımda SQOOP ile test database'inden HADOOP'a data aktarmayi yapacağım. İnternette bunla alakalı pek çok örnek görebilirsiniz. :)  Ayrıca bu yazıda ilk import da karşılaştığım bir hatayı ve çözümü göreceksiniz. Muhtemelen sizinde başınıza gelmiştir.

İlk önce SQOOP dan biraz bahsedeyim :

SQOOP, relational bir database den HDFS e data aktarmaya yarayan bir tool. HDFS de işlemler yapıldıktan sonra tekrar RDBMS'e datayı aktarabiliriz.





$ sqoop help 

Available commands:
  codegen            Generate code to interact with database records
  create-hive-table  Import a table definition into Hive
  eval                  Evaluate a SQL statement and display the results
  export               Export an HDFS directory to a database table
  help                  List available commands
  import             Import a table from a database to HDFS
  import-all-tables  Import tables from a database to HDFS
  import-mainframe   Import datasets from a mainframe server to HDFS
  job                Work with saved jobs
  list-databases     List available databases on a server
  list-tables        List available tables in a database
  merge              Merge results of incremental imports
  metastore          Run a standalone Sqoop metastore
  version            Display version information


Şimdi ise SQOOP ile import işlemine başlayalım. İlk önce database de örnek bir user ve örnek bir tablo oluşturduğumuzu varsayıyorum. Sqoop ile import aşağıdaki şekilde başlatılır.

$sqoop import --connect jdbc:oracle:thin:@//SERVER#:PORT#/SERVICENAME# --table sqooperkanul.sqooptest--username sqooperkanul --password <PASSWORD#> -m 1 --append

Bu komutu çağırdığınızda aşağıdaki hatayı alacaksınız :D

ERROR tool.ImportTool: Imported Failed: There is no column found in the target table SQOOPERKANUL.sqooptest. Please ensure that your table name is correct

Bu hata SQOOP 'un case sensitive olmaması. Burdan görebileceğiniz gibi table ismini UPPER verince sorun çözülecektir.

$sqoop import --connect jdbc:oracle:thin:@//SERVER#:PORT#/SERVICENAME# --table  SQOOPERKANUL.SQOOPTEST --username sqooperkanul --password <PASSWORD#> -m 1 --append

....
15/07/29 11:23:13 INFO mapreduce.Job: Running job: job_1435734416202_0187
15/07/29 11:23:19 INFO mapreduce.Job: Job job_1435734416202_0187 running in uber mode : false
15/07/29 11:23:19 INFO mapreduce.Job:  map 0% reduce 0%
15/07/29 11:23:31 INFO mapreduce.Job:  map 100% reduce 0%
15/07/29 11:23:31 INFO mapreduce.Job: Job job_1435734416202_0187 completed successfully
15/07/29 11:23:31 INFO mapreduce.Job: Counters: 30
        File System Counters
                FILE: Number of bytes read=0
                FILE: Number of bytes written=144634
                FILE: Number of read operations=0
                FILE: Number of large read operations=0
                FILE: Number of write operations=0
                HDFS: Number of bytes read=87
                HDFS: Number of bytes written=128589824
                HDFS: Number of read operations=4
                HDFS: Number of large read operations=0
                HDFS: Number of write operations=2
        Job Counters 
                Launched map tasks=1
                Other local map tasks=1
                Total time spent by all maps in occupied slots (ms)=9379
                Total time spent by all reduces in occupied slots (ms)=0
                Total time spent by all map tasks (ms)=9379
                Total vcore-seconds taken by all map tasks=9379
                Total megabyte-seconds taken by all map tasks=9604096
        Map-Reduce Framework
                Map input records=425984
                Map output records=425984
                Input split bytes=87
                Spilled Records=0
                Failed Shuffles=0
                Merged Map outputs=0
                GC time elapsed (ms)=133
                CPU time spent (ms)=10520
                Physical memory (bytes) snapshot=424960000
                Virtual memory (bytes) snapshot=2961072128
                Total committed heap usage (bytes)=607649792
        File Input Format Counters 
                Bytes Read=0
        File Output Format Counters 
                Bytes Written=128589824
15/07/29 11:23:31 INFO mapreduce.ImportJobBase: Transferred 122.6328 MB in 19.8295 seconds (6.1844 MB/sec)
15/07/29 11:23:31 INFO mapreduce.ImportJobBase: Retrieved 425984 records.
15/07/29 11:23:31 INFO util.AppendUtils: Appending to directory SQOOPERKANUL.SQOOPTEST
15/07/29 11:23:31 INFO util.AppendUtils: Using found partition 3

HDFS üzerinde datayı görmek istiyorsak hadoop komutları ile görebiliriz.

$ hadoop dfs -ls SQOOPERKANUL.SQOOPTEST

DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it.

Found 5 items
-rw-r--r--   3 oracle hadoop          0 2015-07-23 12:07 SQOOPERKANUL.SQOOPTEST/_SUCCESS
-rw-r--r--   3 oracle hadoop  128589824 2015-07-23 12:07 SQOOPERKANUL.SQOOPTEST/part-m-00000
-rw-r--r--   3 oracle hadoop  128589824 2015-07-29 10:58 SQOOPERKANUL.SQOOPTEST/part-m-00001
-rw-r--r--   3 oracle hadoop  128589824 2015-07-29 10:59 SQOOPERKANUL.SQOOPTEST/part-m-00002
-rw-r--r--   3 oracle hadoop  128589824 2015-07-29 11:23 SQOOPERKANUL.SQOOPTEST/part-m-00003

Gördüğünüz gibi append ile veriyi HDFS de append ettik. File'ın içeriğini CAT ile görebilirsiniz.

$ hadoop dfs -cat SQOOPERKANUL.SQOOPTEST/part-m-00003

Bir sonraki yazımda HIVE ile bu tabloyu sorgulamayı anlatacağım.


Source:
https://sqoop.apache.org/docs/1.4.1-incubating/SqoopUserGuide.html#_introduction
https://hive.apache.org/

İyi çalışmalar.










1 comment :

  1. Really Good blog post.provided a helpful information.I hope that you will post more updates like this Big Data Hadoop Online Course

    ReplyDelete