1. 程式人生 > >用Sqoop2在Mysql和hadoop匯入匯出資料

用Sqoop2在Mysql和hadoop匯入匯出資料

        最近在做使用者刷贊排除邏輯的時候,需要結合nginx的access.log日誌和Mysql中的部分記錄聯合查詢才能做到,之前的nginx日誌一直存放在hadoop中,mysql的資料則沒有匯入到hadoop中去過,要搞定這事還得將Mysql中的一些表匯入到HDFS中去才成。雖說Sqoop的大名早已經聞名遐邇了,但是到底沒有在生產環境中試用過,這回倒是一個很好的實踐機會。

        線上跑的Hadoop版本為社群版本的hadoop2.2.0,一看Sqoop2最新版本是sqoop-1.99.5-bin-hadoop200.tar.gz,但是它是依賴的hadoop2.6.0這個版本,下載下來後就心裡打鼓

,擔心版本匹配不上,試了一把後果不其然,不行,遂下載Sqoop2的1.99.5原始碼下來把依賴修改為Hadoop2.2.0,編譯倒是能過,但是最終執行的時候還是在報sqlite相關的錯誤,一時沒有解決不掉,就考慮用老的版本來試一試了,sqoop-1.99.3-bin-hadoop100.tar.gz這個版本我是試用過的,但是該版本功能過於簡單了,而1.99.4這個版本的功能剛剛好滿足我的要求了,就下載sqoop-1.99.4-bin-hadoop200.tar.gz 這個來試一試。

      (1)安裝環境

         作業系統:Linux(centos6.5)

         JDK版本:1.7.0_45


         Hadoop版本:hadoop2.2.0

         Sqoop2版本:sqoop-1.99.4-bin-hadoop200

         hadoop安裝目錄:/home/hadoop/hadoop-2.2.0

         Sqoop2安裝目錄:/home/hadoop/sqoop-1.99.4-bin-hadoop200

         Hadoop和Sqoop都是同一個使用者hadoop下面,hadoop使用者的的家目錄:/home/hadoop

       (2)修改Sqoop2的配置檔案

          1、首先修改配置檔案/home/hadoop/sqoop-1.99.4-bin-hadoop200/server/conf/sqoop.properties指定hadoop的配置檔案所屬路徑。

          將原來的如下配置:

# Hadoop configuration directory
org.apache.sqoop.submission.engine.mapreduce.configuration.directory=/etc/hadoop/conf/
             修改為:
# Hadoop configuration directory
org.apache.sqoop.submission.engine.mapreduce.configuration.directory=/home/hadoop/hadoop-2.2.0/etc/hadoop/

               2、修改配置檔案/home/hadoop/sqoop-1.99.4-bin-hadoop200/server/conf/catalina.properties。

              這裡即時把/home/hadoop/hadoop-2.2.0/share/hadoop下全部的*.jar包加入到sqoop2的類路徑中去。

          將原來的如下配置:

common.loader=${catalina.base}/lib,${catalina.base}/lib/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar,${catalina.home}/../lib/*.jar,/usr/lib/hadoop/*.jar,/usr/lib/hadoop/lib/*.jar,/usr/lib/hadoop-hdfs/*.jar,/usr/lib/hadoop-hdfs/lib/*.jar,/usr/lib/hadoop-mapreduce/*.jar,/usr/lib/hadoop-mapreduce/lib/*.jar,/usr/lib/hadoop-yarn/*.jar,/usr/lib/hadoop-yarn/lib/*.jar

             修改為:

common.loader=${catalina.base}/lib,${catalina.base}/lib/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar,${catalina.home}/../lib/*.jar,/home/hadoop/hadoop-2.2.0/share/hadoop/common/*.jar,/home/hadoop/hadoop-2.2.0/share/hadoop/common/lib/*.jar,/home/hadoop/hadoop-2.2.0/share/hadoop/hdfs/*.jar,/home/hadoop/hadoop-2.2.0/share/hadoop/hdfs/lib/*.jar,/home/hadoop/hadoop-2.2.0/share/hadoop/mapreduce/*.jar,/home/hadoop/hadoop-2.2.0/share/hadoop/mapreduce/lib/*.jar,/home/hadoop/hadoop-2.2.0/share/hadoop/tools/*.jar,/home/hadoop/hadoop-2.2.0/share/hadoop/tools/lib/*.jar,/home/hadoop/hadoop-2.2.0/share/hadoop/yarn/*.jar,/home/hadoop/hadoop-2.2.0/share/hadoop/yarn/lib/*.jar,/home/hadoop/hadoop-2.2.0/share/hadoop/httpfs/tomcat/lib/*.jar

       (3)修改環境變數

由於sqoop2和Hadoop的使用者都為hadoop,並且hadoop使用者的home目錄為:/home/hadoop,所以直接修改/home/hadoop/.bash_profile在檔案末尾追加如下內容即可:

export SQOOP_HOME=/home/hadoop/sqoop-1.99.4-bin-hadoop200  
export PATH=$SQOOP_HOME/bin:$PATH  
export CATALINA_HOME=$SQOOP_HOME/server  
export LOGDIR=$SQOOP_HOME/logs

  當然完成上述修改後需要在hadoop使用者下執行命令來讓配置即可生效:

source  /home/hadoop/.bash_profile

       (4)小試sqoop2

     至此可以來試一試sqoop2可用不可用,進入目錄/home/hadoop/sqoop-1.99.4-bin-hadoop200/bin下執行下述命令體驗下。

     啟動sqoop2的服務:./sqoop2-server start

    進入Client的shell環境:./sqoop2-shell

    Client連線到服務端:set server --host 127.0.0.1 --port 12000 --webapp sqoop

        其它建立link、job可以參考:

           SQOOP2不知道何故,我死活找不到從mysql匯出資料到HDFS的時候,怎麼去指定欄位的分隔符號,求助百度、谷歌、官網都沒有用!悲劇了,所以我不得不另謀出路,雖說此時此刻可以去看看Sqoop2的原始碼,看看是否有地方設定分隔符號,但是最快速的辦法莫過於試用另外的版本,比如1.4.5,肯定是可以的,否則SQOOP也不能這麼有名了。

          且看我試用Sqoop1.4.5的經歷,期間也不是一帆風順的!