一、拷贝mysql数据表到hdfs上
1.确保mysql可以远程连接, 防火墙等已关闭或开端口, hadoop已启动, hdfs可访问
2.确保hdfs上不存在目标文件夹, sqoop会自动生成文件夹, 若已存在则报错,要么加上--delete-target-dir
3.命令如下, 参数自行修改, mysql所在IP为192.168.203.7, 用户名密码为root, Mysql数据表teacher, hdfs目录为/mydb//teacher
命令一、一般上传
sqoop import --connect jdbc:mysql://192.168.203.7:3306/test --username root --password root --columns id,name --table teacher --target-dir /mydb/teacher -m 1 --delete-target-dir
--table teacher:连接的是哪个表
--target-dir /teacher:表示输出路径
-m 1:表示指定主键--输出一个文件-指定map个数
--delete-target-dir:删除已经存在的输出文件
命令二、使用sql语句
sqoop import --connect jdbc:mysql://192.168.203.7:3306/test --username root --password root --query 'select * from teacher where id>3 and $CONDITIONS' --target-dir /mydb/teacher -m 1 --delete-target-dir
(将SQL数据库test中的teacher表中id大于3的数据存入hdfs上的teacher目录上)
命令三、追加数据到已存在表中之id
sqoop import --connect jdbc:mysql://192.168.203.7:3306/test --username root --password root --table teacher --target-dir /mydb/teacher -m 1 --check-column id --incremental append --last-value 7
将SQL数据库test中的teacher表中id大于7的数据追加hdfs上的teacher目录上
命令四、加数据到已存在表中之时间:lastmodified
sqoop import --connect jdbc:mysql://192.168.203.72:3306/test --username root --password 123 --table teacher --target-dir /teacher1 -m 1 --check-column last_modified --incremental lastmodified --last-value '2018-10-04 16:37:31'
前提:你表中的数据有datetime类型的字段,安装这个字段追加。
将SQL数据库test中的teacher表中last_modified大于'2018-10-04 16:37:31'的数据加hdfs上的teacher1目录上,
用时间追加的数据保存在不是一个文件中
二、导入HDFS数据到MySQL数据库表中
- 在mysql中创建对应字段的数据库表,测试用student
- HDFS中的文本文件以,作分隔符分割字段,文件名student.txt
- 命令如下,参数依次为mysql数据库地址,用户名密码,mysql数据库表名,HDFS文件所在位置,分隔符
sqoop export --connect jdbc:mysql://192.168.203.7:3306/test --username root --password root --table student --export-dir /student.txt --fields-terminated-by ',';
三、通过sqoop查看本地MySQL信息
sqoop list-tables -connect jdbc:mysql://192.168.203.7:3306/test --username root --password root
表示查看test这个数据库中的所有表信息,如下图
sqoop list-databases -connect jdbc:mysql://192.168.203.7:3306/ --username root --password root
表示查看mysql所有数据库,如下图类似