Sqoop工具

BUG之神 44

Sqoop是一个开源的数据抽取工具,它可以快速的将hdfs中的数据抽取到结构化数据库中,也可以从结构化数据库中把数据写入到hdfs中

Sqoop的配置类似于Hive,需要在大数据集群中任一节点上搭建sqoop,这个节点就是sqoop的客户端。

Sqoop工具


在slave3节点中搭建sqoop

1.将安装包上传到slave3的/root/app

Sqoop工具

安装Sqoop

[root@slave3 ~]# cd /root/app

[root@slave3 app]# tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz

[root@slave3 app]# rm -rf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz

[root@slave3 app]# cd sqoop-1.4.6.bin__hadoop-2.0.4-alpha/

[root@slave3 sqoop-1.4.6.bin__hadoop-2.0.4-alpha]# pwd

/root/app/sqoop-1.4.6.bin__hadoop-2.0.4-alpha

配置环境变量

[root@slave3 sqoop-1.4.6.bin__hadoop-2.0.4-alpha]# vim /etc/profile

#sqoop path

export SQOOP_HOME=/root/app/sqoop-1.4.6.bin__hadoop-2.0.4-alpha

export PATH=$PATH:$SQOOP_HOME/bin

[root@slave3 sqoop-1.4.6.bin__hadoop-2.0.4-alpha]# source /etc/profile

 

配置sqoop

[root@slave3 sqoop-1.4.6.bin__hadoop-2.0.4-alpha]# cd conf

[root@slave3 conf]# ls

oraoop-site-template.xml  sqoop-env-template.sh    sqoop-site.xml

sqoop-env-template.cmd    sqoop-site-template.xml

 

[root@slave3 conf]# cp sqoop-env-template.sh sqoop-env.sh

[root@slave3 conf]# vim sqoop-env.sh

export HADOOP_COMMON_HOME=/root/app/hadoop-2.7.7

export HADOOP_MAPRED_HOME=/root/app/hadoop-2.7.7

修改这两项:

Sqoop工具

将sqoop接口包上传到/root/app/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/lib目录下

Sqoop工具

至此,Sqoop安装完成


Sqoop工具的应用

*****************************创建数据库和数据表开始**************************

一、在win10的navicate中连接上slave3中的mysql

直接连接会报错:navicate:192.168...is not alowed to connect

进入slave中,执行下列语句:

 

1、连接MySQL服务器: mysql -phost -u root -p

 

2、看当前所有数据库:show databases;

 

3、进入mysql数据库:use mysql;

 

4、查看mysql数据库中所有表:show tables;

 

5、查看user表中数据:select Host, User from user;

 

6、修改user表中的Host:update user set Host='%' where User='root';

 

其中第6步如有报错:ERROR 1062 (23000): Duplicate entry '%-root' for key 'PRIMARY' 不予理会,直接执行第7步

7、刷新:flush privileges;

此时再连接就能连接上了

Sqoop工具

创建数据库bigdata和student表

Sqoop工具

插入数据:

Sqoop工具

SQL:

INSERT INTO `student`(`id`, `name`, `sex`) VALUES (20221023, '李四', '男');

INSERT INTO `student`(`id`, `name`, `sex`) VALUES (20221188, '张三', '男');

INSERT INTO `student`(`id`, `name`, `sex`) VALUES (20221321, '韩梅梅', '女');

*****************************创建数据库和数据表结束**************************

经过上面的步骤后,centos 下mysql使用密码root登录不了,navicat使用密码root又能连上

造成这种情况的原因是数据库mysql中的数据表user中没有localhost记录了

Sqoop工具

可以参考MySQL修改密码终极方法.docx操作试试

但是我这里操作成功了localhost登录没有了mysql,应该是执行过程中哪里出错了

我们这里直接指定登录主机为127.0.0.1登录即可

即登录mysql使用:密码还是root

[root@slave3 ~]# mysql -h 127.0.0.1 -u root -p

 

 

显示所有数据库

[root@slave3 ~]# sqoop list-databases --connect jdbc:mysql://127.0.0.1:3306/ --username root --password root

information_schema

bigdata

hive_metadata

mysql

performance_schema

 

显示指定数据库下所有表

[root@slave3 ~]# sqoop list-tables --connect jdbc:mysql://127.0.0.1:3306/bigdata --username root -password root

student

 

使用sqoop导入Mysql数据到HDFS中

需先确保output目录不存在,执行一下删除目录命令

[root@slave3 ~]# hadoop fs -rmr /output

sqoop import --connect jdbc:mysql://127.0.0.1:3306/bigdata --username root --password root --table student -m 1 --target-dir '/output/sqoop' --fields-terminated-by '\t'

参数说明:

--table  student表示从bigdata数据库中的student表获取数据

--target-dir  '/output/sqoop' 表示将数据输出到hdfs的/output/sqoop目录中

-m  1表示设置mapreduce的数量,sqoop的底层实现也是mapreduce,所以sqoop的运行也是以作业的方式运行。

--fields-terminated-by  '\t‘表示将数据写入hdfs后,数据之间用制表符分隔

执行:

[root@slave3 ~]sqoop import --connect jdbc:mysql://127.0.0.1:3306/bigdata --username root --password root --table student -m 1 --target-dir '/output/sqoop' --fields-terminated-by '\t'

 

执行完成:

Sqoop工具

查看写入hdfs的数据:

[root@slave3 ~]# hadoop fs -cat /output/sqoop/p*

20221023 李四 男

20221188 张三 男

20221321 韩梅梅 男

 

到此,代表从mysql导出数据写入hdfs成功

 

将数据写入到mysql中

注意:从HDFS导出数据到Mysql中,接收数据的表必须事先存在

为了看到实验的效果,先将bigdata数据库下的student表清空

Sqoop工具

将hdfs的数据写入到mysql中:

注意从hdfs导出数据到mysql中时,必须设置字符编码集,因为二者编码不一样,不设置可能会出现中文乱码的问题:

[root@slave3 ~]# sqoop  export  --connect  jdbc:mysql://127.0.0.1:3306/bigdata?characterEncoding=UTF-8  --username  root  -password  root  --table  student  --export-dir  '/output/sqoop/p*'  --fields-terminated-by  '\t'

执行成功后到navicat中查看,发现数据写入成功!

Sqoop工具


 

分享