Sqoop
Sqoop部署
解压
tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C /opt/Module/
重命名
mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha/ sqoop
配置sqoop-env.sh
mv sqoop-env-template.sh sqoop-env.sh
export HADOOP_COMMON_HOME=/opt/Module/hadoop-3.1.3
export HADOOP_MAPRED_HOME=/opt/Module/hadoop-3.1.3
export HIVE_HOME=/opt/Module/hive3.1.2
#export ZOOKEEPER_HOME=zookeeper_home
#export ZOOCFGDIR=zookeeper_home
#export HBASE_HOME=hbase_home
拷贝JDBC驱动
cp mysql-connector-java-5.1.7-bin.jar /opt/Module/sqoop/lib/
验证Sqoop
bin/sqoop-help
测试Sqoop是否能够成功连接数据库
bin/sqoop list-databases --connect jdbc:mysql://Hadoop2:3306/ --username root --password 123456
若能显示MySQL的数据库,至此环境配置完成 。
Sqoop 实操
数据准备
mysql -uroot -p123456
create database Sqoop_db;
create table Sqoop_db.staff(id int(4) primary key not null auto_increment, name varchar(255), sex varchar(255));
insert into Sqoop_db.staff(name, sex) values('Thomas', 'Male');
insert into Sqoop_db.staff(name, sex) values('Catalina', 'FeMale');
select * from Sqoop_db.staff; 数据准备完毕。
导入数据
导入数据
在Sqoop中,“导入”概念指:从关系型数据库(RDBMS)向大数据集群(HDFS,HIVE,HBASE)中传输数据,叫做: 导入,即使用import关键字。
导入整张表数据到HDFS
导入整张表数据
bin/sqoop import \
--connect jdbc:mysql://192.168.188.130:3306/Sqoop_db
--driver com.mysql.jdbc.Driver
--username root
--password 034578
--table staff
--target-dir /user/a1
--num-mappers 1
--delete-target-dir
--fields-terminated-by "\t"
导入查询结果集到HDFS
导入查询结果集
where子句中必须包含$CONDITIONS
如果query后使用的是双引号,则$CONDITIONS前必须加转移符,防止shell识别为自己的变量。
bin/sqoop import
--connect jdbc:mysql://192.168.183.120:3306/Sqoop_db
--driver com.mysql.jdbc.Driver
--username root
--password 456879
--target-dir /user/a1
--num-mappers 1
--delete-target-dir
--fields-terminated-by "\t"
--query 'select *from Sqoop_db.staff where id=2 and $CONDITIONS;'
导入指定列数据到HDFS
导入指定列数据
bin/sqoop import
--driver com.mysql.jdbc.Driver
--connect jdbc:mysql://192.168.156.120:3306/Sqoop_db
--username root
--password 091876
--target-dir /user/a1
--delete-target-dir
--num-mappers 1
--fields-terminated-by "\t"
--table staff
--columns id
导入where过滤的数据到HDFS
导入where过滤的数据
bin/sqoop import
--driver com.mysql.jdbc.Driver
--connect jdbc:mysql://192.168.150.190:3306/Sqoop_db
--username root
--password 569416
--target-dir /user/a1
--delete-target-dir
--table staff
--columns id
--where id=2
--fields-terminated-by "\t"
RDBMS导入数据到Hive
RDBMS导入数据到Hive
小知识点: 该过程系统会分为两步运行,第一步将数据导入到HDFS,第二步将导入到HDFS的数据迁移到Hive仓库,第一步默认的临时目录是/user/用户名/表名。
bin/sqoop import
--driver com.mysql.jdbc.Driver
--connect jdbc:mysql://192.168.156.145/Sqoop_db
--username root
--password 861816
--table staff
--num-mappers 1
--hive-import
--fields-terminated-by "\t"
--hive-overwrite
--hive-table staff_hive
RDBMS导入数据到Hbase
RDBMS导入数据到Hbase
提示:sqoop1.4.6只支持HBase1.0.1之前的版本的自动创建HBase表的功能
解决方案:手动创建HBase表
hbase> create 'hbase_company,'info'
bin/sqoop import
--connect jdbc:mysql://192.168.167.122:3306/Sqoop_db
--username root
--password 000000
--table staff
--columns "id,name,sex"
--column-family "info"
--hbase-create-table
--hbase-row-key "id"
--hbase-table "staff_hbase"
--num-mappers 1
--split-by id
导出数据
在Sqoop中,“导出”概念指:从大数据集群(HDFS,HIVE,HBASE)向非大数据集群(RDBMS)中传输数据,叫做: 导出,即使用export关键字。
HIVE/HDFS导出数据到RDBMS
HIVE/HDFS导出数据到RDBMS
提示:Mysql中如果表不存在,不会自动创建。(若两边数据有相同注意主键冲突问题truncate table staff;)
bin/sqoop export
--driver com.mysql.jdbc.Driver
--connect jdbc:mysql://192.168.187.130:3306/Sqoop_db
--username root
--password 021216
--table staff
--num-mappers 1
--export-dir /user/hive/warehouse/staff_hive
--input-fields-terminated-by "\t"
sqoop脚本导出数据
sqoop脚本导出数据
mkdir job
touch job_hdfsVrdbms.opt
vim /opt/job/job_hdfsVrdbms.opt
bin/sqoop --options-file /opt/job/job_hdfsVrdbms.opt
脚本内容:
export
--driver
com.mysql.jdbc.Driver
--connect
jdbc:mysql://Hadoop2:3306/Sqoop_db
--username
root
--password
021216
--table
staff
--num-mappers
1
--export-dir
/user/hive/warehouse/staff_hive
--input-fields-terminated-by
"\t"