sqoop面试题
1.1 Sqoop 在工作中的定位是会用就行
1.1.1 Sqoop导入数据到hdfs中的参数
- /opt/module/sqoop/bin/sqoop import \
- --connect \ # 特殊的jdbc连接的字符串
- --username \
- --password \
- --target-dir \ # hdfs目标的目录
- --delete-target-dir \ # 导入的目标目录如果存在则删除那个目录
- --num-mappers \ #相当于 -m ,并行导入时map task的个数
- --fields-terminated-by \
- --query "$2" ' and $CONDITIONS;' # 指定满足sql和条件的数据导入
1.1.2 Sqoop导入hive时的参数
一步将表结构和数据都导入到hive中
- bin/sqoop import \
- --connect jdbc的url字符串 \
- --table mysql中的表名\
- --username 账号 \
- --password 密码\
- --hive-import \
- --m mapTask的个数\
- --hive-database hive中的数据库名;
1.1.3 Rdbms中的增量数据如何导入?
- --check-column 字段名 \ #指定判断检查的依据字段
- --incremental 导入模式\ # 用来指定增量导入的模式(Mode),append和lastmodified
- --last-value 上一次导入结束的时间\
- --m mapTask的个数 \
- --merge-key 主键
补充:
·如果使用merge-key合并模式 如果是新增的数据则增加,因为incremental是lastmodified模式,那么当有数据更新了,而主键没有变,则会进行合并。
·--check-column字段当数据更新和修改这个字段的时间也要随之变化,mysql中建表时该字段修饰符,字段名timestamp default current_timestamp on update current_timestamp
1.1.4 Sqoop导入导出Null存储一致性问题
Hive中的Null在底层是以“\N”来存储,而MySQL中的Null在底层就是Null,为了保证数据两端的一致性,转化的过程中遇到null-string,null-non-string数据都转化成指定的类型,通常指定成"\N"。在导出数据时采用–input-null-string “\N” --input-null-non-string “\N” 两个参数。导入数据时采用–null-string “\N” --null-non-string “\N”。
Import导入和export导出的关系如下图所示。
1.1.5 Sqoop数据导出一致性问题
1)场景1:如Sqoop在导出到Mysql时,使用4个Map任务,过程中有2个任务失败,那此时MySQL中存储了另外两个Map任务导入的数据,此时老板正好看到了这个报表数据。而开发工程师发现任务失败后,会调试问题并最终将全部数据正确的导入MySQL,那后面老板再次看报表数据,发现本次看到的数据与之前的不一致,这在生产环境是不允许的。
Sqoop官网中的用户指南
使用—staging-table选项,将hdfs中的数据先导入到辅助表中,当hdfs中的数据导出成功后,辅助表中的数据在一个事务中导出到目标表中(也就是说这个过程要不完全成功,要不完全失败)。
为了能够使用staging这个选项,staging表在运行任务前或者是空的,要不就使用—clear-staging-table配置,如果staging表中有数据,并且使用了—clear-staging-table选项,sqoop执行导出任务前会删除staging表中所有的数据。
注意:–direct导入时staging方式是不可用的,使用了—update-key选项时staging方式也不能用。
- sqoop export \
- --connect url \
- --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_analysi_${day}" \
- --staging-table app_cource_study_report_tmp \
- --clear-staging-table \
- --input-null-string '\\N' \
- --null-non-string "\\N"
2)场景2:设置map数量为1个(不推荐,面试官想要的答案不只这个)
多个Map任务时,采用–staging-table方式,仍然可以解决数据一致性问题。
1.1.6 Sqoop底层运行的任务是什么
只有Map阶段,没有Reduce阶段的任务。
1.1.7 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个
1.1.8 Sqoop数据导出的时候一次执行多长时间
Sqoop任务5分钟-2个小时的都有。取决于数据量。
sqoop面试题的更多相关文章
- Hadoop 之面试题
颜色区别: 蓝色:hive,橙色:Hbase.黑色hadoop 请简述hadoop怎样实现二级排序. 你认为用Java,Streaming,pipe 方式开发map/reduce,各有哪些优缺点: 6 ...
- Hadoop 面试题之Hbase
Hadoop 面试题之九 16.Hbase 的rowkey 怎么创建比较好?列族怎么创建比较好? 答: 19.Hbase 内部是什么机制? 答: 73.hbase 写数据的原理是什么? 答: 75.h ...
- [大数据面试题]hadoop核心知识点
* 面试答案为LZ所写,如需转载请注明出处,谢谢. * 这里不涉及HiveSQL和HBase操作的笔试题,这些东西另有总结. 1.MR意义. MR是一个用于处理大数据的分布式离线计算框架,它采用”分而 ...
- BigDATA面试题
Big Data 面试题总结 JAVA相关 1-1)List 与set 的区别? 老掉牙的问题了,还在这里老生常谈:List特点:元素有放入顺序,元素可重复 ,Set特点:元素无放入顺序,元素不可重复 ...
- 第3节 sqoop:6、sqoop的数据增量导入和数据导出
增量导入 在实际工作当中,数据的导入,很多时候都是只需要导入增量数据即可,并不需要将表中的数据全部导入到hive或者hdfs当中去,肯定会出现重复的数据的状况,所以我们一般都是选用一些字段进行增量的导 ...
- hive面试题
1. Hive数据倾斜原因: key分布不均匀 业务数据本身的特性 SQL语句造成数据倾斜解决方法hive设置hive.map.aggr=true和hive.groupby.skewindata=tr ...
- 尚硅谷全套课件整理:Java、前端、大数据、安卓、面试题
目录 Java 尚硅谷 IT 精英计划 JavaSE 内部学习笔记.pdf 尚硅谷 Java 基础实战之银行项目.pdf 尚硅谷 Java 技术之 JDBC.pdf 尚硅谷 Java 技术之 Java ...
- .NET面试题系列[8] - 泛型
“可变性是以一种类型安全的方式,将一个对象作为另一个对象来使用.“ - Jon Skeet .NET面试题系列目录 .NET面试题系列[1] - .NET框架基础知识(1) .NET面试题系列[2] ...
- 关于面试题 Array.indexof() 方法的实现及思考
这是我在面试大公司时碰到的一个笔试题,当时自己云里雾里的胡写了一番,回头也曾思考过,最终没实现也就不了了之了. 昨天看到有网友说面试中也碰到过这个问题,我就重新思考了这个问题的实现方法. 对于想进大公 ...
随机推荐
- iOS开发黑科技之runtime
iOS 开发之黑科技-runtime runtime其实就是oc底层的一套C语音的API 调用方法的本质就是发消息, 1.动态交换两个方法的实现(特别是交换系统自动的方法) 2.动态添加对象的成员变量 ...
- MySQL show命令的用法
show tables或show tables from database_name; // 显示当前数据库中所有表的名称 show databases; // 显示mysql中所有数据库的名称 sh ...
- EventBus 及一些思考
EventBus 是 Android 开发的一种常用框架,其解耦的思维令人赞叹 从特性上来讲,其与 Android SDK中的BroadcastReceiver很像,二者都是注册,发送事件,反注册,都 ...
- Roma - Facebook工具链大一统
什么是roma roma,中文名罗马,是Facebook的rn团队的产出,是一个试验性质的javascript工具链,集编译,linter,格式化,打包,测试等等于一体.目标是成为一个处理javasc ...
- 解决WebMvcConfigurer下的addViewControllers无法找到制定页面
解决WebMvcConfigurer下的addViewControllers无法找到制定页面 这种都已经配置了拦截跳转,但无效的原因是,没有加载thymeleaf依赖 <dependency&g ...
- win10执行Tensorflow,总是会报错“DLL load failed: 找不到指定的模块”的解决方式----终极版方式
win10上运行tensorflow时报错,“DLL load failed: 找不到指定的模块”的解决方式 我只想说,当你们遇到这个问题的时候,以下终极版的方式出来了,非常感谢知乎 leo lv ! ...
- 必备技能二、es6
一.ES6模块 ES6 引入了模块化,其设计思想是在编译时就能确定模块的依赖关系,以及输入和输出的变量. ES6 的模块化分为导出(export) @与导入(import)两个模块. 特点 ES6 的 ...
- AB实验的高端玩法系列4- 实验渗透低?用户未被触达?CACE/LATE
CACE全称Compiler Average Casual Effect或者Local Average Treatment Effect.在观测数据中的应用需要和Instrument Variable ...
- 【Python challenge】通关代码及攻略(0-11)
前言: 最近找到一个有关python的游戏闯关,这是游戏中的思考及通关攻略 最开始位于:http://www.pythonchallenge.com/pc/def/0.html 第0关 题目分析 提示 ...
- 外部配置属性值是如何被绑定到XxxProperties类属性上的?--SpringBoot源码(五)
注:该源码分析对应SpringBoot版本为2.1.0.RELEASE 1 前言 本篇接 SpringBoot是如何实现自动配置的?--SpringBoot源码(四) 温故而知新,我们来简单回顾一下上 ...