sqoop的安装基础是hive和mysql,没有安装好的同学建议去看一看博主的这一篇文章
Hive的部署,远程模式搭建,centos换源,linux上下载mysql。_hive-4.0.1-CSDN博客
好的那么接下来我们开始表演,由于hive是当时在hadoop03上安装的,所以本次的操作,只要没有特别提出就是在hadoop03执行的。
接下来给大家准备好了压缩包,当然也可以自己去官网下载。
通过网盘分享的文件:sqoop.zip
链接: https://pan.baidu.com/s/1sJInaXbUgUS8alHt_gwqGQ 提取码: d58v
--来自百度网盘超级会员v4的分享
压缩包是表稳定的Sqoop-1.47版的,有需要其他版本下载的可以去官网下。
看到开头,我们需要做什么!!!
三秒抢答
0!
1!
2!
3!
是的我们需要先启动集群。
首先切换到自己hadoop的sbin目录,以启动集群。
cd /export/servers/hadoop/sbin
然后使用一键启动命令,在三台虚拟机上开始搭建集群。
start-all.sh
启动完成之后,使用jps,看一下自己的进程们显示的全面不全面。
发现叫全面之后,我们切换到hadoop03的虚拟机,输入下面的命令启动hadoop03上面,启动一下我们配置的MetaStore服务。
hive --service metastore
启动完MetaStore服务之后,我们再双击一下hadoop03,开启下一个窗口。
启动HiveServers2
hive --servece hiveserver2
启动完成之后,无需理会他们,开始我们一切顺利,每次都没有报错,一次就可以执行成功的操作。
**小小小小建议,可以单独开一个给sql用的窗口。**后面就不用反复退出了。
sqoop的安装配置
好的接下来切换到software目录
cd /export/software
切换好了之后,我们输入rz上传一下我们的压缩包
上传完成之后,我们进行一个解压缩
tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C /export/servers/
解压缩完成之后,切换到servers目录
cd /export/servers
切换完成之后,我们进行一个重命名
mv sqoop-1.4.7.bin__hadoop-2.6.0 sqoop
重命名完成之后,我们切换到sqoop目录里
cd sqoop/conf
切换到conf离职后,复制一下环境文件。
cp sqoop-env-template.sh sqoop-env.sh
复制完成之后,我们切换到sqoop-env.sh文件里面,输入
vi sqoop-env.sh
然后输入下面的内容
export HADOOP_COMMON_HOME=/export/servers/hadoop
export HADOOP_MAPRED_HOME=/export/servers/hadoop
export HIVE_HOME=/export/servers/hive
输入完成之后,esc冒号保存退出
那么接下来我们就可以开始开心的配置一下sqoop的环境变量了。
vi /etc/profile
输入
export SQOOP_HOME=/export/servers/sqoop
export PATH=$SQOOP_HOME/bin:$PATH
配置完成之后,还需要输入
source /etc/profile
好的那么接下来我们上传一下jar包,和自己的数据库关联起来。
切换到sqoop的lib目录下
cd /export/servers/sqoop/lib
上传一下mysql的关联jar包
那么也给大家准备好了
-----这里放一张jar包图片---------------------------------
好的上传完成之后,我们再上传一个sqoop的jar包
就是那个lang阿巴阿巴的包,
--------------这里放一张lang包的图片--------------
好的上传并且配置成功之后,我们就可以开始开心测试一下sqoop了
sqoop list-databases --connect jdbc:mysql://localhost:3306/?allowPublicKeyRetrieval=true --username root --password Itcast@2023
执行完成之后,就是下面这个样子
诶!!!!
是不是报错了,是不是说没有hbase,
没有关系
cd /export/servers/sqoop/bin
输入
vim configure-sqoop
然后!按esc
:set number
这个是显示行号
之后我们查找一下
/Where to find the main Sqoop jar
后注释掉从
##Moved to be a runtime check in sqoop
到
# Where to find the main Sqoop jar
之间与HBase、HCatalog 和Accumulo以及Zookeeper相关的内容
我们来到文章的末尾
注释一下
修改完成之后,我们就可以开心的
sqoop list-databases --connect jdbc:mysql://localhost:3306/?allowPublicKeyRetrieval=true --username root --password Itcast@2023
执行命令,连接成功。
sqoop数据的导入
再开始导入之前,
我们需要建立一个sql表,自己创建也行,这个文件在压缩包里也给大家准备好了。
(在物理机上创建完之后上传就可以)
名称:
sqoop_db.sql
下面是文件内容
DROP TABLE IF EXISTS `emp`;
CREATE TABLE `emp` (
`id` int(11) NOT NULL,
`name` varchar(100) DEFAULT NULL,
`deg` varchar(100) DEFAULT NULL,
`salary` int(11) DEFAULT NULL,
`dept` varchar(10) DEFAULT NULL,
PRIMARY KEY (`id`)
);
INSERT INTO `emp` VALUES ('1201','xiaozhang','manager','50000','TP');
INSERT INTO `emp` VALUES ('1202','xiaosan','Proof reader','50000','TP');
INSERT INTO `emp` VALUES ('1203','xiaosi','php dev','30000','AC');
INSERT INTO `emp` VALUES ('1204','xiaowu','php dev','30000','AC');
INSERT INTO `emp` VALUES ('1205','xiaoer','admin','20000','TP');
DROP TABLE IF EXISTS `emp_add`;
CREATE TABLE `emp_add` (
`id` int(11) NOT NULL,
`hno` varchar(100) DEFAULT NULL,
`street` varchar(100) DEFAULT NULL,
`city` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
);
INSERT INTO `emp_add` VALUES ('1201','288A','guangminglu','guangzhou');
INSERT INTO `emp_add` VALUES ('1202','108I','chenggonglu','beijing');
INSERT INTO `emp_add` VALUES ('1203','144Z','dadaolu','shenzhen');
INSERT INTO `emp_add` VALUES ('1204','78B','xingfulu','beijing');
INSERT INTO `emp_add` VALUES ('1205','720X','wenxinlu','beijing');
DROP TABLE IF EXISTS `emp_conn`;
CREATE TABLE `emp_conn` (
`id` int(100) NOT NULL,
`phno` varchar(100) DEFAULT NULL,
`email` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
);
INSERT INTO `emp_conn` VALUES ('1201','2356742','11@tp.com');
INSERT INTO `emp_conn` VALUES ('1202','1661663','12@tp.com');
INSERT INTO `emp_conn` VALUES ('1203','8887776','13@ac.com');
INSERT INTO `emp_conn` VALUES ('1204','9988774','14@ac.com');
INSERT INTO `emp_conn` VALUES ('1205','1231231','15@tp.com');
好的那么我们保存一下这个表
切换到data目录
cd /export/data
之后,我们输入rz上传一下我们刚才创建的sql表
上传完成之后,我们登录一下数据库
mysql -uroot -pItcast@2023
(-p后面是大家自己的密码,根据自己的实际情况修改哈)
登陆完成之后,我们创建一个数据库
create database sqoop_db;
创建完成之后选择
use sqoop_db;
之后我们就可以执行一下我们
source /export/data/sqoop_db.sql;
执行完成之后,我们查看一下当前表
show tables;
好的那么我们接下来开启一下mysql的远程访问、
开一下!远程!访问!一定要开!
update mysql.user set Host='%' where User='root';
连接完成之后,记得刷新一下链接,不然下面包失败的。
FLUSH PRIVILEGES;
,得退出数据库
好的么到此为止,接下来我们就可以开始进行下一步了
MySQL导入hdfs
sqoop import \
--connect jdbc:mysql://hadoop03:3306/sqoop_db?allowPublicKeyRetrieval=true \
--username root \
--password Itcast@2023 \
--table emp \
--columns id,name,deg,salary,dept \
--target-dir /sqoop \
--num-mappers 1
执行完上面的代码就可以
执行完成之后,我们就可以打开浏览器来查看一下有么得sqoop文件
出现下面的结果就是操作成功了:
--------------这里放一张浏览器访问成功的照片----------------------
喜欢看浏览器访问的师傅看到这里就可以,那么不喜欢浏览器访问的师傅,同样可以在本地操作
hdfs dfs -cat /sqoop/part-m-00000
查看文件结果。
小tips,小文件用cat查看,大文件用什么查看?
三秒抢答
.
.
.
.
.
对,用more命令查看
好的我们继续
接下来展示下,增量导入
我们再次来到sql数据库
mysql -uroot -p
然后输入密码,输入密码的时候默认是不显示的,不用管,输入就行。
然后我们往sqoop_db里插入一条数据。
insert into sqoop_db.emp values('1206','itcast','java dev','15000','AC');
然后,我们输入下面的命令
sqoop import \
--connect jdbc:mysql://hadoop03:3306/sqoop_db?allowPublicKeyRetrieval=true \
--username root \
--password Itcast@2023 \
--target-dir /sqoop \
--table emp \
--columns id,name,deg,salary,dept \
--num-mappers 1 \
--incremental append \
--check-column id \
--last-value 1205
ok接下来就去hadoop01:9870
查看一下结果文件就ok
MySQL导入hive
接下来的操作是,用sqoop的import命令,把mysql中指定的数据表的数据导入到hive的操作。
因为是hive和mysql的梦幻联动,那么首先我们需要
cp /export/servers/hive/lib/hive-common-4.0.1.jar /export/servers/sqoop/lib
注意你下载的hive版本不一定是4.0.1哈,建议自己先切换到lib目录,复制一下目录下面的包名。
切换到hive连接一下hive数据库
create database itcast;
创建itcast数据库
好那么接下来,我们就可以开始将mysql中的数据表emp_add导入到hive
sqoop import \
--connect jdbc:mysql://hadoop03:3306/sqoop_db?allowPublicKeyRetrieval=true \
--username root \
--password Itcast@2023 \
--table emp_add \
--columns id,hno,street,city \
--hive-table itcast.emp_add_sqoop \
--create-hive-table \
--hive-import \
--num-mappers 1
第二行是数据库密码,记得换一下自己的密码哈。
这里的小提示,倒数第四行,的那个itcast,是个数据库哈,在hive里创建,如果没有这个数据,就自己创建一个。
之后再上去执行就可以了
ok接下来我们连接一下hive
直接在命令行输入hive
select * from itcast.emp_add_sqoop;
就可以查看emp_add_sqoop数据了。
MySQL过滤导入hdfs,和选择条件差不多
1、where命令
下面我们通过命令
sqoop import \
--connect jdbc:mysql://hadoop03:3306/sqoop_db?allowPublicKeyRetrieval=true \
--username root \
--password Itcast@2023 \
--table emp_add \
--columns id,hno,street,city \
--where "city = 'beijing'" \
--target-dir /sqoop/city_beijing \
--num-mappers 1
ok接下来我们在本地查看一下
hdfs dfs -cat /sqoop/city_beijing/part-m-00000
就会输出有关北京信息的地址了。
2、query命令
好的那么下一步,我们查找一下mysql在数据表emp的id,name和deg数据,并且过滤字段id<1203的数据。
sqoop import \
--connect jdbc:mysql://hadoop03:3306/sqoop_db?allowPublicKeyRetrieval=true \
--username root \
--password Itcast@2023 \
--target-dir /sqoop/id_1203 \
--query 'select id,name,deg from emp where id > 1203 and $CONDITIONS' \
--num-mappers 1
上面的命令执行完成之后,,在本地查看一下
hdfs dfs -cat /sqoop/id_1203/part-m-00000
查看下文件的数据
sqoop数据的导出
首先登录到你的mysql
三秒抢答输入命令
*
*
*
*
*
mysql -uroot -pItcast@2023
输入密码
接下来呢
我们选择sqoop_db数据库
use sqoop_db
Sqoop数据导出-在MySQL创建表emp_export
create table if not exists sqoop_db.emp_export(
id int(11) not null ,
name varchar(100) default null,
deg varchar(100) default null,
salary int(11) default null,
dept varchar(10) default null,
primary key (id)
);
ok然后quit推出数据库
sqoop export \
--connect jdbc:mysql://hadoop03:3306/sqoop_db?allowPublicKeyRetrieval=true \
--username root \
--password Itcast@2023 \
--columns id,name,deg,salary,dept \
--table emp_export \
--export-dir /sqoop/part-m-00000 \
--num-mappers 1
然后我们再次登录数据库。
select * from sqoop_db.emp_export;
就可以查看表的内容了。
那么本次的教学就到这里,大家如果有什么疑问可以在评论区留言或者私信博主,看到会给大家解释~