- 一 Sqoop简介
- 二 Sqoop原理
- 三 Sqoop安装
- 1 下载并解压
- 1) 下载地址
- 2) 上传安装包sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz到虚拟机中
- 3) 解压sqoop安装包到指定目录,如:
- 2 修改配置文件
- 1) 重命名配置文件
- 2) 修改配置文件
- 3 拷贝JDBC驱动
- 4 验证Sqoop
- 5 测试Sqoop是否能够成功连接数据库
- 四 Sqoop的简单使用案例
- 1 导入数据
- 1.1 RDBMS到HDFS
二 Sqoop原理Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql…)间进行数据的传递,可以将一个关系型数据库(例如
: MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
Sqoop2的最新版本是1.99.7。请注意,2与1不兼容,且特征不完整,它并不打算用于生产部署。c
将导入或导出命令翻译成mapreduce程序来实现。
三 Sqoop安装在翻译出的mapreduce中主要是对inputformat和outputformat进行定制。
安装Sqoop的前提是已经具备Java和Hadoop的环境。
1 下载并解压 1) 下载地址https://sqoop.apache.org/2) 上传安装包sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz到虚拟机中 3) 解压sqoop安装包到指定目录,如:
$ tar -zxf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C /opt/module/2 修改配置文件
Sqoop的配置文件与大多数大数据框架类似,在sqoop根目录下的conf目录中。
1) 重命名配置文件$ mv sqoop-env-template.sh sqoop-env.sh2) 修改配置文件
sqoop-env.sh
export HADOOP_COMMON_HOME=/opt/module/hadoop-3.1.3 export HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3 export HIVE_HOME=/opt/module/hive-3.1.2 export ZOOKEEPER_HOME=/opt/module/zookeeper-3.5.7 export ZOOCFGDIR=/opt/module/zookeeper-3.5.7 export Hbase_HOME=/opt/module/hbase-1.3.13 拷贝JDBC驱动
拷贝jdbc驱动到sqoop的lib目录下,如
看你的jar包叫什么
$ cp mysql-connector-java-5.1.27-bin.jar /opt/module/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/lib/
4 验证Sqoop我们可以通过某一个command来验证sqoop配置是否正确
$ bin/sqoop help
出现一些Warning警告(警告信息已省略),并伴随着帮助命令的输出
[atguigu@hadoop102 sqoop-1.4.6]$ bin/sqoop help Warning: /opt/module/sqoop-1.4.6/bin/../../hcatalog does not exist! HCatalog jobs will fail. Please set $HCAT_HOME to the root of your HCatalog installation. Warning: /opt/module/sqoop-1.4.6/bin/../../accumulo does not exist! Accumulo imports will fail. Please set $ACCUMULO_HOME to the root of your Accumulo installation. SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/opt/module/hadoop-3.1.3/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/opt/module/hbase-1.3.1/lib/slf4j-log4j12-1.7.5.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] 2021-12-21 16:22:35,273 INFO [main] sqoop.Sqoop (Sqoop.java:5 测试Sqoop是否能够成功连接数据库(92)) - Running Sqoop version: 1.4.6 usage: sqoop COMMAND [ARGS] Available commands: codegen Generate code to interact with database records create-hive-table import a table definition into Hive eval evaluate a SQL statement and display the results export Export an HDFS directory to a database table help List available commands import import a table from a database to HDFS import-all-tables import tables from a database to HDFS import-mainframe import datasets from a mainframe server to HDFS job Work with saved jobs list-databases List available databases on a server list-tables List available tables in a database merge Merge results of incremental imports metastore Run a standalone Sqoop metastore version Display version information See 'sqoop help COMMAND' for information on a specific command.
$ bin/sqoop list-databases --connect jdbc:mysql://hadoop102:3306/ --username root --password 000000
出现如下输出
information_schema metastore mysql oozie performance_schema四 Sqoop的简单使用案例 1 导入数据
1.1 RDBMS到HDFS在Sqoop中,“导入”概念指:从非大数据集群(RDBMS)向大数据集群(HDFS,HIVE,Hbase)中传输数据,叫做:导入,即使用import关键字。
- 确定Mysql服务开启正常
- 在Mysql中新建一张表并插入一些数据
$ mysql -uroot -p000000 mysql> create database company; mysql> create table company.staff(id int(4) primary key not null auto_increment, name varchar(255), sex varchar(255)); mysql> insert into company.staff(name, sex) values('Thomas', 'Male'); mysql> insert into company.staff(name, sex) values('Catalina', 'FeMale');
-
导入数据
(1)全部导入
$ bin/sqoop import --connect jdbc:mysql://hadoop102:3306/company --username root --password 000000 --table staff --target-dir /user/company --delete-target-dir --num-mappers 1 --fields-terminated-by "t" 介绍 target-dir /user/company 导入到那个目录 target-dir /user/company map数 --fields-terminated-by "t" 分割
(2)查询导入
$ bin/sqoop import --connect jdbc:mysql://hadoop102:3306/company --username root --password 000000 --target-dir /user/company --delete-target-dir --num-mappers 1 --fields-terminated-by "t" --query 'select name,sex from staff where id <=1 and $CONDITIONS;'
提示:must contain '
C
O
N
D
I
T
I
O
N
S
′
i
n
W
H
E
R
E
c
l
a
u
s
e
.
如
果
q
u
e
r
y
后
使
用
的
是
双
引
号
,
则
CONDITIONS' in WHERe clause. 如果query后使用的是双引号,则
CONDITIONS′inWHEREclause.如果query后使用的是双引号,则CONDITIONS前必须加转移符,防止shell识别为自己的变量。
做传递用的:$CONDITIONS
(3)导入指定列
$ bin/sqoop import --connect jdbc:mysql://hadoop102:3306/company --username root --password 000000 --target-dir /user/company --delete-target-dir --num-mappers 1 --fields-terminated-by "t" --columns id,sex --table staff
提示:columns中如果涉及到多列,用逗号分隔,分隔时不要添加空格
(4)使用sqoop关键字筛选查询导入数据
$ bin/sqoop import --connect jdbc:mysql://hadoop102:3306/company --username root --password 000000 --target-dir /user/company --delete-target-dir --num-mappers 1 --fields-terminated-by "t" --table staff --where "id=1"
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)