Sqoop進行資料匯入匯出
Sqoop是用來進行資料匯入匯出的工具,一般用在hadoop這個框架中,常用的應用場景有將mysql資料庫中的資料匯入HDFS或者Hive、Hbase,或者從後者中匯出到關係型資料庫中,下面將進行幾段程式碼的演示匯入和匯出的過程。
將mysql中的資料匯入到hadoop叢集上(HDFS):
首先將指令碼命令貼出:
./sqoop import --connect jdbc:mysql://localhost/test --username root --password lakers --table persons -m 1
故名思議,
username:資料庫的使用者名稱
password:使用者名稱對應的密碼
table:資料中需要匯入的表名
-m :啟動mapreduce的個數。
這裡實現的是將一個表(test)的全部資料匯入到hdfs中,其中可以設定匯入到hdfs的路徑 通過引數--target-dir <dir>設定,其他的還有很多的引數設定可以通過去官網檢視:http://sqoop.apache.org/docs/1.4.6/SqoopUserGuide.html#_importing_data_into_hive_2
將test表中的某些資料匯入到HDFS中:
./sqoop import --connect jdbc:mysql://localhost/test --username root --password lakers --query 'select
ID,name from persons where $CONDITIONS' --target-dir /persons -m 1
將mysql資料匯入Hive:
傳統地將mysql中的資料匯入hdfs有中方法就是:
1 將mysql資料匯出到本地
2 在Hive中建立表格式
3 將匯出在本地的資料匯入到Hive中
但是用了sqoop之後我們可以一步完成上面的操作。
首先將mysql的資料匯入到Hive上,其實也是匯入到hdfs上,但是有個好處是我們可以直接通過Hive去處理資料,得到我們想要的結果,下面的shell指令碼和上面的指令碼很相似。
./sqoop import --connect jdbc:mysql://localhost/test
--username root --password lakers --table persons -m 1 --hive-import
這裡有個需要說明的是,我們將mysql資料匯入到Hive中的時候是不需要去建立表,在匯入過程中sqoop會自動解析資料,幫我們建立對應格式的表結構。這裡不得不說省了很大的功夫,畢竟建立表結構很麻煩的,尤其是表字段很多的情況下。
和上面的區別就是最後加了--hive-import 同時也是可以通過引數來設定匯入的目錄,從官網查詢。
Mysql中資料匯入到HBase:
./sqoop import --connect jdbc:mysql://localhost/test --username root --password
lakers --table persons -m 1 --hbase-create-table --hbase-table person2 --column-family info --hbase-row-key sid
--hbase-create-table :自動建立hbase表
--hbase-table :表明
--column-family:列簇名
--hbase-row-key:指定rowkey對應Mysq中的鍵
注:目前還不能直接將HBase中資料直接匯出到Mysql中,可以先匯出到本地,然後再匯入Mysql
將Hive中的資料匯出到mysql中:
./sqoop export --connect jdbc:mysql://localhost/test --username root --password lakers -m 1 --table personcopy --export-dir
/hive/warehouse/persons --input-fields-terminated-by '\0001'
--export-dir:匯出資料的目錄
--input-fileds-terminated-by : 欄位之間的分割符
注意:
這裡需要注意的是,我們在從mysql匯入Hive中的時候是不需要建立表結構的,但是我們在將Hive的資料匯出到Mysql中的時候是需要自己建立表結構的,很簡單的原因,比如我們Mysql 的一個varchar(50)或者varchar(60)這種會自動在Hive中解析為String型別,但是相反的是,將Hive中的String型別匯入到Mysql中就不知道是解析為varchar(?),所以在這個時候我們需要手動的去建立對應的表結構!