sqoop导出操作
HDFS上的数据/user/root/empdata
001,15012454745,zhangsan@163.com
002,13512454746,lisi@wolfcode.cn
003,15812454747,wangwu@qq.com
1.修改远程登录mysql的配置
use mysql;
select host from user where user='root';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
flush privileges;
2.在数据库创建如下表:
create table `emp_from_hdfs` (
`id` int (11),
`phno` varchar (60),
`email` varchar (90)
);
3.在导入导出的时候尽量使用IP(不要用域名)来代表mysql的节点位置。
sqoop export \
--connect jdbc:mysql://hdp01:3306/userdb \
--username root \
--password root \
--table emp_from_hdfs \
--export-dir /user/root/empdata \
--m 1
sqoop导入操作
##默认导出的数据到/user/root/emp
## --m 1 表示切片数量为1,也就是只是用了一个maptask
##默认导入的数据是导入到 /user/root/xx表/part-m-00000
sqoop import \
--connect jdbc:mysql://hdp01:3306/userdb \
--username root \
--password root \
--table emp \
--m 1
## target-dir指定导入的数据存放到hdfs的某个位置
sqoop import \
--connect jdbc:mysql://hdp01:3306/userdb \
--username root \
--password root \
--table emp \
--target-dir /myemp \
--m 1
##当maptask为2时,需要指定切片计算的key,这里用split-by代替。
sqoop import \
--connect jdbc:mysql://hdp01:3306/userdb \
--username root \
--password root \
--table emp \
--target-dir /myemp2 \
--split-by id \
--m 2
## mysql中的数据先存放到hdfs的/user/root/myemp_conn目录下,然后导入到hive数据库中;接着删除hdfs
目录下临时文件
sqoop import \
--connect jdbc:mysql://hdp01:3306/userdb \
--username root \
--password root \
--table emp_conn \
--target-dir /myemp_conn \
--hive-import \
--m 1
##hive-table指定导入到哪张表中
sqoop import \
--connect jdbc:mysql://hdp01:3306/userdb \
--username root \
--password root \
--table emp_conn \
--target-dir /user/root/myemp_conn \
--hive-import \
--hive-table new_emp_conn \
--m 1
查询条件子集:
##where指定查询的条件
sqoop import \
--connect jdbc:mysql://hdp01:3306/userdb \
--username root \
--password root \
--where "city='sec-bad'" \
--table emp_add \
--m 1
##语法踩坑
##1. 必须有target-dir属性
##2. query的属性值必须用''括起来
##3. WHERE 必须大写,并且必须携带 and $CONDITIONS
sqoop import \
--connect jdbc:mysql://hdp01:3306/userdb \
--username root \
--password root \
--query 'select id,hno from emp_add WHERE id>1203 and $CONDITIONS ' \
--target-dir "/emp_subcol" \
--m 1
增量导入是仅导入新添加的表中的行的技术。它需要添加‘incremental’, ‘check-column’, 和 ‘last-value’选项来执行
增量导入。如下示例:
sqoop import \
--connect jdbc:mysql://hdp01:3306/userdb \
--username root \
--password root \
--table emp \
--m 1 \
--target-dir /root123 \
--incremental append \
--check-column id \
--last-value 1203