ORACLE連線HADOOP(3) - OLH載入HDFS資料

junsansi發表於2013-05-17
 

3、載入Hadoop資料到ORACLE

 

Oracle提供了專用的資料載入器,可以直接從HADOOP中載入資料到指定物件,該軟體包下載地址:Oracle Loader for Hadoop Release 2.1.0

 

直接解壓縮:

 
    [root@ora11g ~]# unzip oraloader-2.1.0.zip
 

這個壓縮包也是包中還有包的老路數,注意解壓縮後會有兩個壓縮包,分別對應不同的版本,具體情況可以參考README中的說明,這裡我們使用第一個壓縮包,繼續解壓:

 
     

    [root@ora11g ~]# unzip oraloader-2.1.0-1.x86_64.zip -d /usr/local/

     

    [root@ora11g ~]# chown -R oracle:oinstall /usr/local/oraloader-2.1.0-1

     

    [root@ora11g ~]# chmod -R 777 /usr/local/oraloader-2.1.0-1

      [root@ora11g ~]$ cp /usr/local/oraloader-2.1.0-1/jlib/*.jar /usr/local/hadoop-0.20.2/lib/
 

編輯grid使用者的環境變數:

 
    [root@ora11g ~]$ vi /home/grid/.bash_profile
 

增加下列兩項:

 
     

    export OLH_HOME=/usr/local/oraloader-2.1.0-1

      export OLH_JAR=${OLH_HOME}/jlib/oraloader.jar
 

提示,大家要理解,HADOOP相關的那三個環境變數也是要有的,我這裡因為延續前面的環境,因此就沒必要寫了。

 

切換到sqlplus命令列,建立一個表物件:

 
     

    SQL> conn scott/tiger

     

    Connected.

     

    SQL> create table t1(RN NUMBER,OBJECT_NAME VARCHAR2(20));

     

      Table created.
 

建立一個資料檔案:

 
     

    [grid@ora11g ~]$ more t1.dat

     

    1,a

     

    2,b

     

    3,c

      4,d
 

上傳至hdfs:

   
    [grid@ora11g ~]$ hadoop dfs -put t1.dat olh/
 

建立兩個配置檔案:

 
     

    [grid@localhost ~]$ more OLH/MyConf.xml

     

     

     

    <!--                          Input settings                             --&gt

     

     

       mapreduce.inputformat.class

     

       oracle.hadoop.loader.lib.input.DelimitedTextInputFormat

     

     

     

       mapred.input.dir

     

       olh

     

     

    <!--                          Output settings                             --&gt

     

     

        mapreduce.outputformat.class

     

        oracle.hadoop.loader.lib.output.JDBCOutputFormat

     

     

     

        mapred.output.dir

     

        olh_out

     

       

     

    <!--                          Table information                           --&gt

     

     

       oracle.hadoop.loader.loaderMapFile

     

       file:///home/grid/OLH/olh_t1.xml

     

       

     

    <!--                          Connection information                      --&gt

     

     

        oracle.hadoop.loader.connection.url

     

        jdbc:oracle:thin:@//192.168.30.244:1521/jssdb

     

     

     

        oracle.hadoop.loader.connection.user

     

        scott

     

        AvroSchemaAwareDBInputFormat wants this case sensitive!

     

                 (cause mapred.jdbc.username points here)

     

     

     

        oracle.hadoop.loader.connection.password

     

        tiger       

     

     
 

MyConf.xml的主要引數

                                                                                                                         

mapreduce.inputformat.class

指定輸入檔案的格式。除了文字檔案,還支援hive格式檔案。也可以是自定義的檔案格式。

mapred.input.dir

Hadoop裡輸入的資料檔案(含路徑)

mapreduce.outputformat.class

指定裝載的輸出方式

         

線上裝載:

       

OCIOutputFormat(*),JDBCOutputFormat

       

離線裝載:

       

DataPumptOutputFormat , DelimitedTextOutputFormat

mapred.output.dir

輸出目錄(同時也是LOG所在目錄)

oracle.hadoop.loader.loaderMapFile

檔案與表的對應關係,包括表名,欄位對應等

oracle.hadoop.loader.connection.url/user/pass

目標資料庫的連線資訊,包括url,使用者名稱,密碼

 

HDFS中的檔案與表之間的對映關係:

 
     

    [grid@localhost ~]$ more OLH/olh_t1.xml 

     

     

     

    SCOTT

     

    T1
     

    RN

     

    OBJECT_NAME

     
 

配置好之後,執行hadoop命令如下:

 
     

    [grid@localhost ~]$ hadoop jar ${OLH_JAR} oracle.hadoop.loader.OraLoader -conf OLH/MyConf.xml 

     

    Oracle Loader for Hadoop Release 2.1.0 - Production

     

     

    Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.

     

     

    13/05/16 16:19:49 INFO loader.OraLoader: Oracle Loader for Hadoop Release 2.1.0 - Production

     

     

    Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.

     

     

     

    13/05/16 16:19:49 INFO loader.OraLoader: Built-Against: hadoop-1.1.1 hive-0.10.0 avro-1.6.3 jackson-1.8.8

     

    13/05/16 16:19:51 INFO loader.OraLoader: oracle.hadoop.loader.loadByPartition is disabled because table: J1 is not partitioned

     

    13/05/16 16:19:51 INFO loader.OraLoader: oracle.hadoop.loader.enableSorting disabled, no sorting key provided

     

    13/05/16 16:19:51 INFO output.DBOutputFormat: Setting reduce tasks speculative execution to false for : oracle.hadoop.loader.lib.output.JDBCOutputFormat

     

    13/05/16 16:19:51 WARN loader.OraLoader: Sampler error: the number of reduce tasks must be greater than one; the configured value is 1 . Job will continue without sampled information.

     

    13/05/16 16:19:51 INFO loader.OraLoader: Sampling time=0D:0h:0m:0s:20ms (20 ms)

     

    13/05/16 16:19:51 INFO loader.OraLoader: Submitting OraLoader job OraLoader

     

    13/05/16 16:19:53 INFO input.FileInputFormat: Total input paths to process : 1

     

    13/05/16 16:19:56 INFO loader.OraLoader: map 0% reduce 0%

     

    13/05/16 16:20:31 INFO loader.OraLoader: map 100% reduce 0%

     

    13/05/16 16:20:40 INFO loader.OraLoader: map 100% reduce 33%

     

    13/05/16 16:20:46 INFO loader.OraLoader: map 100% reduce 100%

     

    13/05/16 16:20:48 INFO loader.OraLoader: Job complete: OraLoader (null)

     

    13/05/16 16:20:48 INFO loader.OraLoader: Counters: 17

     

            FileSystemCounters

     

                    FILE_BYTES_READ=98

     

                    FILE_BYTES_WRITTEN=228

     

                    HDFS_BYTES_READ=16

     

                    HDFS_BYTES_WRITTEN=1850

     

            Job Counters 

     

                    Data-local map tasks=1

     

                    Launched map tasks=1

     

                    Launched reduce tasks=1

     

            Map-Reduce Framework

     

                    Combine input records=0

     

                    Combine output records=0

     

                    Map input records=4

     

                    Map output bytes=84

     

                    Map output records=4

     

                    Reduce input groups=1

     

                    Reduce input records=4

     

                    Reduce output records=4

     

                    Reduce shuffle bytes=98

                      Spilled Records=8
 

提示插入了4條記錄,下面就切換到sqlplus中驗證一下吧:

 
     

    SQL> select * from t1;

     

     

            RN OBJECT_NAME

     

    ---------- --------------------

     

             1 a

     

             2 b

     

             3 c

               4 d
 

成功嘍。

 

另外,如果不想配置MyConf.xml,也可以將引數放到hadoop命令中執行,例如:

 
     

    $ hadoop jar \

     

        ${ORAHDFS_JAR} oracle.hadoop.loader.OraLoader  \

     

        -D mapreduce.inputformat.class=oracle.hadoop.loader.lib.input.DelimitedTextInputFormat \

     

        -D mapred.input.dir=olh \

     

        -D mapreduce.outputformat.class=oracle.hadoop.loader.lib.output.JDBCOutputFormat \

     

        -D mapred.output.dir=olh_out \

     

        -D oracle.hadoop.loader.loaderMapFile=file:///home/grid/OLH/loaderMap.xml \

     

        -D oracle.hadoop.loader.connection.url="jdbc:oracle:thin:@//192.168.30.244:1521/jssdb" \

     

        -D oracle.hadoop.loader.connection.user=SCOTT \

     

        -D oracle.hadoop.loader.connection.password=tiger \

          -publish
 

功能是相同的,有興趣的朋友可以自己試一下。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7607759/viewspace-761366/,如需轉載,請註明出處,否則將追究法律責任。

相關文章