1. 程式人生 > >sqoop 從 MySQL 匯入資料到 hdfs 中

sqoop 從 MySQL 匯入資料到 hdfs 中

MYSQL 資料匯入到 HDFS

sqoop import 
--connect jdbc:mysql://192.168.66.4:3306/networkmanagement \
--username sendi \
--password 1234 \
--table people \
--columns "name,age" \
--where "age>18" \
--target-dir hdfsPeople \
--delete-target-dir \
-m 1
  • –table 是要匯入HDFS中的表
  • –columns 選擇要匯入的列,這裡選擇把name與age兩列匯入的HDFS中。
  • –where 對資料進行過濾,只有滿足條件的才儲存到HDFS中。
  • –target-dri 指定儲存在HDFS上的表名
  • –delete-target-dir 表示如果HDFS表存在,則把他刪除。
  • -m 說明使用多少個map進行資料遷移,如果表比較大的話,建議使用多個map,預設的map為4個

從 HDFS 匯出到 MYSQL

1、首先先在MySQL中建立表
2、重複的記錄要刪除
2、export path 指定匯出的目錄
4、–updata-key

#### 在 mysql 下建立表

create table customertest(id int,name varchar(20
),last_mod timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);

執行匯出語句

sqoop import 
--connect jdbc:mysql://192.168.66.4:3306/networkmanagement?useUnicode=true&characterEncoding=utf-8" \
--username sendi \
--password 1234 \
--table people \
--columns "id,name" \
--input-fields-terminated-by ','
\ --export-dir path \ -m 1
  • columns 指定匯出到 mysql 中的列

更新資料

  • –updata-key
  • –update-mode allowinsert 指定更新的模式為可插入,預設為 updateonly

分隔符

  • input-fields-terminated-by hdfs檔案分隔符

當資料庫中字元為空時的處理

  • –input-null-non-string ‘0’ 當不是字串的資料為空的時候,用 0 替換
  • –input-null-string ‘string’ 當字串為空的時候,使用string 字元替換