hadoop2.5.2通過sqoop將數據從HDFS導入導出到oracle數據庫——sqoop的安裝和配置


  要想通過sqoop將數據同hadoop2.5.2的HDFS上導入導出到oracle數據庫中,需要明白的是有兩件事:1、sqoop可以跟oracle相互之間可以連接connection的通。2、sqoop跟hadoop之間可以相互訪問。其中最重要的就是第一件事情。下面我們主要講講第一件事情怎么實現:

第一件事情的實現:

   它的實現主要是在linux上安裝oracle的客戶端,能夠實現遠程訪問服務器的oracle數據庫即可。這一塊的內容主要可以參考:http://www.cnblogs.com/ljy2013/articles/4386530.html 這篇文章。

第二件事情跟hadoop之間的交互,由於sqoop是hadoop的一個組件,因此它們之間只需要配置一下即可。下面主要記載一下sqoop的安裝配置問題:

  sqoop采用的是sqoop1,其版本是1.4.5.首先從官網上下載sqoop:sqoop-1.4.5.bin__hadoop-2.0.4-alpha.tar

  sqoop2系列是:sqoop-1.99.X-bin-hadoop200.tar系列。這里sqoop1和sqoop2之間的區別有待進一步查詢。

安裝配置sqoop1的步驟:

  (1)解壓縮sqoop-1.4.5.bin__hadoop-2.0.4-alpha.tar文件

      mv  sqoop-1.4.5.bin__hadoop-2.0.4-alpha   sqoop-1.4.5

  (2)添加環境變量 vi  .bash_profile     (由於我的用grid用戶來操作hadoop的,因此將sqoop的環境變量配置到用戶的.bash_profile的環境變量文件當中)

      export SQOOP_HOME=$HOME/sqoop-1.4.5

      export LOGDIR=$SQOOP_HOME/logs

      export PATH=$PATH:$SQOOP_HOME/bin

  (3)配置文件

      進入到sqoop的解壓縮目錄/home/grid/sqoop-1.4.5/下:進入conf目錄下,執行:

        cp sqoop-env-template.sh sqoop-env.sh
        cp sqoop-site-template.xml sqoop-site.xml

    vi sqoop-env.sh,在sqoop-env.sh中添加如下代碼:

#Set path to where bin/hadoop is available  
export HADOOP_COMMON_HOME=/home/grid/hadoop-2.5.2   //這里是hadoop的安裝主目錄  
#Set path to where hadoop-*-core.jar is available  
export HADOOP_MAPRED_HOME=/home/grid/hadoop-2.5.2   //這里是hadoop的安裝主目錄 

#set the path to where bin/hbase is available //下面三項由於暫時沒有涉及,因此暫時不配置

#export HBASE_HOME=
#Set the path to where bin/hive is available 

#export HIVE_HOME=
#Set the path for where zookeper config dir is
#export ZOOCFGDIR=

   (4)復制相應的jar包

     1) 將/home/grid/hadoop-2.5.2/share/hadoop 文件夾下以及子目錄下所有各部分中的jar包都復制到/home/grid/sqoop-1.4.5/lib/下。主要包括:

        /home/grid/hadoop-2.5.2/share/hadoop/common/*.jar,

        /home/grid/hadoop-2.5.2/share/hadoop/common/lib/*.jar,

        /home/grid/hadoop-2.5.2/share/hadoop/hdfs/*.jar,

        /home/grid/hadoop-2.5.2/share/hadoop/hdfs/lib/*.jar,

        /home/grid/hadoop-2.5.2/share/hadoop/httpfs/tomcat/lib/*.jar, 

        /home/grid/hadoop-2.5.2/share/hadoop/mapreduce/*.jar,

        /home/grid/hadoop-2.5.2/share/hadoop/mapreduce/lib/*.jar,

        /home/grid/hadoop-2.5.2/share/hadoop/tools/*.jar,

        /home/grid/hadoop-2.5.2/share/hadoop/tools/lib/*.jar,

        /home/grid/hadoop-2.5.2/share/hadoop/yarn/*.jar,

        /home/grid/hadoop-2.5.2/share/hadoop/yarn/lib/*.jar.

     將這些jar包都復制到/home/grid/sqoop-1.4.5/lib/下。    

    2)將sqoop-1.4.5.jar和oracle驅動包ojdbc6.jar,該包在oracle的安裝目錄下D:\app\liujiyu\product\11.2.0\dbhome_1\jdbc\lib\目錄下。

  (5)此時,安裝配置工作已經完畢,下面就是測試是否能連上oracle數據庫:

    1)測試是否能遠程連接oracle數據庫,執行下面的代碼:

        sqoop list-databases --connect jdbc:oracle:thin:@//192.168.27.235:1521/ORCL --username DATACENTER -P      (oracle)

        sqoop list-databases  --connect jdbc:mysql://192.168.27.236:3306 --username liujiyu -P                  (mariadb)

        sqoop list-databases  --connect jdbc:mysql://192.168.19.88:3306 --username clear -P                      (mysql)

    2)將oracle數據庫導入到hdfs中

    注意:默認情況下會使用4個map任務,每個任務都會將其所導入的數據寫到一個單獨的文件中,4個文件位於同一目錄,本例中 -m 1表示只使用一個map任務。

      文本文件不能保存為二進制字段,並且不能區分null值和字符串值"null"。  

      執行下面的命令后會生成一個ENTERPRISE.java文件,可以通過ls ENTERPRISE.java查看,代碼生成是sqoop導入過程的必要部分,

      sqoop在將源數據庫中的數據寫到HDFS前,首先會用生成的代碼將其進行反序列化 

    sqoop import --connect jdbc:oracle:thin:@//192.168.27.235:1521/ORCL --username scott --password liujiyu  --table EMP  -m 1 --target-dir /user/sqoop/test 

           

 

    若出現上圖的信息,則表明執行成功。通過查看內容來驗證:

    hadoop fs -cat  /user/sqoop/test/part-m-00000

 

    3)將HDFS中的數據導入到oracle,上面是將oracle的表導入到hdfs中,下面就可以將剛剛導入到hdfs中的表反向導入到oracle的一個新的空表中。首先必須要在oracle中創建一個空表empty。下面將hdfs中的表導入到oracle中的empty表中。

    sqoop export --connect jdbc:oracle:thin:@//192.168.27.235:1521/ORCL --username scott --password liujiyu --table empty --export-dir '/liujiyu/nihao/part-m-00000' --fields-terminated-by ':' -m  1

    執行的結果跟上面類似。

 

 

      

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM