1.Sqoop应用场合
其中所说的导入导出,其实不仅仅是HDFS,指的是Hadoop生态圈,可以从MySQL导入到Hive、HBase等框架中,自己之前理解的太过狭窄
2.Sqoop应用
cd app/sqoop
sqoop help
sqoop command [args] #sqoop的使用
使用sqoop help #就可以看见command中都有哪些
使用sqoop help command #就可以看见command里面的参数
如:sqoop help
sqoop help export #查看export这个命令的参数的使用
2.1 查看数据库(list-databases)
sqoop list-databases \
--connect jdbc:mysql://data001:3306 \ #hostname(data001)
--password 000000 \ #登录数据库mysql的密码
--username root \ ##登录数据库mysql # msyql -uroot -p000000
如:
sqoop list-databases \
--connect jdbc:mysql://data001:3306 \
--password 000000 \
--username root
2.2 查看表信息(list-tables)
sqoop list-tables \ #list-tables
--connect jdbc:mysql://data001:3306/sqoop \ #相对于查看数据库信息, 后面增加了表所在的数据库(sqoop数据库)
--password 000000 \
--username root \
3.Sqoop导入(import)
备注:这里所说的导入导出都是针对于Hadoop来讲。
导入:指将MySQL导入到HDFS中
导出:指将HDFS数据导出到MySQL中
1.全部导入
sqoop import \
--connect jdbc:mysql://data001:3306/sqoop \
--password 000000 \
--username root \
--table sqoop1 \ #表名
--mapreduce-job-name FromMySQL \ #修改上传到8088web界面上的iar名称为FromSQL,默认的名称为表名.jar
-m 1 #指定MapReduce数量
如:
sqoop import \
--connect jdbc:mysql://data001:3306/sqoop \
--password 000000 \
--username root \
--table sqoop1 \
--target-dir /user/hadoop/sqoop/ss \
-m 1
=======
备注:
1.将MySQL中sqoop数据库中的sqoop1表导入到HDFS中
2.默认导入在/user/hostname目录下: hdfs dfs -ls==hdfs dfs -ls /user/hadoop
3.MR:reducer个数决定了最终输出文件的个数,默认是4. 用-m x进行设置
没有reducer则有Map决定
4.--mapreduce-job-name FromMySQL 设置在HDFS中的名称为FromMySQL
5.delect-target-dir #这个是如果第一次导入到HDFS没有问题,如果第二次导入就会保存,这个设置是目标目录删除掉
2.部分导入
sqoop import \
--connect jdbc:mysql://data001:3306/sqoop \
--password 000000 \
--username root \
--table sqoop1 \
--targer-dir /user/hadoop/A \ #指定输出路径
--columns "SQL语句中的字段" \ #指定导入字段
--fileds-terminated-by '\t' \ #指定分隔符
--null-string '' --null-non-string '0' \ #将如果null是字符串类型的,不输出 ,如果null不是字符串类型的就用0代替
--where 'SAL>2000' \
-m 1
如:
sqoop import \
--connect jdbc:mysql://data001:3306/sqoop \
--password 000000 \
--username root \
--table sqoop1 \
--target-dir /user/hadoop/A \
--columns empno,job \
-m 1
3.SQL语句导入
sqoop import \
--connect jdbc:mysql://data001:3306/sqoop \
--password 000000 \
--username root \
--table sqoop1 \
--targer-dir /user/hadoop/A \ #指定输出路径
--fileds-terminated-by '\t' \ #指定分隔符
--null-string '' --null-non-string '0' \ #将如果null是字符串类型的,不输出 ,如果null不是字符串类型的就用0代替
--query 'select * from 表名 where 'SAL>2000''\
-m 1
#这个会报错,1.然后在sql语句中进行修改select * from EMP where SAL>2000 and $CONDITIONS
2.'select * from EMP where SAL>2000 and $CONDITIONS' == "select * from EMP where SAL>2000 and \$CONDITIONS"
双引号里面需要在$CONDITIONS前面加一个转义符 \
修改后:
sqoop import \
--connect jdbc:mysql://data001:3306/sqoop \
--password 000000 \
--username root \
--target-dir /user/hadoop/AA \
--query 'select * from sqoop1 where sal>2000 and $CONDITIONS' \
-m 1
4.Sqoop导出(export)
1.在mysql中创建表
create table sqoop1 (
empno int,
ename char,
job char,
mgr int,
hiredate char,
sal double,
comm double,
deptno int
) ;
2.导入数据
sqoop export \
----connect jdbc:mysql://data001:3306/sqoop \
--password 000000 \
--username root \
--table sqoop1 \ #导出到sqoop1表中
--export-dir filepath #需要导出的HDFS的路径