1.sqoop介绍

Apache Sqoop是在Hadoop生态体系和RDBMS体系之间传送数据的一种工具。来自于Apache软件基金会提供。

Sqoop工作机制是将导入或导出命令翻译成mapreduce程序来实现。在翻译出的mapreduce中主要是对inputformat和outputformat进行定制。

Hadoop生态系统包括:HDFS、Hive、Hbase等

RDBMS体系包括:Mysql、Oracle、DB2等

Sqoop可以理解为:“SQL 到 Hadoop 和 Hadoop 到SQL”。

hive和impala 语法特性区别_hive和impala 语法特性区别


2.sqoop入门知识总结

  • sqoop 安装验证
bin/sqoop list-databases \
--connect jdbc:mysql://localhost:3306/ \
--username root --password hadoop

注意事项:命令携带参数必须出现在一行中,若换行就意味着自动提交执行,可通过\表示未结束。

  • 全量导入数据到hdfs
  • mysql的地址尽量不要使用localhost 请使用ip或者host
  • 如果不指定 导入到hdfs默认分隔符是 “,”
  • 可以通过-- fields-terminated-by '\ t‘ 指定具体的分隔符
  • 如果表的数据比较大 可以并行启动多个maptask执行导入操作,如果表没有主键,请指定根据哪个字段进行切分
bin/sqoop import \
--connect jdbc:mysql://node-1:3306/userdb \
--username root \
--password hadoop \
--target-dir /sqoopresult214 \
--fields-terminated-by '\t' \
--split-by id \
--table emp --m 2
  • 导入表数据子集(query查询)
使用 query sql 语句来进行查找不能加参数--table ;
并且必须要添加 where 条件;
并且 where 条件后面必须带一个$CONDITIONS 这个字符串;
并且这个 sql 语句必须用单引号,不能用双引号;
  • 增量数据的导入
  • 所谓的增量数据指的是上次至今中间新增加的数据
  • sqoop支持两种模式的增量导入
  • append追加 根据数值类型字段进行追加导入 大于指定的last-value
  • lastmodified 根据时间戳类型字段进行追加 大于等于指定的last-value
  • 注意在lastmodified 模式下 还分为两种情形:append merge-key
  • 关于lastmodified 中的两种模式:
  • append 只会追加增量数据到一个新的文件中 并且会产生数据的重复问题
    因为默认是从指定的last-value 大于等于其值的数据开始导入
  • merge-key 把增量的数据合并到一个文件中 处理追加增量数据之外 如果之前的数据有变化修改
    也可以进行修改操作 底层相当于进行了一次完整的mr作业。数据不会重复。
  • 数据导出操作
  • 注意:导出的目标表需要自己手动提前创建 也就是sqoop并不会帮我们创建复制表结构
  • 导出有三种模式:
  • 默认模式 目标表是空表 底层把数据一条条insert进去
  • 更新模式 底层是update语句
  • 调用模式 调用存储过程
  • 相关配置参数
  • 导出文件的分隔符 如果不指定 默认以“,”去切割读取数据文件 --input-fields-terminated-by
  • 如果文件的字段顺序和表中顺序不一致 需要–columns 指定 多个字段之间以","
  • 导出的时候需要指定导出数据的目的 export-dir 和导出到目标的表名或者存储过程名
  • 针对空字符串类型和非字符串类型的转换 “\n”
  • 更新导出
  • updateonly 只更新已经存在的数据 不会执行insert增加新的数据
  • allowinsert 更新已有的数据 插入新的数据 底层相当于insert&update