sqoop

sqoop

产生背景

基于传统关系型数据库的稳定性,还是有很多企业将数据存储在关系型数据库中,早期由于工具的缺乏,hadoop与传统数据库之间的数据传输非常的困难,基于前两个方面的考虑,需要一个在传统关系型数据库 和hadoop之间进行数据传输的项目,sqoop应运而生

sqoop是什么

sqoop是一个用于hadoop和结构化存储(如关系型数据库之间进行高效传输大批量数据的工具,他包括两个方面,

​ 可以用sqoop将数据从关系型数据库管理系统如mysql导入到hadoop系统(hdfs,hive,hbase中

​ 将数据从hadoop系统中抽取并导出到关系型数据库中(如mysql)

常用的数据库开源工具

​ 1sqoop

​ 2datax

​ 3kettle

​ 4cannal

底层实现原理

sqoop的核心设计思想是利用mapreduce加快数据传输速度,也就是说sqoop的导入和导出功能都是基于maptask(只有map 的)mapreduce作业实现的,所以他是一种批处理方式进行数据传输,难以实现现实数据进行导入导出

特点

优点:他可以将跨平台的数据进行整合

缺点:他不是很灵活

主要执行操作

import:从关系型数据库到hadoop

export:从hadoop到关系型数据库

sqoop安装

解压

tar -zxvf /root/sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C /usr/local/
​
改名
mv sqoop-1.4.7.bin__hadoop-2.6.0 sqoop1.4.7
​
修改环境变量
​
export SQOOP_HOME=/usr/local/sqoop1.4.7
export PATH=$PATH:$SQOOP_HOME/bin

新建配置文件

mv ./conf/sqoop-env-template.sh ./conf/sqoop-env.sh

修改配置文件

vi ./conf/sqoop-env.sh

安装hadoop系列的目录

export HADOOP_COMMON_HOME=/opt/soft/hadoop/hadoop-2.7.6
export HADOOP_MAPRED_HOME=/opt/soft/hadoop/hadoop-2.7.6
export HIVE_HOME=/opt/soft/hive-2.3.7
export ZOOCFGDIR=/opt/apps/zookeeper

拷贝mysql驱动

因为我们必须现在通过jdbc和hdfs等进行数据的导入导出,所以我们先必须把jdbc的驱动包拷贝到sqoop/lib路径下

cp /root/mysql-connector-java-5.1.38.jar ./lib/

验证安装

sqoop version

sqoop命令执行

常见的命令执行参数

sqoop help查看常见的命令行

直接执行命令

通过参数查看数据库
sqoop list-databases --connect jdbc:mysql://localhost:3306 --username root --password 123456

通过文件传递参数(脚本)

在执行sqoop命令时,如果每次执行的命令都相似,那么把相同的参数可以抽取出来放在一个文本本件里,把执行时的参数加入到这个文本文件为参数即可这个文本文件可以用 --option-file来指定,平时可以用定时任务来执行这个脚本,避免每次手工操作

jdbc的参数一般是不变的,可以把他抽离出来放在一个文件中放在sqoop根目录下config.conf里

list-databases
--connect
jdbc:mysql://local:3306
--username
root
--password
123456

我们可以执行命令链接数据库

sqoop --option-file config.conf

为了让配置文件config.txt的可读性更像可以加入空行和注释

不会影响文件内容的读取

#指令:列出mysql中的所有数据库
list-databases
​
#指定链接字符串
--connect
jdbc:mysql://localhost:3306
​
--username
root
​
--password
123456

import详解

import是从关系数据库导入到hadoop下面是一些通用参数的介绍

通过参数

--connect 指定jdbc链接字符串
--connection-manager 指定链接管理类
--driver 指定链接的驱动程序
-P 从控制台读取密码(可以防止密码显示控制台)
--password 指定数据库的密码
--username 只当访问数据库的用户名

连接数据库

​ sqoop的设计就是把数据库导入hdfs,所以必须指定连接的字符串再能访问数据库,这个链接字符类似于url这个来连接字符串通过--connect参数指定,它描述了链接的数据库地址和具体的链接数据库

sqoop import --connect jdbc:msyql://database.example.com/employees
#指定链接的数据库服务器地址是database.example.com,要连接的数据库是employees

上面链接命令只是指定数据库,默认情况下,数据库都是需要用户名和参数的,这里可以用--username和--password来指定

#指定用户名和密码来链接数据库

sqoop import --connect jdbc:mysql://localhost:3306/mysql --username root --password 123456

查看数据库

在sqoop中可以通过list-databases参数来查看mysql的数据库,这样在导入之前可以得到所有数据库的名字

#列出所有数据库
sqoop list-databases --connect jdbc:mysql://localhost:3306 --username root -password 123456

查看所有表

在得到所有的数据库的名字后,也可以查看当前数据库中 的所有表,使用list-tables参数来进行查看,查看的时候可以在url连接中指定数据库的名字

#列出数据库中所有表
sqoop list-tables --connect jdbc:mysql://localhost:3306/leetom --username root --password 123456

import的参数控制

--append        通过追加的方式导入到hdfs
--as-avrodatafile   导入为avro data文件格式
--as-sequencefile   导入为sequenceFiles文件格式
--as-textfile       导入为文本格式(默认值)
--as-parquefile     导入为parquet文件格式
--columns           指定要导入的列
--delete-target-dir     如果目标文件夹存在,则删除
--fetch-size        一次从数据库读取的数量大小
-m,--num-mappers    n用来指定map tasks的数量,用来做并行导入
-e,--query          指定要查询的sql语句
--split-by          指定要分片的列
--table             需要导入的表明
--target-dir        hdfs的目标文件夹
--where             用来指定导入
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值