sqoop课堂总结

一、将mysql数据库中表的数据导入到hdfs

1.sqoop的参数
sqoop import
--connect jdbc:mysql://master:3306/数据库名
--username root
--password 123456
--table 表名
--target-dir '路径' (目标路径必须不存在)
--fields-terminated-by ',' (表中数据截取规则)
-m 1;

注:import 将mysql数据库中表的数据导入到hdfs/hive
代表换行,后面不能有空格

2.增加where条件
sqoop import
--connect jdbc:mysql://master:3306/test
--username root
--password 123456
--table person
--where 'age<18'
--target-dir '/mysql/person'
--fields-terminated-by ','
-m 1;

注:条件必须用引号引起来

3.增加query语句
sqoop import
--connect jdbc:mysql://master:3306/数据库名
--username root
--password 123456
--query 'select * from 表名 where 条件 ADD $CONDITIONS'
--split-by 表名.列名
--target-dir '路径'
--fields-terminated-by ','
-m 3; mapper使用的个数(一般为n=1) 指定map数量 -m n

注:如果使用query语句必须使用ADD $CONDITIONS 表示语句已达到末尾
如果设置map数量为1时,即-m 1,不用加上--split-by 表名.列名,否则需要添加
增加query语句后,不用写--table参数和--where参数

[root@master ~]# sqoop import
> --connect jdbc:mysql://master:3306/test
> --username root
> --password 123456
> --query 'select * from person where age<19 AND $CONDITIONS'
> --split-by Person.id
> --target-dir '/mysql/person'
> --fields-terminated-by ','
> -m 3;


部分任务可以正常跑,部分问题报错
报错信息如下:
Ended Job = job_1527476268558_132947 with exception 'java.io.IOException(java.net.ConnectException:
Call From xxx/xxx to xxx:10020 failed on connection exception: java.net.ConnectException: 拒绝连接;
For more details see: http://wiki.apache.org/hadoop/ConnectionRefused)'

yarn报错,任务不能访问jobhistory,启动historyserver就行
[root@master sbin]# ./mr-jobhistory-daemon.sh start historyserver

登录mysql命令
mysql -u root -p

二、将mysql数据导入到hive中
准备工作:需要2个hive的jar包,将hive-1.1.0-cdh5.7.0/lib/中的
hive-common-1.1.0-cdh5.7.0.jar,hive-exec-1.1.0-cdh5.7.0.jar
cp到sqoop-1.4.6-cdh5.7.0/lib中
[root@master ~]# cd app/hive-1.1.0-cdh5.7.0/lib/
[root@master lib]# cp hive-common-1.1.0-cdh5.7.0.jar /root/app/sqoop-1.4.6-cdh5.7.0/lib
[root@master lib]# cp hive-exec-1.1.0-cdh5.7.0.jar /root/app/sqoop-1.4.6-cdh5.7.0/lib

mysql导入数据到hive

sqoop import
--connect jdbc:mysql://master:3306/数据库名
--username root
--password 123456
--table 表名
--hive-import
--hive-database hive数据库名
--hive-table hive表名
--columns 表字段
--delete-target-dir
--fields-terminated-by ','
-m 1;

注:如果将mysql数据库表的全部数据导入到hive,--columns参数不用写

三、将hive下的person表的数据导出到mysql的person表
sqoop export
--connect jdbc:mysql://master:3306/数据库名
--username root
--password 123456
--table person
--export-dir "/user/hive/warehouse/lpy2/person/part-m-00000"
--input-fields-terminated-by ','
-m 1;

mysql建表字符串类型用的是varchar,不是string

hive复制表(复制表结构和数据)
create table 新表 截取规则 as 查询语句;
create table person1 row format delimited fields terminated by ' ' as select * from person;

like(复制表结构)
create table 新表 like 老表;

原文地址:https://www.cnblogs.com/LEPENGYANG/p/14039593.html