⼤数据(3i)Sqoop安装和操作
帅⽓的⽬录
1、Sqoop简介
开源的数据传输⼯具
主⽤在Hadoop(HDFS)与传统的数据库(MySQL、Oracle…)之间
官⽹:/
2、安装
2.1、下载
下载地址:/sqoop/
本⽂下载的是sqoop-1.4.7.bin__hadoop-2.6.
该版教学地址:/docs/1.4.7/SqoopUserGuide.html
2.2、解压
本⽂解压到~/software并改名
tar -zxf sqoop-1.4.7.bin__hadoop-2.6. -C ~/software/
cd ~/software/
mv sqoop-1.4.7.bin__hadoop-2.6.0 sqoop
2.3、环境变量
2.4、配置⽂件(此步可略)
cd$SQOOP_HOME/conf
mv sqoop-env-template.sh sqoop-env.sh
vi sqoop-env.sh
2.5、复制JDBC驱动程序
cp$HIVE_HOME/lib/mysql-connector-java-5.1.48.jar $SQOOP_HOME/lib/
之前安装MySQL和HIVE时,已经拷贝了⼀个,因此本⽂从HIVE那⾥拿
2.6、MySQL连接测试
sqoop list-databases \
--connect jdbc:mysql://hadoop100:3306/ \
--username root \
--password 123456
基础参数说明
--connect连接
账户
--username
基础参数说明
--password密码3、基本操作
sqoop help
sqoop help import
sqoop help export
4、ETL⼊门⽰例
Sqoop Sqoop
4.1、数据准备
登录MySQL建2个表,其中⼀个插⼊数据,长相如下
mysql -uroot -p123456
DROP DATABASE IF EXISTS b1;
CREATE DATABASE b1;
CREATE TABLE IF NOT EXISTS b1.t1 (f1 INT(9)PRIMARY KEY,f2 CHAR(9));
mysql下载jar包
INSERT INTO b1.t1 VALUES(1,'a'),(2,'b'),(3,null),(4,'b');
SELECT*FROM b1.t1;
CREATE TABLE IF NOT EXISTS b1.t2 (f1 INT(9)PRIMARY KEY,f2 CHAR(9));
4.2、MySQL数据导⼊到HDFS
sqoop import\
--connect jdbc:mysql://hadoop100:3306/b1 \
--username root --password 123456\
--target-dir /b1/t1 \
--delete-target-dir \
--query 'SELECT * FROM t1 WHERE $CONDITIONS'\
--num-mappers 2\
--split-by f1
常⽤参数说明
--target-dir HDFS⽬标⽬录
--delete-target-dir删除⽬标⽬录(若存在)
--append追加形式写⼊(不和--delete-target-dir同⽤)
--query查询语句,其中$CONDITIONS是固定要加上去的--num-mappers <n>Map任务并⾏数,默认4,建议设成1 --split-by <column-name>Map并⾏数≠1时,要设 按什么列来横切表,然后分配给Map
结果查看hadoop fs -ls /b1/t1
4.3、HDFS数据导出到MySQL
sqoop export\
--connect jdbc:mysql://hadoop100:3306/b1 \
--username root --password 123456\
--num-mappers 2\
--export-dir /b1/t1 \
--table t2
常⽤描述描述
--export-dir <dir>HDFS导出的源路径
--table <table-name>⽬的地MySQL表名
导出MySQL结果
4.4、MySQL数据导⼊到HIVE(待补充)
--hive-import
5、ETL进阶⽰例
Sqoop hive Sqoop
同步策略说明数据特点⽰例
全量同步覆盖写⼊量⼩商品表、品牌表
增量同步追加写⼊量⼤、增量、不改⽀付表、退款表增量变化同步追加和修改量⼤、增量、会改订单流⽔表、优惠券流⽔表
特殊同步
覆盖写⼊
(很久才⼀次)
数据不常变
⽇期表、地区表
鞋⼦尺码表
5.1、数据准备
1、MySQL建表
mysql -uroot -p123456
DROP DATABASE IF EXISTS b2;
CREATE DATABASE b2;
CREATE TABLE IF NOT EXISTS b2.t1
(f1 INT(9)PRIMARY KEY,f2 CHAR(9),f3 DATE,f4 INT(9)); INSERT INTO b2.t1 VALUES(1,'a','2020-1-1',NULL);
INSERT INTO b2.t1 VALUES(2,'b','2020-1-1',NULL);
INSERT INTO b2.t1 VALUES(3,'a','2020-1-2',5);
INSERT INTO b2.t1 VALUES(4,'b','2020-1-2',NULL);
SELECT*FROM b2.t1;
CREATE TABLE IF NOT EXISTS b2.t2
(f1 INT(9)PRIMARY KEY,f2 CHAR(9),f3 DATE);
2、HIVE建表,设分区
DROP DATABASE IF EXISTS b2 CASCADE;--删库
CREATE DATABASE b2 LOCATION '/b2';--建库
CREATE TABLE b2.t1 (f1 INT,f2 STRING,f4 INT) PARTITIONED BY(f3 DATE)--按⽇期分区
ROW FORMAT DELIMITED FIELDS TERMINATED BY'\t'--⾏格式LOCATION '/b2/t1';
5.2、MySQL数据导⼊到HIVE
参数说明
--null-string <null-string>The string to be written for a null value for string columns --null-non-string <null-string>The string to be written for a null value for non-string columns --fields-terminated-by <char>字段分隔符,默认,
--lines-terminated-by <char>⾏分隔符,默认\n
1、按⽇期导⼊HDFS
sqoop import\
--connect jdbc:mysql://hadoop100:3306/b2 \
--username root --password 123456\
--delete-target-dir --target-dir /h1/b2/t1/2020-1-1 \
--query "SELECT f1,f2,f4 FROM t1 WHERE f3='2020-1-1' AND \$CONDITIONS"\
--fields-terminated-by '\t' --lines-terminated-by '\n'\
--null-string '\\N' --null-non-string '\\N'\
--num-mappers 1
2、HDFS导进HIVE
LOAD DATA-- 数据导⼊
INPATH '/h1/b2/t1/2020-1-1'--数据来源
OVERWRITE  --覆盖写⼊
INTO TABLE b2.t1  --数据终点
PARTITION(f3='2020-1-1')--分区
;
LOAD DATA前
LOAD DATA后
3、查询数据SELECT * FROM b2.t1;
5.3、HIVE数据导出到MySQL
参数说明

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。