Apache Sqoop篇

Apache 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
上一篇:Sqoop


下一篇:如何利用Fiddler4进行Android APP / IOS APP抓包