Sqoop的安装和配置,Sqoop的数据导入导出,MySQL对hdfs数据的操作

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;

就可以查看表的内容了。

那么本次的教学就到这里,大家如果有什么疑问可以在评论区留言或者私信博主,看到会给大家解释~

相关推荐
SuperSpinach36 分钟前
mysql 报错Authentication method ‘caching_sha2_password‘ is not supported.
数据库·mysql
R.lin1 小时前
MySQL 性能优化最佳实践
数据库·mysql·性能优化
失散133 小时前
分布式专题——57 如何保证MySQL数据库到ES的数据一致性
java·数据库·分布式·mysql·elasticsearch·架构
kka杰5 小时前
MYSQL结构操作DDL指令1.数据库操作
数据库·mysql
Arva .6 小时前
MySQL 中的 MVCC
数据库·mysql
Boilermaker19926 小时前
【MySQL】数据目录与日志开篇
数据库·mysql
小满、9 小时前
MySQL :实用函数、约束、多表查询与事务隔离
数据库·mysql·事务·数据库函数·多表查询
weixin_5377658015 小时前
【数据库管理】MySQL主从复制详解
数据库·mysql
倚肆16 小时前
MySQL 配置文件属性详解
数据库·mysql
q***318918 小时前
深入解析HDFS:定义、架构、原理、应用场景及常用命令
hadoop·hdfs·架构