列出MySQL中有那些數據庫mysql
sqoop list-databases \ --connect jdbc:mysql://hadoop01:3306/ \ --username hadoop \ --password root \
列出MySQL中的數據庫有哪些表sql
sqoop list-tables \ --connect jdbc:mysql://hadoop01:3306/mysql \ --username hadoop \ --password root \
在hive中建立一個跟MySQL數據庫表中同樣的表數據庫
create-hive-table --connect jdbc:mysql://hadoop01:3306/test --username hadoop --password root --table book --hive-table test_hk
語法:sqoop import (generic-args) (import-args)
經常使用參數app
-connect jdbc 鏈接地址 --connection-manager 鏈接管理者 --driver 驅動類 --hadoop-mapred-home $HADOOP_MAPRED_HOME --help help 信息 -P 從命令行輸入密碼 -m 指定maptask的個數,指定maptask的並行度 --target-dir 指定導出數據在hdfs上的存儲目錄 --fields-terminated-by 指定每條記錄中字段之間的分隔符 --where 指定查詢sql的where條件 --query 指定sql查詢 --columns 指定查詢的列 (不指定默認導出全部的列) --password 密碼 --username 帳號 --verbose 打印流程信息 --connection-param-file 可選參數
MySQL ---> HDFSide
#不指定分隔符和路徑 sqoop import \ --connect jdbc:mysql://hadoop01:3306/test \ #指定鏈接 --username hadoop \ #指定MySQL的用戶名 -password root \ #指定MySQL的密碼 --table book \ #指定導出的MySQL的表 -m 1 #啓動一個maptask #ps:若是沒有指定文件的存儲目錄,那麼默認的會保存在hdfs上的/user/用戶/book 目錄中,默認的字段的分隔符逗號。 #指定導入路徑和分割符 sqoop import \ --connect jdbc:mysql://hadoop01:3306/test \ --username hadoop \ --password root \ --table book \ --target-dir /user/hadoop/book \ --fields-terminated-by '\t' \ -m 1 #導入where的結果 sqoop import \ --connect jdbc:mysql://hadoop01:3306/test \ --username hadoop \ --password root \ --where "bid>2" \ --table book \ --target-dir /user/hadoop/book1 \ -m 1 ps:where後的條件,用雙引號,若是條件的字段爲string則裏面使用單引號 #導入query結果數據 sqoop import \ --connect jdbc:mysql://hadoop01:3306/test \ --username hadoop \ --password root \ --target-dir /user/hadoop/book3 \ --query 'select * from book where 1=1 and $CONDITIONS' \ --split-by bid \ #指定maptask切分的列,列的值.hashcode/maptask的個數 --fields-terminated-by '\t' \ -m 1 ps: 1.query外層使用單引號,SQL 語句當中的條件使用雙引號,不然會報錯; 2.在使用query時,必須有where子句,而且必須加入 and $CONDITIONS ,不然會報錯 3.--query不能和--where、--columns一塊兒使用的 4.--query sql語句,放入雙引號中須要加轉義
MySQL ---> hive
Sqoop導入關係型數據到hive,的過程是先導入hdfs中,而後在load到hive。oop
#普通導入 sqoop import \ --connect jdbc:mysql://hadoop01:3306/test \ --username hadoop \ --password root \ --table book \ --hive-import \ -m 1 ps:導入數據到hive表中時,默認在default庫下,表名和MySQL導入的表名同樣。,默認採用'\u0001'分隔。 #全量集 sqoop import \ --connect jdbc:mysql://hadoop01:3306/test \ --username hadoop \ --password root \ --table book \ --fields-terminated-by '\t' \ #列分割符 --lines-terminated-by '\n' \ #行分隔符 ,默認也是\n --hive-import \ --hive-overwrite \ #覆蓋導入 --create-hive-table \ #建立表(默認也會自動建立表) --hive-table test.book \ #hive的表名 --delete-target-dir #刪除中間存放的臨時目錄 ps:表會自動建立,可是庫不會,因此在執行語句前,必定要保證hive的數據庫存在,不然會把報錯。 #增量導入,增量數據導入僅導入新添加的行 #它須要添加 'incremental' , 'check-column', 和 'last-value' 選項來執行增量導入 sqoop import \ --connect jdbc:mysql://hadoop01:3306/test \ --username hadoop \ --password root \ --table book \ --target-dir /user/hadoop/book \ --incremental append \ #指定是增量導入 --check-column bid \ #指定增量的列 --last-value 500 \ #指定上一次的結束的列的值,(是從>500開始)一直到末尾 -m 1 ps: 1.--incremental有兩個值,append必須指定增量的列,指定使用--check-column(通常是MySQL的主鍵);lastmodified,最後一次修改表的時間 2.增量備份若是想要導入hive中,只能指定--target-dir,導入到存放表的目錄下,默認的hive不支持增量導入(即不能添加--hive-import)
MySQL ---> hbase命令行
#sqoop import \ --connect jdbc:mysql://hadoop02:3306/mysql \ --username root \ --password root \ --table help_keyword \ --hbase-table new_help_keyword \ --column-family person \ --hbase-row-key help_keyword_id #字段解釋 --connect jdbc:mysql://hadoop04:3306/mysql 表示遠程或者本地 Mysql 服務的 URI --hbase-create-table 表示在 HBase 中創建表。 --hbase-table new_help_keyword 表示在 HBase 中創建表 new_help_keyword。 --hbase-row-key help_keyword_id 表示hbase表的rowkey是mysql表的help_keyword_id 字段。 --column-family person 表示在表 new_help_keyword 中創建列族 person。 --username 'root' 表示使用用戶 root 鏈接 mysql。 --password 'root' 鏈接 mysql 的用戶密碼 --table help_keyword 表示導出 mysql 數據庫的 help_keyword 表。
語法:sqoop export (generic-args) (export-args)
經常使用參數:線程
--direct 快速導入 --export-dir HDFS 導出數據的目錄 -m,--num-mappers 都少個 map 線程 --table 導出哪一個表 --call 存儲過程 --update-key 經過哪一個字段來判斷更新 --update-mode 插入模式,默認是隻更新,能夠設置爲 allowinsert. --input-null-string 字符類型 null 處理 --input-null-non-string 非字符類型 null 處理 --staging-table 臨時表 --clear-staging-table 清空臨時表 --batch 批量模式
HDFS ---> MySQLcode
sqoop export \ --connect jdbc:mysql://hadoop01:3306/test \ --username hadoop \ --password root \ --table book \ --export-dir /sqoopdata \ --fields-terminated-by ','
hive----> MySQLhadoop
sqoop export \ --connect jdbc:mysql://hadoop01:3306/test \ --username hadoop \ --password root \ --table book \ --export-dir /user/hive/warehouse/uv/dt=2011-08-03 \ --input-fileds-terminated-by '\t'
hbase---->MySQL
默認的沒有命令直接將hbase中的數據導入到MySQL,由於在hbase中的表數據量一般比較大,若是一次性導入到MySQL,可能致使MySQL直接崩潰。
可是能夠用別的辦法進行導入: