Sqoop 從MySQL 導入導出HDFS

1.Sqoop 導入(import)HDFS

# 從MySQL導入到HDFS
# Caused by: java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
# 將127.0.0.1:3306 改爲 ip:3306
--table 是要導入HDFS中的表
--columns 選擇要導入的列,這裏選擇把fname,lname兩列導入的HDFS中。
--where 對數據進行過濾,只有滿足條件的才保存到HDFS中。
--target-dir 指定導入特定hdfs中的路徑 (默認導入到 /user/當前linux用戶名/mysql表名/)
--delete-target-dir 表示如果HDFS表存在,則把他刪除。
-m 指定通過幾個map reduce任務去執行 ,如果表比較大的話,建議使用多個map,默認的map爲4-m=1搬到hdfs上就是一個文件(前提是這個文件是小於128M,不然會拆分成多個block)

sqoop import --connect jdbc:mysql://192.168.18.126:3306/數據庫名 --username 用戶名 --password 密碼 --table 表名 --columns "fname,lname" --where "id>2" --delete-target-dir -m 1

2.Sqoop 導出(export)HDFS

# 從HDFS導出到MySQL
--columns 指定導出到 mysql 中的列
--input-fields-terminated-by hdfs文件分隔符
更新數據
--updata-key
--update-mode allowinsert 指定更新的模式爲可插入,默認爲 updateonly
當數據庫中字符爲空時的處理
--input-null-non-string '0' 當不是字符串的數據爲空的時候,用 0 替換
--input-null-string 'string' 當字符串爲空的時候,使用string 字符替換

# 前提是該表在MySQL中已經存在
sqoop export --connect jdbc:mysql://192.168.18.126:3306/數據庫名 --username 用戶名 --password 密碼 --table 表名 --columns "fname,lname" --input-fields-terminated-by ','  --export-dir 數據存在HDFS的文件下(/user/root/u) -m 1
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章