用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這個版本,下載下來後就心裡打鼓
(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的經歷,期間也不是一帆風順的!