Sqoop 组件安装配置

下载和解压 Sqoop

tar -zxvf /opt/software/sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C /usr/local/src

将解压后生成的 sqoop-1.4.7.bin__hadoop-2.6.0 文件夹更名为 sqoop

[root@master ~]# cd /usr/local/src/
[root@master src]#mv /sqoop-1.4.7.bin__hadoop-2.6.0 sqoop

配置sqoop环境

步骤一:创建 Sqoop 的配置文件 sqoop-env.sh
复制 sqoop-env-template.sh 模板,并将模板重命名为 sqoop-env.sh

[root@master ~]# cd /usr/local/src/sqoop/conf/
[root@master conf]# cp sqoop-env-template.sh sqoop-env.sh

步骤二:修改 sqoop-env.sh 文件,添加 Hdoop、Hbase、Hive 等组件的安装路径。
注意:下面各组件的安装路径需要与实际环境中的安装路径保持一致

[root@master conf]# vi sqoop-env.sh
export HADOOP_COMMON_HOME=/usr/local/src/hadoop
export HADOOP_MAPRED_HOME=/usr/local/src/hadoop
export HBASE_HOME=/usr/local/src/hbase
export HIVE_HOME=/usr/local/src/hive

步骤三:配置 Linux 系统环境变量,添加 Sqoop 组件的路径

[root@master conf]# vi /etc/profile
#在文件末尾添加
# set sqoop environment
export SQOOP_HOME=/usr/local/src/sqoop
export PATH=$PATH:$SQOOP_HOME/bin
export CLASSPATH=$CLASSPATH:$SQOOP_HOME/lib

修改权限为Hadoop用户

[root@master src]#chown -R hadoop:hadoop sqoop

步骤四:连接数据库
注意:为了使 Sqoop 能够连接 MySQL 数据库,需要将/opt/software/mysql-connector-jav
a-5.1.46.jar 文件放入 sqoop 的 lib 目录中。该 jar 文件的版本需要与 MySQL 数据库的
版本相对应,否则 Sqoop 导入数据时会报错。

[root@master ~]# cp /opt/software/mysql-connector-java-5.1.46.jar /usr/local/src/sqoop/lib/

启动 Sqoop

步骤一:执行 Sqoop 前需要先启动 Hadoop 集群

:在 master 节点切换到 hadoop 用户执行 start-all.sh 命令启动 Hadoop 集群。

[root@master ~]# su - hadoop
[hadoop@master ~]$ source /etc/profile
[hadoop@master ~]$ start-all.sh

步骤二:检查 Hadoop 集群的运行状态。

[hadoop@master ~]$ jps
57921 NodeManager
57764 ResourceManager
57238 DataNode
57447 JournalNode
57992 Jps
57642 DFSZKFailoverController
57100 NameNode

步骤三:测试 Sqoop 是否能够正常连接 MySQL 数据库

能 够 查 看 到 MySQL 数 据 库 中 的 information_schema 、 hive 、 mysql 、performance_schema、sys 等数据库,说明 Sqoop 可以正常连接 MySQL。

[hadoop@master ~]$ sqoop list-databases --connect jdbc:mysql://127.0.0.1:3306/ --username root -P

21/04/19 12:42:27 INFO sqoop.Sqoop: Running Sqoop version: 1.4.7
Enter password: 
21/04/19 12:42:34 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset.
Mon Apr 19 12:42:34 CST 2021 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
information_schema
hive
mysql
performance_schema
sample
sys

步骤四:连接 hive

为了使 Sqoop 能够连接 Hive,需要将 hive 组件/usr/local/src/hive/lib 目录下的hive-common-2.0.0.jar 也放入 Sqoop 安装路径的 lib 目录中。

[hadoop@master ~] $ cp /usr/local/src/hive/lib/hive-common-2.0.0.jar /usr/local/src/sqoop/lib/

Sqoop 模板命令

步骤一:创建 MySQL 数据库和数据表。

# 登录 MySQL 数据库
[hadoop@master ~]$ mysql -uroot -p
Enter password:

# 创建 sample 库
mysql> create database sample;
Query OK, 1 row affected (0.00 sec)

# 使用 sample 库
mysql> use sample;

Database changed

mysql> create table student(number char(9) primary key, name varchar(10));
Query OK, 0 rows affected (0.01 sec)

# 创建 student 表,该数据表有number 学号和 name 姓名两个字段
# 向 student 表插入几条数据
mysql> insert into student values('01','zhangsan');
Query OK, 1 row affected (0.05 sec)

mysql> insert into student values('02','lisi');
Query OK, 1 row affected (0.01 sec)

mysql> insert into student values('03','wangwu');
Query OK, 1 row affected (0.00 sec)

# 查询 student 表的数据
mysql> select * from student;
+--------+----------+
| number | name |
+--------+----------+
| 01 | zhangsan |
| 02 | lisi |
| 03 | wangwu |
+--------+----------+
3 rows in set (0.00 sec)

mysql> exit;

步骤二:在 Hive 中创建 sample 数据库和 student 数据表。

[hadoop@master ~]$ hive     # 启动 hive 命令行

hive> create database sample; # 创建 sample 库
hive> show databases; # 查询所有数据库
hive> use sample; # 使用 sample 库
hive> create table student(number STRING, name STRING);# 创建 student 表
hive> exit; # 退出 hive 命令行

步骤三:从 MySQL 导出数据,导入 Hive

[hadoop@master ~]$sqoop import --connect jdbc:mysql://master:3306/sample --username root --password Password123$ --table student --fields-terminated-by '|' --delete-target-dir --num-mappers 1 --hive-import --hive-database sample --hive-table student

删除 MySQL 数据, student 表中 number 为主键,添加信息导致主键重复,报错,所以删除表数据

[hadoop@master ~]$mysql -u root -p 

mysql>use sample;
mysql>delete from student;
mysql>exit;

步骤四:从 Hive 导出数据,导入到 MySQL

[hadoop@master ~]$sqoop export --connect "jdbc:mysql://master:3306/sample?useUnicode=true&characterEncoding=utf-8" --username root --password Password123$ --table student --input-fields-terminated-by '|' --export-dir /user/hive/warehouse/sample.db/student/*

Sqoop 组件应用

(1)列出 MySQL 数据库中的所有数据库

[hadoop@master ~]$ sqoop list-databases -connect jdbc:mysql://localhost:3306/ -username root -password Password123$

(2)连接 MySQL 并列出 sample 数据库中的表

[hadoop@master ~]$sqoop list-tables -connect jdbc:mysql://localhost:3306/sample -username root -password Password123$

(3)将关系型数据的表结构复制到 hive 中,只是复制表的结构,表中的内容没有复制过去

[hadoop@master ~]$sqoop create-hive-table -connect jdbc:mysql://localhost:3306/sample -table student -username root -password Password123$ -hive-table test

其中–table student 为 MySQL 中的数据库 sample 中的表–hive-table test 为 hive中新建的表名称
(4)从关系数据库导入文件到 Hive 中

[hadoop@master ~]$sqoop import --connect jdbc:mysql://master:3306/sample --username root --password Password123$ --table student --delete-target-dir --num-mappers 1 --hive-import --hive-database default --hive-table test

(5)将 Hive 中的表数据导入到 MySQL 中,在进行导入之前,MySQL 中的表hive_test 表必须已经提前创建好

删除 MySQL 数据, student 表中 number 为主键,添加信息导致主键重复,报错,所以删除表数据

[hadoop@master ~]$mysql -u root -p 
mysql>use sample;
mysql>delete from student;
mysql>exit;

[hadoop@master ~]$sqoop export --connect jdbc:mysql://master:3306/sample --username root --password Password123$ --table student --input-fields-terminated-by '\001' --export-dir /user/hive/warehouse/test

(6)从数据库导出表的数据到 HDFS 上文件

[hadoop@master ~]$sqoop import --connect jdbc:mysql://master:3306/sample --username root --password Password123$ --table student --num-mappers 1 --target-dir /user/test

(7)从数据库增量导入表数据到 HDFS 中

[hadoop@master ~]$mysql -u root -p
mysql>use sample;
mysql> insert into student values('04','sss');
mysql> insert into student values('05','ss2');
mysql> insert into student values('06','ss3');

#非数值型的值不能当做增量
mysql> alter table student modify column number int;
mysql> exit;

[hadoop@master ~]$sqoop import --connect jdbc:mysql://master:3306/sample --username root --password Password123$ --table student --num-mappers 1 --target-dir /user/test --check-column number -incremental append -last-value 0

查看导入数据
[hadoop@master ~]$hdfs dfs -cat /user/test/part-m-00000

21/04/19 13:57:06 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
1,zhangsan
2,lisi
3,wangwu
4,sss
5,ss2
6,ss3

如多次导入需先查看最新导入数据文件
[hadoop@master ~]$hdfs dfs -ls /user/test

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值