利用sqoop完成資料匯入匯出
一.安裝SQOOP後可使用如下命令列出mysql資料庫中的所有資料庫,與檢驗是否安裝成功。
# sqoop list-databases --connect jdbc:mysql://localhost:3306/ --username root --password 123456
二. hive與mysql資料互導
一. 使用命令範例:
sqoop import --connect jdbc:mysql://192.168.137.1:3306/test --username root --password 123456 --table mytabs --fields-terminated-by '\t' -m 1 [--hive-import] --append --check-column 'id' --incremental append --last-value 5 --where 'id>2 and id<5'
引數詳解:
1.--fields-terminated-by '\t',表示將資料匯入到hadoop中列記錄之間的間隔符,預設符號為英文逗號。這裡通常使用製表符\t來間隔資料,避免資料再次從HDFS到入到關係資料庫時引起分割混亂
2.-m 1,是--num-mappers的縮寫,表示指定MapReduce的個數為1個(預設會自動開啟多個),sqoop轉化的MR程 序不包含reduce
3.--append,表示資料匯入到hadoop的方式為追加,否則不允許重複匯入
4.--check-column '主鍵列名' --incremental append --last-value 5,表示資料為增量匯入,根據--last-value的值來判斷,有大於這個值的記錄則執行匯入,否則不執行匯入操作
5.表示資料為增量匯入,根據--last-value的值來判斷, 有大於這個值的記錄則執行匯入,否則不執行匯入操作
6.--hive-import,表示將資料匯入到Hive中;
7.--where '',資料篩選條件
8.-e 或--query 'select * from table where id>5 and $CONDITIONS',自定義匯入資料的sql語句。使用自定義sql語句 需要注意:
① 使用了自定義sql就不能指定--table;
② 自定義sql語句的where條件中必須包含字串"$CONDITIONS",$CONDITIONS是一個變數,用於給多個map任務劃分任務範 圍;
③ 使用自定義sql時,如果通過引數-m指定多個map任務,由於自定義sql中可能存在多表查詢,因此必須使用引數“--split-by 表名.欄位名”指定多個map任務分割資料的根據欄位,如--split-by users.id;
9. --target-dir,顯示指定資料匯入到HDFS中的位置,預設儲存路徑為:/user/{當前使用者}/{表名}/表資料檔案,
如果匯入時需要將已存在的HDFS檔案刪除,可使用--delete-target-dir
二. hive資料匯入匯出資料到mysql
sqoop export -connect jdbc:mysql://localhost:3306/sqoop
-username root -password hadoop -table hive_student -export-dir
/hive/student/student --input-fields-terminated-by '\t'
三.mysql資料庫資料匯入hive中三.hbase與關係型資料庫資料互導sqoop import --connect jdbc:mysql://localhost:3306/sqoop -username root -password hadoop -table test -hive-import -m 1
從Mysql匯入到Hbase中
引數說明:
test 為mysql中要傳入到hbase表中的表名。
mysql_sqoop_test 傳入hbase中的表名
--column-family hbase表中的列族
--hbase-row-key 在hbase中那一列作為rowkey
使用範例:
sqoop import --connect jdbc:mysql://10.120.10.11:3306/sqoop
--username sqoop --password sqoop --table test --hbase-create-table
--hbase-table mysql_sqoop_test --column-family info --hbase-row-key id -m 1