Sqoop:
关系型数据库(mysql/oracle) <======> hadoop(hdfs/hive/hbase)
关系型数据库向hadoop组件进行数据导入导出的工具
底层使用MR技术,适用于大数据迁移
将sqoop命令编译成Mr作业,提交给hadoop
mysql ===> hadoop 导入
hadoop ==> mysql 导出
sqoop2不适用于生产部署
sqoop1.4.7:
==================================
准备:启动hadoop(hdfs && yarn)和mysql
1、解压
tar -xzvf
2、符号链接
ln -s
3、环境变量
sudo nano /etc/profile
4、环境变量生效
source /etc/profile
5、sqoop version
6、将mysql驱动放置在sqoop的lib目录/soft/sqoop/lib
mysql 5.5 ==> mysql-connector-java-5.1.17
mysql 5.6 ==> mysql-connector-java-5.1.41
7、在mysql中准备两张表,orders/customers
orders customers
+-----+---------+-------+------+ +-----+----------+------+
| oid | orderno | price | cid | | id | name | age |
+-----+---------+-------+------+ +-----+----------+------+
| 1 | no001 | 12.3 | 7 | | 1 | jerry | NULL |
| 2 | no002 | 18.8 | 4 | | 2 | tomas | NULL |
| 3 | no003 | 20 | 3 | | 3 | tomason | NULL |
| 4 | no004 | 50 | 7 | | 4 | tomson | NULL |
| 5 | no005 | 23.1 | 2 | | 5 | tomasLee | NULL |
| 6 | no006 | 39 | 3 | | 6 | tom6 | NULL |
| 7 | no007 | 5 | 2 | | 7 | tom7 | NULL |
| 8 | no008 | 6 | 1 | | 8 | tom8 | NULL |
| 9 | no009 | 6 | 11 | | 10 | jerry | NULL |
| 11 | no010 | 999 | 8 | | 11 | jerry011 | 0 |
| 12 | no001 | 100 | 8 | | 111 | 222 | NULL |
| 13 | no011 | 11 | 11 | | 123 | 44444 | NULL |
+-----+---------+-------+------+ +-----+----------+------+
8、修改配置文件
1)将/soft/sqoop/conf/sqoop-env-template.sh
将其重命名为sqoop-env.sh
2)修改sqoop-env.sh,添加如下配置
#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/soft/hadoop
#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/soft/hadoop
#set the path to where bin/hbase is available
export HBASE_HOME=/soft/hbase
#Set the path to where bin/hive is available
export HIVE_HOME=/soft/hive
#Set the path for where zookeper config dir is
export ZOOCFGDIR=/soft/zk/conf
注意事项:
sqoop可以连接windows的mysql =====> URL地址需要写为VMnet8的网卡地址eg:192.168.xx.1
关闭windows防火墙,以免3306端口被屏蔽
可以连接centos的mysql =====> URL地址写为s101地址
防火墙已关闭
mysql 5.5 ==> mysql-connector-java-5.1.17
mysql 5.6 ==> mysql-connector-java-5.1.41
权限拒绝问题:
grant all PRIVILEGES on *.* to root@'s201' identified by 'root';
解决:在mysql给主机授予权限
grant all PRIVILEGES on *.* to root@'' identified by 'root';
sqoop命令:
================================
sqoop import
export
job
list-databases //list-databases
list-tables //list-tables
命令查看帮助
sqoop list-databases --help //sqoop list-databases --help
常用sqoop使用方法:
1、将sqoop命令做成脚本
2、将sqoop命令做成job,以便下次使用
1、sqoop列出mysql数据库
sqoop list-databases --connect jdbc:mysql://192.168.136.1:3306 --username root --password root
2、sqoop列出数据库中的表
sqoop list-tables --connect jdbc:mysql://192.168.136.1:3306/day21 --username root --password root
3、将mysql数据导入到hdfs
sqoop import --connect jdbc:mysql://192.168.136.1:3306/day21 --username root -P --table orders --target-dir /user/centos/orders -m 2
3.1、将mysql数据导入到hdfs-指定字段分隔符
sqoop import --connect jdbc:mysql://192.168.136.1:3306/day21 --username root -P --table orders --target-dir /user/centos/orders -m 2 --fields-terminated-by '\t' --delete-target-dir
3.2、指定对应列导入到hdfs
sqoop import --connect jdbc:mysql://192.168.136.1:3306/day21 --username root -P --table orders --target-dir /user/centos/orders -m 2 --fields-terminated-by '\t' --delete-target-dir --columns oid,orderno,price
注意:数据导入到hive,需要将hive-site.xml文件拷贝到sqoop/conf目录
4、将mysql数据导入到hive表
1)创建hive表
sqoop import --create-hive-table --connect jdbc:mysql://192.168.136.1:3306/day21 --username root -P --table orders --hive-table orders -m 2 --fields-terminated-by '\t'
2)导入数据
sqoop import --hive-import --connect jdbc:mysql://192.168.136.1:3306/day21 --username root -P --table orders --hive-table orders -m 2 --fields-terminated-by '\t' --delete-target-dir
导入时可以在当前目录查看生成的代码
sqoop import --help
--columns <col,col,col...> //MySQL列指定
--table <table-name> //指定表名
--compression-codec <codec> //压缩编解码器
--delete-target-dir //删除目标目录,以免出现文件已存在异常
-m //指定mapper数量
--target-dir <dir> //指定hdfs导入路径
-P //隐式指定密码,需要重新输入
--fields-terminated-by //指定字段分隔符,默认","
--create-hive-table //创建hive表
--external-table-dir <hdfs path> //外部表路径
--hive-database <database-name> //hive数据库
--hive-delims-replacement <arg> //行分隔符
--hive-drop-import-delims
--hive-import //导入到hive表是指定的参数
--hive-overwrite
--hive-partition-key <partition-key> //指定hive分区字段
--hive-partition-value <partition-value> //指定hive分区值
--hive-table <table-name> //指定hive导入表
--map-column-hive <arg> //hive列映射