sqoop面试题[通俗易懂]

sqoop面试题[通俗易懂]Sqoop面试题答案 Sqoop 在工作中的定位是会用就行 Q1:Sqoop导入hdfs的参数 /opt/module/sqoop/bin/sqoop import connect # 特殊

sqoop面试题

Sqoop面试题答案

 

Sqoop 在工作中的定位是会用就行

 

Q1: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和条件的数据导入

 

Q2:Sqoop导入hive时的参数

一步将表结构和数据都导入到hive中

bin/sqoop import 
--connect jdbc的url字符串
--table mysql中的表名
--username 账号
--password 密码
--hive-import
--m mapTask的个数
--hive-database hive中的数据库名;

 

Q3: 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

 

Q4: 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”。

 

Q5:Sqoop数据导出一致性

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

使用—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 " "
--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方式,仍然可以解决数据一致性问题。

 

Q6:Sqoop底层运行的是什么

只有Map阶段,没有Reduce阶段的任务。

 

Q7: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个

 

Q8:Sqoop导出一次多长时间

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

Q9:Sqoop一天导入多少数据

100万日活=》 10万订单,1人10条,每天1g左右业务数据。Sqoop每天将1G的数据量导入到数仓。

 

Q10: Sqoop导入 数据倾斜

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

Sqoop抽数的并行化主要涉及到两个参数:num-mappers:启动N个map来并行导入数据,分成4个;拆分为:按照并列来切分表的工作单元。

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

 

Q11:Sqoop数据导出Parquet

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

(1)创建临时表,把Parquet中表数据导入到临时表,把临时表转换到目标表用于可视化

(2)Sqoop里面有参数,可以直接把Parquet转换为text

(3)建表的时候就不要建Parquet表

 

Q12:Sqoop是什么

Sqoop-“SQL to Hadoop and Hadoop to SQL”(翻译:从SQL到Hadoop和从Hadoop到SQL)Apache Sqoop是一种有效的hadoop工具,用于将数据从RDBMS(如MySQL,Oracle等)导入到HBase,Hive或HDFS中。 Sqoop hadoop还可以用于将数据从HDFS导出到RDBMS。 Apache Sqoop是一个命令行解释器,即Sqoop命令一次由解释器执行。

 

Q13:Sqoop的不同功能/特性

下面是Sqoop支持的功能列表: 满载和增量加载;数据压缩技术;导入SQL查询结果;所有主要数据库的数据连接器;直接将数据加载支持到Hadoop文件系统中;安全配置,例如Kerberos;并发导入或导出功能;

 

Q14:列举一些Sqoop导入命令

导入控制命令用于导入RDBMS数据

Append:将数据追加到HDFS中的现有数据集。 Columns:要从表中导入的列。 Where:在导入期间使用的where子句。

Q15:Sqoop如何处理大对象

常见的大型对象是Blog和Clob,假设对象小于16 MB,则与其余数据一起内联存储。 如果有大对象,则将它们临时存储在名为_lob的子目录中。 这些数据然后在存储器中实现以进行处理。 如果我们将lob limit设为零(0),则它将存储在外部存储器中。

 

Q16:Sqoop导入BLOB和CLOB

对于CLOB和BLOB对象,Sqoop不支持直接导入功能。 因此,如果必须导入大型对象,则可以使用基于JDBC的导入。 无需引入import实用程序的直接参数即可完成此操作。

 

Q17:Sqoop导入默认文件格式

Sqoop允许使用两种文件格式导入数据。它们如下: 分隔文本文件格式序列文件格式 分隔文本文件格式:这是使用Sqoop导入数据的默认文件格式。 可以使用Sqoop中import命令的–as-textfile参数明确指定此文件格式。 将其作为参数传递给命令将在输出文件中产生所有记录的基于字符串的表示形式,并在行和列之间使用定界字符。 序列文件格式:这是一种二进制文件格式,其中记录以特定于记录的定制数据类型存储,这些数据类型显示为Java类。 Sqoop自动创建这些数据类型并将其显示为java类。

 

Q18:Sqoop工作原理

下图显示了Sqoop的工作流程:

Sqoop工作原理

Sqoop导入

导入工具将单个表从RDBMS导入到HDFS。 表中的每一行都被视为HDFS中的一条记录。 所有记录都作为文本数据存储在文本文件中,或者作为二进制数据存储在Avro和Sequence文件中。

Sqoop导出

导出工具将一组文件从HDFS导出回RDBMS。 作为Sqoop输入的文件包含记录,这些记录称为表中的行。 读取这些记录并将它们解析为一组记录,并使用用户指定的定界符定界。

 

Q19:Sqoop的前提条件

需要基本的核心Java知识,SQL的数据库概念,Hadoop文件系统以及任何Linux操作系统版本。

Q20:Sqoop导入使用语法

以下语法用于Sqoop导入:

$ sqoop import (generic-args) (import-args) Shell

Q21:Sqoop导出使用什么语法

以下语法用于Sqoop导出:

$ sqoop export (generic-args) (export-args) Shell

Q22:Sqoop支持关系数据库

Sqoop当前支持的关系数据库有:

MySQLPostgreSQLOracleMSSQLTeradataIBM的Netezza作为关系数据库的一部分。 Sqoop使用MySQL作为默认数据库。

 

Q23:Sqoop支持Hadoop资源

当前支持的Hadoop生态系统目标服务是:

HDFC Hive HBase H Catalog Accumulo

Q24:Sqoop的主要功能

Sqoop有4个主要关键功能:

批量导入:Sqoop可以将单个表或整个数据库导入HDFS。 数据存储在HDFS文件系统的本机目录和文件中。

直接输入:Sqoop可以将SQL(关系)数据库直接导入和映射到Hive和HBase。

数据交互:Sqoop可以生成Java类,以便您可以通过编程方式与数据进行交互。

数据导出:Sqoop可以使用基于目标数据库详细信息的目标表定义将数据直接从HDFS导出到关系数据库中。

 

Q25:JDBC在Sqoop中的作用

要连接到不同的关系数据库,sqoop需要一个连接器。 几乎每个数据库供应商都可以将该连接器用作特定于该数据库的JDBC驱动程序。 因此,Sqoop需要与之交互的每个数据库的JDBC驱动程序。

 

Q26:JDBC能将sqoop连数据库

不能。Sqoop同时需要JDBC和连接器才能连接到数据库。

Q27:target和warehouse使用

要在HDFS中指定特定目录,请使用–target-dir,但要指定所有sqoop作业的父目录,请使用–warehouse-dir。 在这种情况下,sqoop将在父目录下创建一个与表同名的目录。

Q28:Sqoop默认数据库

有,MySQL是默认数据库。

 

Q29:Sqoop列出表的所有列

与sqoop-list-tables和sqoop-list-databases不同,没有像sqoop-list-columns这样的直接命令来列出所有列。 实现此目的的间接方法是检索所需表的列并将其重定向到一个文件,该文件可以手动查看,其中包含特定表的列名。

Sqoop import 
–m 1
–connect ‘jdbc: sqlserver: //nameofmyserver; database=nameofmydatabase; username=DeZyre; password=mypassword’
–query “SELECT column_name, DATA_TYPE FROM INFORMATION_SCHEMA.Columns WHERE table_name=’mytableofinterest’ AND $CONDITIONS”
–target-dir ‘mytableofinterest_column_name’

 

Q30:从特定的行或列导入数据

Sqoop允许根据where子句从数据表中导出和导入数据。 语法是: –columns –where –query 示例:

sqoop import –connect jdbc:mysql://db.one.com/corp –table INTELLIPAAT_EMP –where “start_date> ’2016-07-20’ ” sqoopeval –connect jdbc:mysql://db.test.com/corp –query “SELECT * FROM intellip...

 

Q31: import命令的目标类型

Sqoop支持将数据导入以下服务:

HDFS

Hive

Hbase

Hcatalog

Accumulo

Q32:target和warehouse

Warehouse-dir指向要导入数据的Hive文件夹(在批量导入表时使用),而通过查询导入到Hive(sqoop错误要求)时,需要–target-dir。在后一种情况下,它用作映射器的临时区域,后跟LOAD INPATH。(要么)即 我们使用–target-dir在HDFS中指定特定目录。 而我们使用–warehouse-dir指定所有sqoop作业的父目录。 因此,在这种情况下,sqoop将在父目录下创建一个与表同名的目录。

Q33:Sqoop中的distcp类

distCP(Hadoop中的分布式副本)和Sqoop都并行传输数据,但是唯一的区别是distCP命令可以将任何类型的数据从一个Hadoop群集传输到另一个Hadoop群集,而Sqoop则在RDBMS和Hadoop生态系统中的其他组件(例如HBase, Hive, HDFS等)之间传输。

Q34:Sqoop在Java程序

可以通过在类路径中包含sqoop jar并调用Sqoop.runTool()方法,从Java代码内部运行sqoop。 就像命令行一样,必须以编程方式为Sqoop创建必要的参数。

 

Q35:Sqoop存在的所有表

使用Sqoop检查单个数据库中存在的所有表的列表的命令如下-

Sqoop list-tables –connect jdbc: mysql: //localhost/user;

 

Q36:sqoop全部加载

根据Sqoop用户指南,为了对RDMS执行all-or-nothing加载,可以使用登台表。 然后,只有在临时加载成功后,才将其加载到最终目标表中。 但是,此选项似乎仅在出口中可用。 当执行从HDServer的导入(从SQLServer导入)时,选项–staging-table不存在。

 

Q37:防止import中密码

-P选项从标准输入中询问密码而不回显,而–password-file选项读取存储在其他文件中的密码值。

 

Q38:Sqoop使用什么压缩

Sqoop没有任何内置代码来执行文件压缩。 它依赖Hadoop的压缩设置。

 

Q39:使用Oozie安排Sqoop

Oozie具有内置的sqoop动作,我们可以在其中提及要执行的sqoop命令。

 

Q40:不使用where子句

我们可以在数据库上运行过滤查询,并将结果保存到数据库中的临时表中。

然后,使用sqoop import命令而不使用–where子句。

 

Q41:compress参数

使用–compress参数从sqoop导入生成的文件的默认扩展名是:.gz

 

Q42:password-file好处

-password-file选项可在sqoop脚本内使用,而-P选项可从标准输入中读取,从而防止自动化。

 

Q43:表HDFS数据同步

将导出的表与删除了某些行的HDFS数据同步:截断目标表并再次加载它。

 

Q44:在Sqoop输入自由格式

Sqoop可以使用任何SQL查询而不是仅使用表名和列名以及参数从关系数据库中导入数据。

 

原文地址:https://www.cnblogs.com/flyer-ovo/archive/2022/11/28/16933508.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/4480.html

(0)
上一篇 2023-06-17 19:30
下一篇 2023-06-18 09:30

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注