Sqoop的介绍和安装
sqoop下载地址://share.weiyun.com/woVbfnfS
或者 //archive.apache.org/dist/sqoop/1.99.7/
一、Sqoop简介
sqoop 是 apache 旗下一款“Hadoop 和关系数据库服务器之间传送数据”的工具。
核心的功能有两个:导入、导出
导入数据:MySQL,Oracle 导入数据到 Hadoop 的 HDFS、HIVE、HBASE 等数据存储系统
导出数据:从 Hadoop 的文件系统中导出数据到关系数据库 mysql 等
sqoop本质是迁移数据, 迁移的方式:就是把sqoop的迁移命令转换成MR程序
hive本质就是执行计算,依赖于HDFS存储数据,把SQL转换成MR程序
二、Sqoop的安装
(1) 解压到指定目录:
tar -zxvf /bigData/software/sqoop-1.99.7-bin-hadoop200.tar.gz -C /bigData/install/
(2) 修改mapreduce.configuration.directory的目录
cd /bigData/install/sqoop-1.99.7-bin-hadoop200/conf/
修改sqoop.properties文件 修改org.apache.sqoop.submission.engine.mapreduce.configuration.directory=/bigData/install/hadoop-3.1.4/etc/hadoop/配置
(3)配置环境变量
添加export SQOOP_HOME=/bigData/install/sqoop-1.99.7-bin-hadoop200,在PATH路径下添加$SQOOP_HOME/bin路径。
(4)添加mysql驱动 将mysql驱动包放在sqoop安装目录的server/lib目录下。
ll |grep mysql
(5) 验证配置
① sqoop2-tool upgrade
若出现“Caused by: java.lang.SecurityException: sealing violation: package org.apache.derby.impl.jdbc.authentication is sealed”错误。
需要查看/bigData/install/sqoop-1.99.7-bin-hadoop200/bin目录下的derby版本信息和hive目录下的版本信息做对比。
将sqoop目录下的derby重命名
cd /bigData/install/sqoop-1.99.7-bin-hadoop200/server/lib/
mv derby-10.8.2.2.jar derby-10.8.2.2.jar.back
hive目录下的derby库复制过来。
cp /bigData/install/apache-hive-3.1.2-bin/lib/derby-10.14.1.0.jar ./
使用 如下命令查看 版本是否正确
ll *derby*
再次输入如下命令,验证
sqoop2-tool upgrade
② 继续验证 sqoop2-tool verify
若出现“Exception in thread “main” java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V”错误,
需要对比hive与sqoop目录下的guava库的版本:
cd /bigData/install/apache-hive-3.1.2-bin/lib
ll *guava*
查看sqoop下的guava版本,发现当前sqoop使用的guava版本均为11.0.2,需要修改:
cd /bigData/install/sqoop-1.99.7-bin-hadoop200
find . -name *guava*
将名称修改掉:mv ./tools/lib/guava-11.0.2.jar xxxxxxxxx/guava-11.0.2.jar.back
然后将hive下的guava复制到sqoop目录下:cp ./server/lib/guava-27.0-jre.jar xxx/
② 继续验证 sqoop2-tool verify
三、启动服务端/客户端
- 启动命令
sqoop2-server start
-
关闭命令 sqoop2-server stop
查看进程信息:
打开cli客户端命令:sqoop2-shell
四、使用
1、登入mysql,创建对应的数据库和表:
create database test;
use test;
CREATE TABLE student( id int, name varchar(10), PRIMARY KEY(id ));
insert into student values(1,’gqx’);
insert into student values(2,’LiSi’);
insert into student values(3,’WangWu’);
select * from student;
2、准备hdfs实验数据
$ vim test01.txt
4,’Alice’,
5,’Bob’
$ hdfs dfs -put test01.txt /
3、修改hadoop配置
为了能查看sqoop2 status,编辑hadoop的 mapred-site.xml
vim $HADOOP_HOME/etc/hadoop/mapred-site.xml
添加如下配置
<property> <name>mapreduce.jobhistory.address</name> <value>node1:10020</value> </property> <property>
4、创建链接配置
列举所有连接:show connector
建立hdfs的连接: create link –connector hdfs-connector
建立mysql的连接:create link –connector generic-jdbc-connector
查看已经建好的link
5、创建job
sqoop:000>create job -f jdbc-link01 -t hdfs-link01
Creating job for links with from name jdbc-link01 and to name hdfs-link01
Please fill following values to create new job object
Name: jdbctohdfs01 (#job名字,必填)
Database source
Schema name: dbtest1 (#数据库名字,必填)
Table name: test1 (#数据表名字,必填)
SQL statement: (#就是sql查询语句,可选的,直接回车就好)
Column names: (# 重写数据相关的一些参数,可选,直接回车就好)
There are currently 0 values in the list:
element#
Partition column: (#分割的列,也就是将最终文件分割为多个,默认导入到一个文件)
Partition column nullable:
Boundary query:
Incremental read
Check column:
Last value:
Target configuration
Override null value:
Null value:
File format: (#文件格式,这里选择0,TEXT_FILE)
0 : TEXT_FILE
1 : SEQUENCE_FILE
2 : PARQUET_FILE
Choose: 0
Compression codec: (#压缩编码器,这里不压缩,选择0)
0 : NONE
1 : DEFAULT
2 : DEFLATE
3 : GZIP
4 : BZIP2
5 : LZO
6 : LZ4
7 : SNAPPY
8 : CUSTOM
Choose: 0
Custom codec: (#自定义的编码器,这里也不需要,直接回车)
Output directory: /hdfstest1 (#输出hdfs路径,必填切目录下必须为空,可以为没有建的目录)
Append mode: (#用于指定是否是在已存在导出文件的情况下将新数据追加到数据文件中。可选回车)
Throttling resources
Extractors: (#可选,对应 mapreduce 的 job 中 map 的数量。这里直接回车)
Loaders: (#可选,对应 mapreduce 的 job 中的 reduce 的数量。这里直接回车)
Classpath configuration
Extra mapper jars:
There are currently 0 values in the list:
element# (# Classpath配置,如:需要添加任务额外的jar包,这里直接回车)
Job was successfully updated with status OK