您的位置:首页 > 运维架构

sqoop导出工具

2016-07-26 18:04 351 查看
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"


执行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: