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

Sqoop 八股文

Sqoop 八股文

Sqoop 八股文

Sqoop1 和 Sqoop2 区别

架构

Sqoop 1Sqoop 2 Sqoop导入导出 Null 存储一致性Sqoop数据导出一致性问题Sqoop导出的事务Sqoop底层运行的任务

导入导出 Sqoop 在导入数据的数据倾斜问题Sqoop 数据导出 ParquetSqoop同步策略

全量同步策略增量同步策略新增及变化策略特殊策略 sqoop 导入 hdfs 出现 oom 是什么原因Sqoop 底层为什么默认是 4 个Map

Sqoop1 和 Sqoop2 区别
功能Sqoop1Sqoop2
RDBMS 的连接器支持不支持 解决办法: 使用已在以下数据库上执行测试的通用 JDBC 连接器: Microsoft SQL Server 、 PostgreSQL 、 MySQL 和 Oracle 此连接器应在任何其它符合 JDBC 要求的数据库上运行。但是,性能可能无法与 Sqoop 中的专用连接器相比
Kerberos 安全集成支持不支持
数据从 RDBMS 传输至 Hive 或 Hbase支持不支持 解决办法: 将数据从 RDBMS 导入 HDFS 在 Hive 中使用相应的工具和命令(如: LOAD DATA 语句),手动将数据载入 Hive 或 Hbase
数据从 Hive 或 Hbase 传输至 RDBMS不支持 解决办法: 从 Hive 或 Hbase 将数据提取至 HDFS (作为文本或 Avro 文件) 使用 Sqoop 将上一步的输出导出至 RDBMS不支持 同 Sqoop1
架构 Sqoop 1

使用sqoop客户端直接提交

CLI控制台方式进行访问

命令或脚本中指定用户数据库名及密码

Sqoop 2

引入了 sqoop server,对 connector 实现了集中的管理

访问方式:REST API、 JAVA API、 WEB UII、 CLI 控制台

Sqoop导入导出 Null 存储一致性

Hive 中的 Null 在底层是以 N 来存储

MySQL 中的 Null 在底层就是 Null

为了保证数据两端的一致性
在导出数据时采用

--input-null-string : 将 null 字符串替换成指定值--input-null-non-string : 在生成的 Java 文件中,将 null 字符串或不存在的字符串替换成指定值

导入数据时采用

--null-string : string类型的字段,当Value是NULL,替换成指定字符--null-non-string : 非 string 类型的字段,当Value是NULL,替换成指定字符 Sqoop数据导出一致性问题

Sqoop 在导出到 Mysql 时,默认 4 个 Map 任务,如果有 2 个任务失败,此时 MySQL 中只存储两个Map任务导入的数据,解决问题再把全部数据导入MySQL , 导致前后数据不一致

由于 Sqoop 将导出过程分解为多个事务,所以失败的导出作业可能会导致将部分数据提交到数据库

–staging-table 方式

sqoop 会先把数据导入进这张临时表中,所有任务都成功。才会在 mysql 中把临时表中的数据导入到真正的表中

Sqoop导出的事务

–staging-table 方式(建立临时表,通过 sqoop 导入到临时表,成功之后再把临时表的数据通过事务导入到 mysql 的业务数据表)

Sqoop底层运行的任务

只有 Map 阶段,没有 Reduce 阶段的任务。默认是 4 个 MapTask

导入

Sqoop 会通过 JDBC 查询出表中的列和列的类型,在生成反序列化代码和配置了 InpuFormat 之后,Sqoop 就会将作业发到 MapReduce 集群,Map 任务会把查询到的 ResultSet 数据填充到类的实例中

导出

启动 MapReduce 之后,从 HDFS 中读取并解析数据,同时执行选定的导出方法。基于JDBC的导出方法会生成多条 insert 语句,每条 insert 语句均会向表中插入多条数据 , 将 HDFS 的数据导入到提前创建好关系型数据库中

Sqoop 在导入数据的数据倾斜问题

Sqoop 抽数的并行化两个参数:

num-mappers:启动 N 个 map 来并行导入数据,默认4个split-by:按照某一列来切分表的工作单元

split 切分算法默认主键:如 : map 个数为 4,取 ( 主键最大值 - 主键最小值 )/ map 数量 ,这就分成了 4份,如果主键分布不均,就会出现数据倾斜

解决方法 :

通过 ROWNUM() 生成一个严格均匀分布的字段,然后指定为分割字段

Sqoop 数据导出 Parquet

ads 层数据用 Sqoop 往 MySql 中导入数据的时候,如果用了 orc(Parquet)不能导入,需转化成 text 格式

创建临时表,把 Parquet 中表数据导入到临时表,把临时表导出到目标表用于可视化

ads 层建表的时候就不要建 Parquet 表

Sqoop同步策略

全量同步策略增量同步策略新增及变化策略特殊策略 全量同步策略

每日全量 : 每天存储一份完整的数据 , 作为一个分区

适用 : 表数据量不大 , 且每天既有新数据插入 , 也有旧数据修改的场景

增量同步策略

每日增量 : 每天存储一份增量数据 , 做为一个分区

适合 : 表数据量大 , 且每天只有新数据插入的场景

新增及变化策略

新增及变化 : 每日新增及变化 , 存储创建时间和操作时间都是今天的数据

使用场景 : 表的数据量大,既有新增,又有变化

特殊策略

特殊策略:某些特殊的维度表

客观的世界维度日期维度地区维度

客观世界的维度 : (如 : 性别,地区,民族,政治成分,鞋子尺码)可以只存一份固定值

日期维度 : 一次性导入一年或若干年的数据

地区维度 : 省份表,地区表

sqoop 导入 hdfs 出现 oom 是什么原因

Sqoop 导入数据使用 Map

调大 yarn.scheduler.minimum-allocation-mb

Sqoop 底层为什么默认是 4 个Map

一般 RDBMS 的导出速度控制在60~80MB/s,每个 map 任务的处理速度5~10MB/s 估算,即 -m 参数一般设置 4~8 ,表示启动 4~8 个map 任务并发抽取

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

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

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