Thursday, July 30, 2015

SQOOP ile HIVE ' a data aktarimi ve HIVE ile sorgulama

Merhaba arkadaşlar,

Bir önceki yazımda SQOOP ile HDFS 'e test databasei üzerinden data aktarimi yapıp, file olarak bu dataları görüntülemiştik.

Bu yazıda ise  yine SQOOP kullanarak direct olarak test databaseden HIVE üzerinde tanımlı bir test database veri aktarip, HUE üzerinden sorgulayacağız.

Öncelikle HIVE dan bahsetmek istiyorum. HIVE , HDFS üzerindeki datayı SQL-like dil ile sorgulamayı sağlayan bir yapı. Yani HDFS de bir file düşünelim, örneğin bir cvs file. Biz bu tablo üzerinde SQL*Loader'dan hatırlayacağımız gibi delimiter'lar ile datayı HIVE üzerinde tanımlı bir db-table a map ederek , external table sorgular gibi SQL query atabiliyoruz. Tabiki aradaaki fark HIVE otomatik map-reduce yaparak sorguyu bize tabular formatda getiriyor.





HIVE command line :

$hive
Logging initialized using configuration in jar:file:/opt/cloudera/parcels/CDH-5.4.0-1.cdh5.4.0.p0.27/jars/hive-common-1.1.0-cdh5.4.0.jar!/hive-log4j.properties
WARNING: Hive CLI is deprecated and migration to Beeline is recommended.
hive> show databases;
OK
default
stage
test
Time taken: 0.483 seconds, Fetched: 3 row(s)
hive> 

Şimdi bir önceki yazıdaki SQOOP işlemini direk HIVE'a atacak şekilde güncelleyelim.

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

Komut çalıştığında aşağıdaki hatayı almanız muhtemel :)

....
15/07/30 10:50:42 INFO mapreduce.Job: Running job: job_1435734416202_0216
15/07/30 10:50:48 INFO mapreduce.Job: Job job_1435734416202_0216 running in uber mode : false
15/07/30 10:50:48 INFO mapreduce.Job:  map 0% reduce 0%
15/07/30 10:51:00 INFO mapreduce.Job:  map 100% reduce 0%
15/07/30 10:51:00 INFO mapreduce.Job: Job job_1435734416202_0216 completed successfully
15/07/30 10:51:01 INFO mapreduce.Job: Counters: 30
        File System Counters
                FILE: Number of bytes read=0
                FILE: Number of bytes written=144578
                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)=9366
                Total time spent by all reduces in occupied slots (ms)=0
                Total time spent by all map tasks (ms)=9366
                Total vcore-seconds taken by all map tasks=9366
                Total megabyte-seconds taken by all map tasks=9590784
        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)=117
                CPU time spent (ms)=9610
                Physical memory (bytes) snapshot=438435840
                Virtual memory (bytes) snapshot=2981601280
                Total committed heap usage (bytes)=614989824
        File Input Format Counters 
                Bytes Read=0
        File Output Format Counters 
                Bytes Written=128589824
15/07/30 10:51:01 INFO mapreduce.ImportJobBase: Transferred 122.6328 MB in 19.5767 seconds (6.2642 MB/sec)
15/07/30 10:51:01 INFO mapreduce.ImportJobBase: Retrieved 425984 records.
15/07/30 10:51:01 INFO manager.OracleManager: Time zone has been set to GMT
15/07/30 10:51:01 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM SQOOPERKANUL.SQOOPTEST3 t WHERE 1=0
...
15/07/30 10:51:01 INFO hive.HiveImport: Loading uploaded data into Hive

Logging initialized using configuration in jar:file:/opt/cloudera/parcels/CDH-5.4.0-1.cdh5.4.0.p0.27/jars/hive-common-1.1.0-cdh5.4.0.jar!/hive-log4j.properties
FAILED: SemanticException [Error 10072]: Database does not exist: SQOOPERKANUL

HIVE üzerinde tanımlı bir database vermediğinizde, hive-import username bilgisini database name olarak alıyor. Bu işlem sonucunda HIVE üzerinde sorgulama yaptığınızda datanın gelmediğini göreceksiniz.

$hdfs dfs -ls /user/hive/warehouse/sqooptest3 

Database bilgisini --hive-table parametresi ile verebiliyoruz arkadaşlar. Komutu güncellersek :

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

...
....
15/07/30 10:55:49 INFO hive.HiveImport: Loading uploaded data into Hive

Logging initialized using configuration in jar:file:/opt/cloudera/parcels/CDH-5.4.0-1.cdh5.4.0.p0.27/jars/hive-common-1.1.0-cdh5.4.0.jar!/hive-log4j.properties
OK
Time taken: 1.718 seconds
Loading data to table default.sqooptest3
Table default.sqooptest3 stats: [numFiles=4, totalSize=514359296]
OK
Time taken: 0.489 seconds


Tablomuz başarılı olarak geldi. HDFS de teyit edelim.

$hdfs dfs -ls /user/hive/warehouse/sqooptest3
Found 4 items
-rwxrwx--t   3 oracle hive  128589824 2015-07-30 10:25 /user/hive/warehouse/sqooptest3/part-m-00000
-rwxrwx--t   3 oracle hive  128589824 2015-07-30 10:50 /user/hive/warehouse/sqooptest3/part-m-00000_copy_1
-rwxrwx--t   3 oracle hive  128589824 2015-07-30 10:33 /user/hive/warehouse/sqooptest3/part-m-00001
-rwxrwx--t   3 oracle hive  128589824 2015-07-30 10:55 /user/hive/warehouse/sqooptest3/part-m-00001_copy_1


Farklı bir tablo adı vermek istersek --hive-table test.sqooptestdifferentdb şeklinde komutu çalıştırabiliriz.


Sıra geldi HIVE ile SQL like datayı sorgulamak bunun için HIVE arayüzü veya HUE yönetim arayüzü kullanılabilir.

HIVE arayüzünden şu şekilde yapabiliriz.

hive> select count(*) from sqooptest3;
Query ID = oracle_20150730105959_4c76c121-c57e-4ac7-9f7e-bd71527f1a21
Total jobs = 1
Launching Job 1 out of 1
Number of reduce tasks determined at compile time: 1
In order to change the average load for a reducer (in bytes):
  set hive.exec.reducers.bytes.per.reducer=<number>
In order to limit the maximum number of reducers:
  set hive.exec.reducers.max=<number>
In order to set a constant number of reducers:
  set mapreduce.job.reduces=<number>
Starting Job = job_1435734416202_0218,
....
.....
.....
2015-07-30 10:59:24,296 Stage-1 map = 50%,  reduce = 0%, Cumulative CPU 2.44 sec
2015-07-30 10:59:26,334 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 5.13 sec
2015-07-30 10:59:32,446 Stage-1 map = 100%,  reduce = 100%, Cumulative CPU 6.69 sec
MapReduce Total cumulative CPU time: 6 seconds 690 msec
Ended Job = job_1435734416202_0218
MapReduce Jobs Launched: 
Stage-Stage-1: Map: 2  Reduce: 1   Cumulative CPU: 6.69 sec   HDFS Read: 514382777 HDFS Write: 8 SUCCESS
Total MapReduce CPU Time Spent: 6 seconds 690 msec
OK
1703936
Time taken: 23.289 seconds, Fetched: 1 row(s)

Bir başka yol ise HUE arayüzünü kullanmak. HUE arayüzünden HADOOP'un çeşitli componentlerine erişim yapabiliriz.

HUE arayüzü:



HUE üzerinden Query Editors tabından HIVE editor seçilir. Ve sorgu gönderilir.




Source :


İyi çalışmalar.


No comments :

Post a Comment