栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Sqoop基础知识(个人总结)

Sqoop基础知识(个人总结)

    声明: 1. 本文为我的个人复习总结, 并非那种从零基础开始普及知识 内容详细全面, 言辞官方的文章
              2. 由于是个人总结, 所以用最精简的话语来写文章
              3. 若有错误不当之处, 请指出

Sqoop是关系型数据库和Hadoop大数据平台间的导入导出工具

底层是4个MapTask

导入数据:
  1. RDBMS到HDFS

(1)全部导入

bin/sqoop import

–connect jdbc:mysql://hadoop101:3306/company

–username root

–password root12345

–table staff

–target-dir /user/company

–delete-target-dir

–num-mappers 1

–fields-terminated-by “t”

(2)查询导入

bin/sqoop import

–connect jdbc:mysql://hadoop101:3306/company

–username root

–password root12345

-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 ‘$CONDITIONS’ in WHERe clause. 这是为了map拆分任务时能添加条件,若原本不想过滤可以写作 where 1=1 and $CONDITIONS;

如果query后使用的是双引号, 则$CONDITIONS前必须加转义符, 防止shell识别为自己的变量。

(3)导入指定列

bin/sqoop import

–connect jdbc:mysql://hadoop101:3306/company

–username root

–password root12345

–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://hadoop101:3306/company

–username root

–password root12345

–target-dir /user/company

–delete-target-dir

–num-mappers 1

–fields-terminated-by “t”

–table staff

-where “id=1”

  1. RDBMS到Hive

第一步 将数据导入到HDFS, 默认的临时目录是/user/用户名/表名

bin/sqoop import

–connect jdbc:mysql://hadoop101:3306/company

–username root

–password root12345

–table staff

–num-mappers 1

–hive-import

–fields-terminated-by “t”

–hive-overwrite

–hive-table staff_hive

第二步 将导入到HDFS的数据迁移到Hive仓库

  1. RDBMS到Hbase

​ 得提前创建好表

bin/sqoop import

–connect jdbc:mysql://hadoop101:3306/company

–username root

–password root12345

–table company

–columns “id,name,sex”

–column-family “info”

–hbase-row-key “id”

–hbase-table “hbase_company”

–num-mappers 1

–split-by id

导出数据:

导出数据时,只能把HDFS文件导出, 其他导出不支持;
Hive/Hbase导出实质也是HDFS导出,跟Hive/Hbase没关系

由于是文件操作, 所以不支持选择部分字段和加过滤条件等, 相当于只能select * from table;

$ bin/sqoop export 
--connect jdbc:mysql://hadoop101:3306/company 
--username root 
--password root12345 
--table user 
--num-mappers 1 
--export-dir /user/hive/warehouse/user 
--input-fields-terminated-by "t"
Sqoop导入导出Null存储一致性问题

Hive中的Null在底层是以“N”来存储, 而MySQL中的Null在底层就是Null, 为了保证数据两端的匹配:

导出数据时采用 --input-null-string和–input-null-non-string两个参数

导入数据时采用 --null-string和–null-non-string两个参数

事务原子性问题:

多个MapTask间, 有的成功了有的失败了, 不满足原子性

解决办法:

  1. 设置map数量为1个(不推荐)

  2. 加参数

​ --staging-table user

​ --clear-staging-table

Sqoop在导入数据的时候数据倾斜
  1. split-by: 指明按哪个字段作为参考来分割任务, 来切分表的工作单元;

    ​ 那个**$CONDITIONS** 就是根据数据范围划分任务的;

    ​ 它们两个要结合使用

  2. 通过rownum( ) over( ) as lineNum, 结合split-by lineNum

  3. 把热点key 拼接固定区间内的随机值变得打乱

  4. num-mappers: 并行执行N个MapTask

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/350491.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号