- Sqoop 教程
- Sqoop - 首页
- Sqoop - 简介
- Sqoop - 安装
- Sqoop - 导入
- Sqoop - 导入所有表
- Sqoop - 导出
- Sqoop - Sqoop 作业
- Sqoop - 代码生成
- Sqoop - 表达式计算
- Sqoop - 列出数据库
- Sqoop - 列出表
- Sqoop 有用资源
- Sqoop - 问答
- Sqoop - 快速指南
- Sqoop - 有用资源
- Sqoop - 讨论
Sqoop 面试问题
尊敬的读者们,这些 **Sqoop 面试问题** 是专门为了让您熟悉在 Sqoop 相关面试中可能遇到的问题类型而设计的。根据我的经验,优秀的 interviewers 很少会提前计划好要问哪些具体问题,通常问题会从该主题的一些基本概念开始,然后根据后续讨论和您的回答继续深入。
为了连接不同的关系型数据库,Sqoop 需要一个连接器。几乎每个数据库厂商都会提供一个特定于该数据库的 JDBC 驱动程序作为连接器。因此,Sqoop 需要与之交互的每个数据库的 JDBC 驱动程序。
不。Sqoop 需要 JDBC 驱动程序和连接器才能连接到数据库。
要指定 HDFS 中的特定目录,请使用 --target-dir;要指定所有 Sqoop 作业的父目录,请使用 --warehouse-dir。在这种情况下,Sqoop 将在父目录下创建一个与表同名的目录。
通过在 sqoop import 语句中使用 WHERE 子句,我们可以只导入一部分行。
我们可以在数据库上运行一个过滤查询,并将结果保存到数据库中的临时表中。
然后使用 sqoop import 命令,无需使用 --where 子句。
--password-file 选项可以在 Sqoop 脚本中使用,而 -P 选项从标准输入读取,阻止自动化。
.gz
为了使 Sqoop import 的输出文件采用 .gz 之外的其他格式,例如 .bz2,我们使用 --compress-codec 参数。
数据库使用的支持更快加载的原生实用程序不适用于 SequenceFile 等二进制数据格式。
参数 --num-mappers 用于控制 Sqoop 命令执行的 Mapper 数量。我们应该从选择少量 Map 任务开始,然后逐步扩展,因为最初选择大量 Mapper 可能会降低数据库端的性能。
使用命令
sqoop import-all-tables
--connect
--username
--password
--exclude-tables table1,table2 ..
这将导入除 --exclude-tables 子句中提到的表之外的所有表。
Sqoop 有两种方法。
a - 使用 --incremental 参数和 append 选项,检查某些列的值,只有在修改值的情况下,才将该行作为新行导入。
b - 使用 --incremental 参数和 lastmodified 选项,检查源中日期列中自上次导入后已更新的记录。
Sqoop 中的选项文件用于在一个文件中指定命令行值,并在 Sqoop 命令中使用它。
例如,--connect 参数的值和 --username 值可以存储在一个文件中,并在不同的 Sqoop 命令中重复使用。
是的,我们可以使用 --exec 选项在运行时向保存的作业添加参数。
sqoop job --exec jobname -- --newparameter
通过使用 --query 参数代替 --table 参数,我们可以指定一个 SQL 查询。查询的结果将被导入。
使用 --split-by 参数,我们指定列名,Sqoop 将根据该列名将要导入的数据分成多个块,以并行运行。
通过使用 --mapreduce-job-name 参数。以下是命令示例。
sqoop import \ --connect jdbc:mysql://mysql.example.com/sqoop \ --username sqoop \ --password sqoop \ --query 'SELECT normcities.id, \ countries.country, \ normcities.city \ FROM normcities \ JOIN countries USING(country_id) \ WHERE $CONDITIONS' \ --split-by id \ --target-dir cities \ --mapreduce-job-name normcities
我们可以使用 --boundary-query 参数,在其中指定列的最小值和最大值,根据该值可以将数据分成多个 MapReduce 任务。这使其速度更快,因为 --boundary-query 参数内的查询会先执行,并且作业会在执行主查询之前准备好有关要创建多少个 MapReduce 任务的信息。
参数“sqoop.export.records.per.statement”指定每个 INSERT 语句中将使用的记录数。
但是参数“sqoop.export.statements.per.transaction”指定在事务期间可以并行处理多少个 INSERT 语句。
使用 staging-table 选项,我们首先将数据加载到暂存表中,然后只有在暂存加载成功后才将其加载到最终目标表中。
通过指定 --clear-staging-table 选项,我们可以在加载之前清除暂存表。这可以重复进行,直到我们在暂存表中获得正确的数据。
参数 --update-key 可用于更新现有行。其中,使用逗号分隔的列列表唯一标识一行。所有这些列都将用于生成的 UPDATE 查询的 WHERE 子句中。所有其他表列都将用于查询的 SET 部分中。
截断目标表并重新加载。
通过使用 --columns 参数,我们可以在其中将所需的列名作为逗号分隔的值列表。
通过使用 --input-null-string 参数,我们可以指定一个默认值,这将允许将行插入到目标表中。
Oozie 在内置的 Sqoop 操作中,我们可以提及要执行的 Sqoop 命令。
一些导入的记录在所有列中可能都具有空值。由于 HBase 不允许在一行中出现所有空值,因此这些行将被丢弃。
$ sqoop list-databases --connect jdbc:mysql://database.example.com/
Sqoop 可以使用任何 SQL 查询从关系数据库导入数据,而不仅仅是使用表和列名参数。
通过在 import 命令中使用 --m 1 子句,Sqoop 只创建一个 MapReduce 任务,该任务将顺序导入行。
MapReduce 集群配置为运行 4 个并行任务。因此,Sqoop 命令必须具有小于或等于 MapReduce 集群的并行任务数。
--split-by 子句提到列名,根据该列名的值,数据将被分成多个记录组。这些记录组将由 MapReduce 任务并行读取。
它将数据从数据库导入到位于 /dest 目录中的名为 foo 的 HDFS 文件中。
使用 --append 参数,Sqoop 将数据导入到临时目录,然后以不会与该目录中现有文件名冲突的方式将文件重命名到普通目标目录。
通过使用 --map-column-java 属性,我们可以配置之间的映射。
以下是一个示例
$ sqoop import ... --map-column-java id = String, value = Integer
通过使用`lastmodified`模式。如果检查列中包含的时间戳比使用`--last-value`指定的时间戳新,则导入相应的行。
分隔文本文件和Sequence文件。
$ sqoop import --connect jdbc:mysql://host/dbname --table EMPLOYEES \ --columns "employee_id,first_name,last_name"
$ sqoop import --connect jdbc:mysql://host/dbname --table table_name\ -m 8
它导入2012年11月9日之后入职的员工。
$ sqoop import --connect jdbc:mysql://db.foo.com/corp --table EMPLOYEES \ --split-by dept_id
在已经导入表的前100,000行之后,它执行增量导入以导入新数据。
sqoop import-all-tables --connect jdbc:mysql://host/DB1
$ sqoop export --connect jdbc:mysql://host/DB1 --call proc1 \ --export-dir /Dir1
它是一个工具,Sqoop使用它来托管共享的元数据存储库。多个用户和/或远程用户可以定义和执行在此元数据存储库中定义的已保存作业(使用`sqoop job`创建)。
客户端必须配置为连接到`sqoop-site.xml`中的元数据存储库,或使用`--meta-connect`参数。
合并工具组合两个数据集,其中一个数据集中的条目应覆盖旧数据集中的条目,仅保留两个数据集之间记录的最新版本。
`sqoop job --list`
`sqoop job --show myjob`
运行`sqoop-metastore`会在当前机器上启动一个共享的HSQLDB数据库实例。
元数据存储库数据库可以托管在Hadoop集群内或集群外部的任何位置。
下一步是什么?
接下来,您可以回顾一下您过去完成的作业,确保您能够自信地谈论它们。如果您是应届毕业生,面试官不会期望您回答非常复杂的问题,而是要确保您的基本概念非常扎实。
其次,如果您无法回答一些问题,其实并不重要,重要的是您回答的任何问题都必须充满自信。所以在面试中要自信。Tutorialspoint祝您面试顺利,并祝您未来的事业一切顺利!干杯 :-)