当前位置: 首页 > news >正文

sqoop的参数及初体验

基本命令

 常见的命令

公用参数:import

公用参数:数据库连接

公用参数:export

公用参数:hive

sqoop导入import

从RDBMS中以MySQL为例导出单表到HDFS,MySQL表中的每一行数据被视为HDFS中的一条记录所有记录都存储为文本数据。下面的语法格式将用于将数据导入HDFS。

sqoop import (generic-args) (import-args)

全量导入mysql表数据到HDFS

下面的命令用于从MySQL数据库服务器中的emp表导入HDFS。

sqoop import \
--connect jdbc:mysql://ip地址:3306/数据库 \
--username 用户名 \
--password 密码 \
--delete-target-dir \
--target-dir HDFS路径 \
--table 表名\
--m 1 \
--fields-terminated-by '\t'

--delete-target-dir:如果路径存在就自动删除

--target-dir:可以用来指定导出数据存放至HDFS的目录;

--m:是--num-mappers的缩写,表示启动N个mapper任务并行,默认4

--fields-terminated-by '\t':来指定分隔符

量导入mysql表数据到HIVE

先将关系型数据的表结构复制到hive

sqoop create-hive-table \
--connect jdbc:IP地址:3306/库名\
--username 用户名\
--password 密码 \
--table 表名\
--hive-table hive表名

备注:默认是false,即,如果目标表已经存在了,那么创建任务失败。

从关系数据库导入文件到hive中

sqoop import \
--connect jdbc:IP地址:3306/库名\
--username 用户名\
--password 密码 \
--table 表名\
--hive-table hive表名
--hive-import \
--m 1
导入表数据子集(where过滤)

where可以指定从关系数据库导入数据时的查询条件。它执行在数据库服务器相应的SQL查询,并将结果存储在HDFS的目标目录。

sqoop import \
--connect jdbc:IP地址:3306/库名\
--username 用户名\
--password 密码 \
--table 表名\
--where "条件语句" \
--hive-table hive表名
--hive-import \
--m 1
增量导入

在实际工作当中,数据的导入,很多时候都是只需要导入增量数据即可,并不需要将表中的数据每次都全部导入到hive或者hdfs当中去,这样会造成数据重复的问题。因此一般都是选用一些字段进行增量的导入,sqoop支持增量的导入数据,用于只导入比已经导入行新的数据行。其中,使用的参数为:

1、--check-column col      指定某一列

用来指定一些列,这些列在增量导入时用来检查这些数据是否作为增量数据进行导入,和关系型数据库中的自增字段及时间戳类似。

注意:这些被指定的列的类型不能使任意字符类型,如char、varchar等类型都是不可以的,同时-- check-column可以去指定多个列。

2、--incremental mode   (append / lastmodified 两种模式

增量导入数据分为两种方式:

  1. append:基于递增列的增量数据导入,必须为数值型
  2. lastmodified:基于时间列的数据增量导入,必须为时间戳类型

3、--last-value value   (指定大于的值)

指定自从上次导入后列的最大值(大于该指定的值),也可以自己设定某一值

append增量导入 (将mysql数据库表的id>3的值筛查出来并存放进HDFS路径)


sqoop import \
--connect jdbc:IP地址:3306/库名\
--username 用户名\
--password 密码 \
--table 表名\
--m 1 \
--target-dir HDFS路径 \
--incremental append \
--check-column id \
--last-value 3  // 同步时不包含词条数据


lastmodified增量导入 (将mysql表last_modified 字段大于等于"2023-11-18 20:52:02"的数据)


sqoop import \
--connect jdbc:IP地址:3306/库名\
--username 用户名\
--password 密码 \
--table 表名\
--target-dir HDFS路径 \
--m 1 \
--check-column last_modified \
--incremental lastmodified \
--last-value "2023-11-18 20:52:02"   // 同步时包含此条数据

sqoop导出export

默认情况下,sqoop export将每行输入记录转换成一条INSERT语句,添加到目标数据库表中。如果数据库中的表具有约束条件(例如,其值必须唯一的主键列)并且已有数据存在,则必须注意避免插入违反这些约束条件的记录。如果INSERT语句失败,导出过程将失败。此模式主要用于将记录导出到可以接收这些结果的空表中。通常用于全表数据导出。

导出时可以是将Hive表中的全部记录或者HDFS数据(可以是全部字段也可以部分字段)导出到Mysql目标表。

sqoop export \
--connect jdbc:IP地址:3306/库名\
--username 用户名\
--password 密码 \
--table 表名\
--export-dir HDFS文件路径

Sqoop的缺点

1、Sqoop属于Hadoop生态圈中一员,和Hadoop深度的绑定,Sqoop底层与MapReduce又是强耦合,不是解耦的,现在spark,flink技术的使用,使得sqoop的应用场景变少

2、目前已经从Apache下架,不再更新新版本

3、由于停更,只支持常见的RDBMS如MySQL、Oracle等和常见的Hadoop生态圈的HDFS、Hive等,对新产出的数据分析工具几乎没有相关联

相关文章:

  • RHCE 作业二(密钥登录实验)
  • 香港科技大学广州|先进材料学域金融科技学域博士招生宣讲会—天津大学专场!!!(暨全额奖学金政策)
  • 【LLM】Ollama:容器化并加载本地 GGUF 模型
  • 中国人寿财险广西分公司:金融助推乡村振兴全面发展
  • 如何改电脑网络ip地址完整教程
  • CS61A:SCHEME LIST
  • GitLab 提交权限校验脚本
  • 基于大模型的肛裂手术全流程预测与治疗方案研究报告
  • 部署私有gitlab网站
  • 相对论大师-记录型正负性质BFS/图论-链表/数据结构
  • 极狐GitLab 权限和角色如何设置?
  • 【 React 】重点知识总结 快速上手指南
  • AI智能健康小屋:未来健康管理的前沿阵地
  • 【C++游戏引擎开发】第21篇:基于物理渲染(PBR)——统计学解构材质与光影
  • 强化学习框架:OpenRLHF源码解读,模型处理
  • IOT项目——DIY Weather Station With ESP32
  • 几种Word转换PDF的常用方法
  • Linux学习笔记2
  • 【前端】【业务逻辑】 数据大屏自适应方案汇总
  • 如何在idea里创建注释模版
  • 中国泳协:新奥运周期竞争激烈,“三从一新”全力提升实力
  • 张又侠董军分别与印尼国防部长会见会谈
  • 秦洪看盘|热点凌乱难抑多头雄心
  • 视频丨普京称积极对待任何和平倡议
  • 大理杨徐邱上诉案开庭:当事人称曾接受过两次测谎测试
  • 商务部:服务业扩大开放试点任务多数来源于经营主体实际需要