在hadoop環(huán)境搭建完成后,接下來(lái)就是要把sqoop整合進(jìn)來(lái),使其可以利用hadoop和mysql-connector-java來(lái)從MySQL中抽取數(shù)據(jù)并轉(zhuǎn)存到hdfs上。
1. 將得到的sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz解壓到/usr/local/下,并建立/usr/local/sqoop軟鏈接。
mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz /usr/local/ tar -xvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz ln -s /usr/local/sqoop-1.4.6.bin__hadoop-2.0.4-alpha /usr/local/sqoop
2. 將/usr/local/sqoop,/usr/local/sqoop-1.4.6.bin__hadoop-2.0.4-alpha屬主屬組修改為hadoop,保證hadoop用戶可以使用:
chown -R hadoop:hadoop /usr/local/sqoop-1.4.6.bin__hadoop-2.0.4-alpha chown -R hadoop:hadoop /usr/local/sqoop
3. 配置SQOOP_HOME環(huán)境變量,在/etc/profile中添加和修改如下記錄:
export SQOOP_HOME=/usr/local/sqoop export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$SQOOP_HOME/bin:$PATH
4. 對(duì)sqoop進(jìn)行配置,保證其可以整合到hadoop中:
1)進(jìn)入到$SQOOP_HOME/conf目錄下,復(fù)制一份sqoop環(huán)境配置腳本sqoop-env-template.sh到當(dāng)前目錄,并重命名為sqoop-env.sh:
cd $SQOOP_HOME/conf cp sqoop-env-template.sh sqoop-env.sh
2)修改sqoop-env.sh的HADOOP_COMMON_HOME和HADOOP_MAPRED_HOME變量值,使其對(duì)應(yīng)于相應(yīng)的hadoop文件路徑:
export HADOOP_COMMON_HOME=/usr/local/hadoop export HADOOP_MAPRED_HOME=/usr/local/hadoop/share/hadoop/mapreduce
3)sqoop需要連接mysql和運(yùn)行mapreduce程序來(lái)完成數(shù)據(jù)抽取,因此需要mysql-connector和mapreduce相應(yīng)庫(kù)文件的支持,請(qǐng)將mysql-connector-java包和$HADOOP_HOME/share/hadoop/mapreduce/下的所有jar包復(fù)制到$SQOOP_HOME/lib目錄下:
cp $HADOOP_HOME/share/hadoop/mapreduce/*.jar $SQOOP_HOME/lib/ cp ~/mysql-connector-java-5.1.32-bin.jar $SQOOP_HOME/lib/ chown -R hadoop:hadoop $SQOOP_HOME/lib/
5. 下面可以使用sqoop腳本來(lái)進(jìn)行數(shù)據(jù)抽取操作了,該腳本在$SQOOP_HOME/bin目錄下,使用方法如下:
#測(cè)試數(shù)據(jù)庫(kù)是否可以連接 sqoop list-databases --connect jdbc:mysql://localhost:3306/actionLog \ --username root --P (如果返回?cái)?shù)據(jù)庫(kù)名,則可以通過(guò)sqoop連接mysql數(shù)據(jù)庫(kù))
#從MySQL庫(kù)中抽取數(shù)據(jù)到hdfs上 sqoop import --connect jdbc:mysql://hadoop-test-nn:3306/actionLog \ --username root -P \ --table log \ --columns "logger_id,time" \ --where 'action = "login"' \ --target-dir /test/loginInfo 選項(xiàng)說(shuō)明: --username 數(shù)據(jù)庫(kù)用戶名 -P 使用交互方式隱蔽和輸入數(shù)據(jù)庫(kù)用戶口令 --table 指定導(dǎo)出的庫(kù)表名 --columns 指定表中哪些列的數(shù)據(jù)被導(dǎo)出 --where 可以通過(guò)添加類(lèi)似sql語(yǔ)句中where條件來(lái)篩選導(dǎo)出的記錄 --target-dir 導(dǎo)出的數(shù)據(jù)存放在hdfs上的路徑,這里的路徑值是hdfs上的路徑,并不是文件系統(tǒng)本身的絕對(duì)路徑
上述sqoop import命令是對(duì)mysql上actionLog庫(kù)中的log表進(jìn)行數(shù)據(jù)抽取,該表的表結(jié)構(gòu)如下:
mysql> desc log; +--------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+--------------+------+-----+---------+----------------+ | log_id | bigint(20) | NO | PRI | NULL | auto_increment | | name | varchar(255) | YES | | NULL | | | action | varchar(255) | YES | | NULL | | | logger_id | varchar(255) | YES | | NULL | | | time | varchar(255) | YES | | NULL | | +--------------+--------------+------+-----+---------+----------------+
因?yàn)橹付藢?dǎo)出列為logger_id、time。因此導(dǎo)出到hdfs上的數(shù)據(jù)如下:
[hadoop@hadoop-test-nn lib]$ hdfs dfs -ls /test/loginInfo Found 1 items -rw-r--r-- 2 hadoop supergroup 211825 2017-08-02 16:04 /test/loginInfo/userLoginInfo.txt [hadoop@hadoop-test-nn lib]$ hdfs dfs -cat /test/loginInfo/userLoginInfo.txt wanger,2017-07-27 14:21:12 zhangsan,2017-07-27 14:37:16 james,2017-07-27 15:27:13 ...
(注:這里對(duì)/test/loginInfo下的文本內(nèi)容進(jìn)行了合并和重新存放,實(shí)際使用過(guò)程中該目錄下會(huì)產(chǎn)生多個(gè)以part-**格式命名的文本,文本內(nèi)容的格式是一致的)
現(xiàn)在數(shù)據(jù)已經(jīng)成功抽取并以文本方式存放到hdfs上了。下面就可以編寫(xiě)mapreduce程序來(lái)對(duì)文本進(jìn)行分析了。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。