1. 程式人生 > >利用Sqoop將MySQL海量測試資料匯入HDFS和HBase

利用Sqoop將MySQL海量測試資料匯入HDFS和HBase

宣告:作者原創,轉載註明出處。

一、安裝Sqoop

1、下載sqoop,解壓、資料夾重新命名

wget http://mirror.bit.edu.cn/apache/sqoop/1.4.6/sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz

tar -zxvf sqoop-1.4.6.bin_hadoop-2.0.4.alpha.tar.gz  -C /root/hadoop/

mv sqoop-1.4.6.bin_hadoop-2.0.4.alpha sqoop-1.4.6

2、配置環境變數

vim /etc/profile
export
SQOOP_HOME=/root/hadoop/sqoop-1.4.6 export PATH = $PATH:$SQOOP_HME/bin

3、驗證

若正常顯示Sqoop版本資訊,則安裝配置成功:

[root@localhost ~ ] # sqoop version

二、建立資料庫和表

安裝MySql後,建立測試資料庫和測試表。

資料庫名:test

表結構:point(pointId int(10) PRIMARYKEY,pointName varchar(16),pointValue int(10))

三、shell指令碼生成測試資料

編寫Shell指令碼,此處的插入語句需要根據所建立的表結構來修改:

#!/bin/bash
i=1;
MAX_INSERT_ROW_COUONT=$1;
while(( $i <= $MAX_INSERT_ROW_COUNT ))
do
    mysql -uhive -phive test -e "insert into test.point(pointId,pointName,pointValue) values($i,'point"$i"',$i);"
    i=(($i+1))
done
exit 0

上述指令碼生成測試資料速度很慢,筆者生成1000萬條資料有如懷胎十月,歡迎建議,感謝!

四、MySql資料匯入

下載後解壓,將mysql-connector-java-5.1.45資料夾下的mysql-connector-java-5.1.44-bin.jar

包拷貝到$SQOOP_HOME/lib目錄下即可。

1、匯入HDFS

sqoop import --connect jdbc:mysql://localhost:3306/test --username hive --password hive  --table 
point
引數解析:

import:表示從傳統資料庫匯入資料到 HDFS/HIVE/HBASE等;

–connect:建立資料庫連線;

jdbc:mysql://localhost:3306/test:使用jdbc方式連線mysql資料庫,資料庫名為test;

–username:指定資料庫使用者名稱;

–password:指定資料庫密碼;

–table:指定表名

注意:

a)HDFS輸出目錄不能已經存在;

b)沒有指定-m或者splite-by時,即沒有指定並行度時,要匯入的表必須有主鍵,否則會出錯。

c)匯入到指定目錄:sqoop import –connect jdbc:mysql://localhost:3306/test –username hive –password hive –table point –target-dir /directory

如果沒有指定輸出目錄,預設在/user/root/下建立一個與表名一致的子目錄作為輸出目錄,匯入操作執行後,檢視HDFS中是否有匯入的檔案:

hdfs dfs -ls /user/root/point/

2、匯入HBase

sqoop import --connect jdbc:mysql://localhost:3306/test --username root --password root --table 
point --hbase-table HPoint --column-family info --hbase-row-key pointId --hbase-create-table
引數解析:

–hbase-table:指定匯入到HBase資料庫中某表;

–column-family:指定列族名;

–hbase-row-key:指定rowKey;

–hbase-create-table:表示按照引數建立HBase中的表;

最後,歡迎指正。喜歡的話,點個讚唄,請你吃蘋果。