溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

hadoop2.6.5+sqoop1.4.6環(huán)境部署與測試(三)

發(fā)布時(shí)間:2020-07-13 20:23:10 來源:網(wǎng)絡(luò) 閱讀:923 作者:琴里伊始 欄目:大數(shù)據(jù)

在hadoop環(huán)境搭建完成后,接下來就是要把sqoop整合進(jìn)來,使其可以利用hadoop和mysql-connector-java來從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. 對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變量值,使其對應(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程序來完成數(shù)據(jù)抽取,因此需要mysql-connector和mapreduce相應(yī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腳本來進(jìn)行數(shù)據(jù)抽取操作了,該腳本在$SQOOP_HOME/bin目錄下,使用方法如下:

#測試數(shù)據(jù)庫是否可以連接
sqoop list-databases --connect jdbc:mysql://localhost:3306/actionLog \
--username root --P (如果返回?cái)?shù)據(jù)庫名,則可以通過sqoop連接mysql數(shù)據(jù)庫)
#從MySQL庫中抽取數(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)說明:
--username 數(shù)據(jù)庫用戶名
-P 使用交互方式隱蔽和輸入數(shù)據(jù)庫用戶口令
--table 指定導(dǎo)出的庫表名
--columns 指定表中哪些列的數(shù)據(jù)被導(dǎo)出
--where 可以通過添加類似sql語句中where條件來篩選導(dǎo)出的記錄
--target-dir 導(dǎo)出的數(shù)據(jù)存放在hdfs上的路徑,這里的路徑值是hdfs上的路徑,并不是文件系統(tǒng)本身的絕對路徑

上述sqoop import命令是對mysql上actionLog庫中的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
...

(注:這里對/test/loginInfo下的文本內(nèi)容進(jìn)行了合并和重新存放,實(shí)際使用過程中該目錄下會(huì)產(chǎn)生多個(gè)以part-**格式命名的文本,文本內(nèi)容的格式是一致的)
現(xiàn)在數(shù)據(jù)已經(jīng)成功抽取并以文本方式存放到hdfs上了。下面就可以編寫mapreduce程序來對文本進(jìn)行分析了。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI