Sqoop 组件安装与配置


目录:

Sqoop 组件安装与配置

1.下载和解压 Sqoop

Sqoop相关发行版本可以通过官网 https://mirror-hk.koddos.net/apache/sqoop/来

获取

[root@master local]# tar -xvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz  -C /usr/local/

[root@master local]# ln -s /usr/local/sqoop-1.4.7.bin__hadoop-2.6.0  /usr/local/sqoop

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

# 修改 sqoop-env.sh 文件,添加 Hdoop、Hbase、Hive 等组件的安装路径。
[root@master conf]# vim sqoop-env.sh 
export HADOOP_COMMON_HOME=/usr/local/hadoop
export HADOOP_MAPRED_HOME=/usr/local/hadoop
export HBASE_HOME=/usr/local/hbase
export HIVE_HOME=/usr/local/hive

[root@master conf]# cd /usr/local/sqoop/conf/
export SQOOP_HOME=/usr/local/sqoop
export CLASSPATH=$CLASSPATH:$SQOOP_HOME/lib

export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:$ZOOKEEPER_HOME/bin:$HBASE_HOME/bin:$SQOOP_HOME/bin

# 连接数据库
[root@master conf]# cp /opt/software/mysql-connector-java-5.1.49/mysql-connector-java-5.1.49.jar  /usr/local/sqoop/lib/

[hadoop@master conf]# cp /opt/software/avro-1.11.0.jar  /usr/local/sqoop/lib/

2. 启动 Sqoop

[root@master ~]# chown hadoop.hadoop -R /usr/local/sqoop 
[hadoop@master sqoop]$ cp sqoop-1.4.7.jar  /usr/local/hadoop/lib
[hadoop@master sqoop]$ cp sqoop-1.4.7.jar  /usr/local/hadoop/share/hadoop/yarn/
[root@master ~]# su - hadoop
[hadoop@master ~]$ source /etc/profile
[hadoop@master ~]$ start-all.sh 
[hadoop@master ~]$ jps
120960 NameNode
121604 ResourceManager
122276 Jps
121341 SecondaryNameNode

# Sqoop 连接 MySQL 数据库 -P 大写 密码
[hadoop@master ~]$ sqoop list-databases --connect jdbc:mysql://localhost:3306/ --username root -P
Warning: /usr/local/sqoop/../hcatalog does not exist! HCatalog jobs will fail.
Please set $HCAT_HOME to the root of your HCatalog installation.
Warning: /usr/local/sqoop/../accumulo does not exist! Accumulo imports will fail.
Please set $ACCUMULO_HOME to the root of your Accumulo installation.
22/04/20 15:59:52 INFO sqoop.Sqoop: Running Sqoop version: 1.4.7
Enter password: 
22/04/20 15:59:55 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset.
Wed Apr 20 15:59:55 CST 2022 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
mysql
performance_schema
sys

3.连接 hive

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

4.Sqoop 模板命令

# 步骤一:创建 MySQL 数据库和数据表。
# 创建 sample 数据库,在 sample 中创建 student 表,在 student 表中插入了 3 条数据。
# 登录 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)
mysql> 
mysql> 
# 查询 student 表的数据
mysql> select * from student;
+--------+----------+
6
| number | name |
+--------+----------+
| 01 | zhangsan |
| 02 | lisi |
| 03 | wangwu |
+--------+----------+
3 rows in set (0.00 sec)
mysql> 
mysql> exit

# 步骤二:在 Hive 中创建 sample 数据库和 student 数据表。
[hadoop@master ~]$ hive # 启动 hive 命令行
Logging initialized using configuration in 
jar:file:/usr/local/src/hive/lib/hive-common-1.1.0.jar!/hive￾log4j.properties
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in 
[jar:file:/usr/hadoop/share/hadoop/common/lib/slf4j-log4j12-
1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/src/hive/lib/hive￾jdbc-1.1.0-
standalone.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings 
for an explanation.
SLF4J: Actual binding is of type 
[org.slf4j.impl.Log4jLoggerFactory]
hive> create database sample; # 创建 sample 库
OK
Time taken: 0.679 seconds
hive> show databases; # 查询所有数据库
OK
default
Time taken: 0.178 seconds, Fetched: 2 row(s)
hive> use sample; # 使用 sample 库
OK
hive> create table student(number STRING, name STRING) 
row format delimited 
fields terminated by "|" 
stored as textfile; # 创建 student 表
OK
hive> exit; # 退出 hive 命令行

# 步骤三:从 MySQL 导出数据,导入 Hive。
# 需要说明该命令的以下几个参数:
# 1)--connect:MySQL 数据库连接 URL。 2)--username 和--password:MySQL 数据库的用户名和密码。
# 3)--table:导出的数据表名。
# 4)--fields-terminated-by:Hive 中字段分隔符。
# 5)--delete-target-dir:删除导出目的目录。
# 6)--num-mappers:Hadoop 执行 Sqoop 导入导出启动的 map 任务数。
# 7)--hive-import --hive-database:导出到 Hive 的数据库名。
# 8)--hive-table:导出到 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 #密码 Password123$
mysql>use sample;
mysql>delete from student;
mysql>exit;
# 步骤四:从 Hive 导出数据,导入到 MySQL。
# 需要说明该命令的以下几个参数:
# 1)--connect:MySQL 数据库连接 URL。 
# 2)--username 和--password:MySQL 数据库的用户名和密码。
# 3)--table:导出的数据表名。
# 4)--fields-terminated-by:Hive 中字段分隔符。
# 6)--export-dir:Hive 数据表在 HDFS 中的存储路径。
[hadoop@master ~]$ sqoop export --connect 
"jdbc:mysql://master:3306/sample?useUnicode=true&characterEncoding=utf-8" --username root --password root123 --table student --input-fields-terminated-by '|' --export-dir /user/hive/warehouse/sample.db/student/*

5.Sqoop 组件应用

# Sqoop 常用设置命令如下:
# (1)列出 MySQL 数据库中的所有数据库。
[hadoop@master ~]$ sqoop list-databases --connect jdbc:mysql://localhost:3306/ --username root --password root123
#(2)连接 MySQL 并列出 sample 数据库中的表。
[hadoop@master ~]$ sqoop list-tables --connect jdbc:mysql://localhost:3306/sample --username root --password root123
#(3)将关系型数据的表结构复制到 hive 中,只是复制表的结构,表中的内容没有复制过去。
[hadoop@master ~]$ sqoop create-hive-table --connect jdbc:mysql://localhost:3306/sample --table student --username root --password root123 --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 root123 --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 #密码 root123
mysql>use sample;
mysql>delete from student;
mysql>exit;
[hadoop@master ~]$ sqoop export --connect jdbc:mysql://master:3306/sample --username root --password root123 --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 root123 --table student --num-mappers 1 --target-dir /user/test
#(7)从数据库增量导入表数据到 HDFS 中。
# 密码 root123
[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 root123 --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