博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
大数据面试题之sqoop
阅读量:3964 次
发布时间:2019-05-24

本文共 2432 字,大约阅读时间需要 8 分钟。

1 Sqoop参数

/opt/module/sqoop/bin/sqoop import \--connect \--username \--password \--target-dir \--delete-target-dir \--num-mappers \--fields-terminated-by   \--query   "$2" ' and $CONDITIONS;'

2 Sqoop导入导出Null存储一致性问题

Hive中的Null在底层是以“\N”来存储,而MySQL中的Null在底层就是Null,为了保证数据两端的一致性。

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

3 Sqoop数据导出一致性问题

场景1:如Sqoop在导出到Mysql时,使用4个Map任务,过程中有2个任务失败,那此时MySQL中存储了另外两个Map任务导入的数据,此时老板正好看到了这个报表数据。而开发工程师发现任务失败后,会调试问题并最终将全部数据正确的导入MySQL,那后面老板再次看报表数据,发现本次看到的数据与之前的不一致,这在生产环境是不允许的。

官网:

http://sqoop.apache.org/docs/1.4.6/SqoopUserGuide.htmlSince Sqoop breaks down export process into multiple transactions, it is possible that a failed export job may result in partial data being committed to the database. This can further lead to subsequent jobs failing due to insert collisions in some cases, or lead to duplicated data in others. You can overcome this problem by specifying a staging table via the --staging-table option which acts as an auxiliary table that is used to stage exported data. The staged data is finally moved to the destination table in a single transaction.

–staging-table方式

sqoop export --connect jdbc:mysql://192.168.137.10:3306/user_behavior --username root --password 123456 --table app_cource_study_report --columns watch_video_cnt,complete_video_cnt,dt --fields-terminated-by "\t" --export-dir "/user/hive/warehouse/tmp.db/app_cource_study_analysis_${day}" --staging-table app_cource_study_report_tmp --clear-staging-table --input-null-string '\N'

4 Sqoop底层运行的任务是什么

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

5 Sqoop一天导入多少数据

100万日活=》10万订单,1人10条,每天1g左右业务数据

Sqoop每天将1G的数据量导入到数仓。

6 Sqoop数据导出的时候一次执行多长时间

每天晚上00:30开始执行,Sqoop任务一般情况40 -50分钟的都有。取决于数据量(11:11,6:18等活动在1个小时左右)。

7 Sqoop在导入数据的时候数据倾斜

https://blog.csdn.net/lizhiguo18/article/details/103969906

Sqoop 抽数的并行化主要涉及到两个参数:num-mappers:启动N个map来并行导入数据,默认4个;split-by:按照某一列来切分表的工作单元。
通过ROWNUM() 生成一个严格均匀分布的字段,然后指定为分割字段

8 Sqoop数据导出Parquet(项目中遇到的问题)

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

(1)创建临时表,把Parquet中表数据导入到临时表,把临时表导出到目标表用于可视化
(2)Sqoop里面有参数,可以直接把Parquet转换为text
(3)ads层建表的时候就不要建Parquet表

9.Map task并行度设置大于1的问题

并行度导入数据的 时候 需要指定根据哪个字段进行切分 该字段通常是主键或者是自增长不重复的数值类型字段,否则会报下面的错误。

Import failed: No primary key could be found for table. Please specify one with --split-by or perform a sequential import with ‘-m 1’.

那么就是说当map task并行度大于1时,下面两个参数要同时使用

–split-by id 指定根据id字段进行切分–m n 指定map并行度n个
你可能感兴趣的文章
Pandas 筛选数据
查看>>
Pandas 复合索引
查看>>
[第23课] 期望值E(X)
查看>>
[第24课] 二项分布的期望值
查看>>
Pandas 处理 NaN
查看>>
Pandas 分组统计
查看>>
Pandas 多 DataFrame联接
查看>>
Sybase 系列文章目录
查看>>
SQLServer
查看>>
Hibernate 通过 Hibernate 访问数据库
查看>>
java面试题
查看>>
消息队列相关(MQ)
查看>>
生成短连接
查看>>
java多线程
查看>>
mybatis高级结果映射
查看>>
java 中的锁
查看>>
线程池
查看>>
深入浅出:Tomcat应用服器中Servlet容器架构及工作原理剖析
查看>>
fastjson 将json和java对象相互转换
查看>>
java获取cookie
查看>>