sqoop的導出工具是把HDFS上文件中的數據導出到mysql中
mysql中的表
現在在linux上創建一個文件,並把這個文件上傳到hdfs上
cat person.txt 7,no7,77 8,no8,88 $ hadoop fs -mkdir person_export $ hadoop fs -put -f person.txt person_export $ hadoop fs -ls person_export Found 1 items -rw-r--r-- 3 18232184201 supergroup 18 2016-07-26 17:16 person_export/person.txt
一、export-dir
使用export-dir來指定導出的目錄,會導出該目錄下的所有文件。
$ sqoop export --connect jdbc:mysql://localhost:3306/test --username root --password 123456 --table person -m 1 --export-dir person_export
最終的效果可以在mysql中的表體現:
二、插入中文亂碼問題
hdfs上的內容:
3,第7個,77 4,第8個,88
再次執行上面一樣的export命令,在mysql中就會產生亂碼:
可以使用下面的命令來解決亂碼問題:
sqoop export --connect "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8" --username root --password 123456 --table person -m 1 --export-dir person_export
完成之后mysql的記錄是:
三、update-key update-mode
需求hdfs文件中存在的記錄做更新,不存在的記錄則插入
hdfs上的文件:
,第10個,100 ,第11個,110 3,第3個,30 4,第4個,40
執行命令:
sqoop export --connect "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8" --username root --password 123456 --table person -m 1 --export-dir person_export --update-key id --update-mode allowinsert
需要注意的是,update-mode有兩種,一種是uodateonly,一種是allowinsert
執行完成之后,mysql中的數據:
四、input-fields-terminated-by
input-fields-terminated-by可以用來指定hdfs上文件的分隔符,默認是逗號
HDFS上的數據格式(以空格切分):
aaa 100 bbb 110
執行下面的命令來導出:
sqoop export --connect "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8" --username root --password 123456 --table person -m 1 --export-dir person_export --input-fields-terminated-by ' '
導出的結果是:
五、columns
使用colums來指定導出到mysql的列
hdfs上的數據格式:
aaa
bbb
執行下面的命令:
sqoop export --connect "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8" --username root --password 123456 --table person -m 1 --export-dir person_export --input-fields-terminated-by ' ' --columns="id,name"
執行結果: