一起重新开始学大数据-数据采集工具篇-day 58 sqoop

一起重新开始学大数据-数据采集工具篇-day 58 sqoop

在这里插入图片描述

Sqoop简介


概述
  将关系数据库(oracle、mysql、postgresql等)数据与hadoop数据进行转换的工具、

官网:
http://sqoop.apache.org/

版本:(两个版本完全不兼容,sqoop1使用最多)
  sqoop1:1.4.x
  sqoop2:1.99.x

同类产品
  DataX:阿里顶级数据交换工具

在这里插入图片描述

Sqoop安装


  sqoop架构非常简单,是hadoop生态系统的架构最简单的框架。

1、上传并解压
sqoop压缩包:
链接:https://pan.baidu.com/s/1R-A-ILfcmHTR4xyhloGJag
提取码:nzux

tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C /usr/local/soft/

2、修改文件夹名字

mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha/ sqoop-1.4.6

3、修改配置文件

① 切换到sqoop配置文件目录
cd /usr/local/soft/sqoop-1.4.6/conf
② 复制配置文件并重命名
cp sqoop-env-template.sh sqoop-env.sh

vim sqoop-env.sh编辑配置文件,并加入以下内容

export HADOOP_COMMON_HOME=/usr/local/soft/hadoop-2.7.6
export HADOOP_MAPRED_HOME=/usr/local/soft/hadoop-2.7.6/share/hadoop/mapreduce
export HBASE_HOME=/usr/local/soft/hbase-1.4.6
export HIVE_HOME=/usr/local/soft/hive-1.2.1
export ZOOCFGDIR=/usr/local/soft/zookeeper-3.4.6/conf
export ZOOKEEPER_HOME=/usr/local/soft/zookeeper-3.4.6

④ 切换到bin目录
cd /usr/local/soft/sqoop-1.4.6/bin

vim configure-sqoop 修改配置文件,注释掉没用的内容(就是为了去掉警告信息)

image.png

4、修改环境变量

①配置环境变量
vim /etc/profile
② 将sqoop的目录加入环境变量
source /etc/profile

5、添加MySQL连接驱动

①从HIVE中复制MySQL连接驱动到$SQOOP_HOME/lib
cp /usr/local/soft/hive-1.2.1/lib/mysql-connector-java-5.1.49.jar /usr/local/soft/sqoop-1.4.6/lib/

6、测试

① 打印sqoop版本
sqoop version
image.png

②测试MySQL连通性
sqoop list-databases -connect jdbc:mysql://master:3306?useSSL=false -username root -password 123456



案例部分


准备数据阶段

准备MySQL数据

①登录MySQL数据库

mysql -u root -p123456;

② 创建student数据库

create database student;

③ 切换数据库并导入数据

# mysql shell中执行
use student;
source /root/student.sql;
source /root/score.sql;

数据集:
链接:https://pan.baidu.com/s/1HuyfFf_AhZfPTzxqZodn6w
提取码:2d1d

④ 另外一种导入数据的方式

# linux shell中执行
mysql -u root -p123456 student</root/student.sql
mysql -u root -p123456 student</root/score.sql

⑤ 使用Navicat运行SQL文件

也可以通过Navicat导入

在这里插入图片描述

⑥ 导出MySQL数据库

mysqldump -u root -p123456 数据库名>任意一个文件名.sql

import

  传统的关系型数据库导入HDFS、HIVE、HBASE…

MySQLToHDFS

编写脚本,保存为MySQLToHDFS.conf

import
--connect
jdbc:mysql://master:3306/student?useSSL=false
--username
root
--password
123456
--table
student
--m
2
--split-by
age
--target-dir
/sqoop/data/student1
--fields-terminated-by
','

执行脚本

sqoop --options-file MySQLToHDFS.conf

注意事项:

1、–m 表示指定生成多少个Map任务,不是越多越好,因为MySQL Server的承载能力有限

2、当指定的Map任务数>1,那么需要结合--split-by参数,指定分割键,以确定每个map任务到底读取哪一部分数据,最好指定数值型的列,最好指定主键(或者分布均匀的列=>避免每个map任务处理的数据量差别过大)

3、如果指定的分割键数据分布不均,可能导致数据倾斜问题

4、分割的键最好指定数值型的,而且字段的类型为int、bigint这样的数值型

5、编写脚本的时候,注意:例如:--username参数,参数值不能和参数名同一行

--username root  // 错误的

// 应该分成两行
--username
root

6、运行的时候会报错InterruptedException,hadoop2.7.6自带的问题,忽略即可

21/01/25 14:32:32 WARN hdfs.DFSClient: Caught exception 
java.lang.InterruptedException
	at java.lang.Object.wait(Native Method)
	at java.lang.Thread.join(Thread.java:1252)
	at java.lang.Thread.join(Thread.java:1326)
	at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.closeResponder(DFSOutputStream.java:716)
	at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.endBlock(DFSOutputStream.java:476)
	at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:652)

7、实际上sqoop在读取mysql数据的时候,用的是JDBC的方式,所以当数据量大的时候,效率不是很高

8、sqoop底层通过MapReduce完成数据导入导出,只需要Map任务,不需要Reduce任务

9、每个Map任务会生成一个文件

MySQLToHive

先会将MySQL的数据导出来并在HDFS上找个目录临时存放,默认为:/user/用户名/表名

然后再将数据加载到Hive中,加载完成后,会将临时存放的目录删除

编写脚本,并保存为MySQLToHIVE.conf文件

import 
--connect
jdbc:mysql://master:3306/student?useSSL=false
--username
root
--password
123456
--table
score
--fields-terminated-by
"\t"
--lines-terminated-by 
"\n"
--m
3
--split-by
student_id
--hive-import
--hive-overwrite
--create-hive-table
--hive-database
testsqoop
--hive-table
score
--delete-target-dir

在Hive中创建testsqoop库

hive> create database testsqoop;

执行脚本

sqoop --options-file MySQLToHIVE.conf

–direct

加上这个参数,可以在导出MySQL数据的时候,使用MySQL提供的导出工具mysqldump,加快导出速度,提高效率

需要将master上的/usr/bin/mysqldump分发至 node1、node2的/usr/bin目录下

scp /usr/bin/mysqldump node1:/usr/bin/
scp /usr/bin/mysqldump node2:/usr/bin/

-e参数的使用

import 
--connect 
jdbc:mysql://master:3306/student 
--username 
root 
--password 
123456 
--fields-terminated-by 
"\t" 
--lines-terminated-by 
"\n" 
--m 
2 
--split-by 
student_id 
--e 
"select * from score where student_id=1500100011 and $CONDITIONS" 
--target-dir 
/testQ 
--hive-import 
--hive-overwrite 
--create-hive-table 
--hive-database 
testsqoop 
--hive-table 
score2

MySQLToHBase

编写脚本,并保存为MySQLToHBase.conf

import 
--connect 
jdbc:mysql://master:3306/student?useSSL=false
--username 
root 
--password 
123456
--table 
student
--hbase-table 
student
--hbase-create-table
--hbase-row-key 
id 
--m 
1
--column-family 
cf1

在HBase中创建student表

create 'student','cf1'

执行脚本

sqoop --options-file MySQLToHBase.conf



上一章-Hbase篇-day 57 Hbase调优
下一章-随缘更新



  

在这里插入图片描述

键,下

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你的动作太慢了!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值