什麼是sqoop?
關於發音,困擾了我很久,一番類比之後,決定讀爲“絲庫坡”,英語老師看見了會不會瘋掉,呵呵,我就是這樣一個逗x。
書歸正傳:
Sqoop【SQL-To-Hadoop】是將關係型數據庫的數據(MySQL or Oracle or Postgre)導入到HDFS及其子系統中(Hive, HBase)的工具
sqoop有兩個版本,sqoop1和sqoop2,兩者特性不同,本文僅介紹sqoop1的使用,其實是精力有限
sqoop1.4.5的搭建過程如下:
1. 軟件的版本:
hadoop-1.0.3
zookeeper-3.4.4
hbase-0.94.0
sqoop-1.4.5
2. 基礎的Hadoop上搭建Hbase的步驟略過
3. 解壓壓縮包並重命名
cd /usr/local/
tar -xzvf sqoop-1.4.5.bin__hadoop-1.0.0.tar.gz
mv sqoop-1.4.5.bin__hadoop-1.0.0 sqoop
4. 將mysql的jdbc驅動,複製到sqoop項目的lib目錄下
使用的mysql驅動包版本: mysql-connector-java-5.1.34-bin.jar
注意: mysql connector 5.1.32以下版本mysql jar有bug
5. 重命名配置文件並指定其參數
cd /usr/local/sqoop/conf
mv sqoop-env-template.sh sqoop-env.sh
本次使用到了hadoop hbase及zookeeper,因此需要指定如下參數
export HADOOP_COMMON_HOME=/usr/local/hadoop
#指定hadoop-*-core.jar文件的位置
export HADOOP_MAPRED_HOME=/usr/local/hadoop
export HBASE_HOME=/usr/local/hbase
export ZOOCFGDIR=/usr/local/zookeeper/conf
6. 嘗試用sqoop連接到Mysql數據庫
#列出Mysql的dbName下的所有表
/usr/local/sqoop/bin/sqoop list-tables --connect jdbc:mysql://ip:3306/dbName --username XXX --password XXX
7. 數據導入
帶主鍵的全列操作
/usr/local/sqoop/bin/sqoop import --connect jdbc:mysql://ip:3306/dbName --username XXX --password XXX --table MysqlTableName --hbase-table HBaseTableName --column-family HBase_CF --hbase-create-table
帶主鍵的部分列操作
/usr/local/sqoop/bin/sqoop import --connect jdbc:mysql://ip:3306/dbName --username XXX --password XXX --table MysqlTableName --hbase-table HBaseTableName --columns column1,column2 --column-family HBase_CF --hbase-create-table
無主鍵的部分列導入,將其中一個設爲rowkey
/usr/local/sqoop/bin/sqoop import --connect jdbc:mysql://ip:3306/dbName --username XXX --password XXX --table MysqlTableName --hbase-table HBaseTableName --columns column1,column2 --column-family HBase_CF --hbase-row-key column1 --hbase-create-table
8.源碼中代碼結構圖如下
原理是利用mapreduce的job向hbase中寫入數據