千家信息网

sqoop内部结构是怎样的

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍"sqoop内部结构是怎样的",在日常操作中,相信很多人在sqoop内部结构是怎样的问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"sqoop内部结构是怎
千家信息网最后更新 2026年11月03日sqoop内部结构是怎样的

这篇文章主要介绍"sqoop内部结构是怎样的",在日常操作中,相信很多人在sqoop内部结构是怎样的问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"sqoop内部结构是怎样的"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

1.1 Sqoop内部结构

Sqoop程序是由的主类com.cloudera.sqoop.Sqoop驱动。有限数量的额外的类在同一个包:SqoopOptions (如前所述),ConnFactory(即熟练操作ManagerFactory实例)。

1.1.1 一般程序流程

一般的程序流程如下:

com.cloudera.sqoop.Sqoop是主类和实现了Tool,一个新的实例ToolRunner被推出,Sqoop的第一个参数是一个字符串,并在SqoopTool中定义并执行,SqoopTool来执行用户的各种请求操作(如: import, export, codegen等)。

SqoopTool将解析其余的参数,设置相应的字段在SqoopOptions类,然后执行。

在SqoopTool 的run()方法中,import 、export或者其他正确的指令被执行。一般情况下ConnManager一般在SqoopOptions数据的基础上进行实例化。ConnFactory被用于从ManagerFactory中获取一个ConnManager。这在前面的部分已经进行了描述。Imports 、 exports或者其他大型数据的迁移操作通常是一个并行的、可靠的MapReduce任务。Import操作并不是一定要以MapReduce作业的方式运行,ConnManager.importTable()将确定如何以最佳的方式进行import操作。每一个主要操作实际上都有ConnMananger控制,除了生成代码的操作,这些操作是由CompilationManager和ClassWriter做的(都在 com.cloudera.sqoop.orm 包中)。导入数据到Hive的操作是由com.cloudera.sqoop.hive.HiveImport的importTable()完成的,这样做是为了不为使用ConnManager的实现都担心。

ConnManager 的 importTable()方法接收一个类型为ImportJobContext的参数,其中包含这个方法所需的各种参数值。将来,该类可扩展附加参数,以实现功能更加强大的import操作。同样, exportTable()方法接收的参数类型ExportJobContext。这些类包含一系列导入/导出,指向SqoopOptions对象,以及其他相关的数据。

1.1.2 子包

com.cloudera.sqoop包中的子包,包括:

※ Hive:便于数据导入到Hive

※ IO: 实现的java.io. *接口

※ Lib: 外部公共API(如前所述)

※ Manager: ConnManager和ManagerFactory的接口和它们的实现

※ Mapreduce: 新的(0.20 +)MapReduce的API接口的类

※ Orm: 代码自动生成

※ Tool: 实现SqoopTool

※ Util: 各种实用工具类

IO包中的OutputStream和BufferedWriter的实现被用于直接向HDFS进行写入。SplittableBufferedWriter允许为客户端打开一个单一的BufferedWriter,在引擎之下,当达到目标值后连续的写入文件系统。这允许在Sqoopimport的同时使用压缩机制(如gzip),同时允许在MapR任务之后对数据集进行分割。大对象文件存储系统的代码也存在于IO包中。

Mapreduce包中的代码用于直接与Hadoop MapReduce做接口,将在下一章节中详述。

ORM包中的代码用于生产代码。它依赖于提供了com.sun.tools.javac包的JDK的tools.jar包。

UTIL包中包含用于整个Sqoop的各种工具

※ ClassLoaderStack:管理由当前线程的堆栈使用的ClassLoader的实例,这正是当以本地模式运行MapReduce任务时自动生成代码写入当心线程的原理。

※ DirectImportUtils:包含一些直接进行Hadoop import操作的方便方法。

※ Executor:启动外部进程,并连接这些来生成由一个AsyncSink(见下面更详细地)的流处理程序。

※ ExportException:当exports失败时由ConnManagers抛出异常。

※ ImportException:当import失败时由ConnManagers抛出异常。

※ JDBCURL:处理连接字符串的解析,这是类URL,是不规范的、不合格的。

※ PerfCounters:被用来估计用于显示给用户的传输速率。

※ ResultSetPrinter:漂亮地打印结果集。

在不同的时候,Sqoop从外部程序中读取stdout,最简单的模式就是由LocalMySQLManager和DirectPostgresqlManager执行的直接模式 (direct-mode)import。之后由Runtime.exec()产生一个进程,该进程的标准输出(Process.getInputStream())和潜在错误(Process.getErrorStream())都需要被处理。在这些流之间无法读取更多的数据从而导致在写入更多数据之前外部进程阻塞。因此,这些都必须处理,最好以异步的方式。

按照Sqoop的说法,"异步接收器"是一个线程需要一个InputStream和读取完成。这些实现AsyncSink实现。com.cloudera.sqoop.util.AsyncSink抽象类定义了这家工厂必须执行的操作。processStream()将产生另一个线程立即开始处理从InputStream中读取的数据参数; 它必须读这流来完成的。 join()方法允许外部线程等待,直到处理完成。

一些"stock"被同步实现:LoggingAsyncSink将重复InputStream上的一切在log4j INFO语句中。NullAsyncSink消耗所有的输入和什么都不做。

各种ConnManagers使得外部进程以内部类的方式拥有它们自己的AsyncSink实现,它们通过数据库tools读取,并且促使数据流向HDFS,有可能在此期间进行格式转换。

1.1.3 与MapReduce的接口

Sqoop调度MapReduce作业产生imports和exports。配置和执行的MapReduce工作如下几个共同的步骤(配置InputFormat配置OutputFormat设置映射的实施;等等)。这些步骤是在com.cloudera.sqoop.mapreduce.JobBase类中的。为了使用,JobBase允许一个用户来指定InputFormat,OutputFormat,和映射器。

JobBase本身就是ImportJobBase和ExportJobBase的子集,为特定的配置步骤提供更好的支持,分别由ImportJobBase和ExportJobBase的子类。 ,ImportJobBase.runImport()将调用的配置步骤,并运行一个工作表导入HDFS。


到此,关于"sqoop内部结构是怎样的"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

数据 代码 参数 方法 处理 结构 接口 程序 线程 进程 配置 实例 方式 是由 更多 步骤 学习 生成 任务 模式 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海喔噻互联网科技有限公司 广东猪兼强互联网科技有限公司 互联网科技公司经营范围 西安纸贵互联网科技有限公司 广州百单互联网科技有限公司 互联网 科技创新 高科技与互联网 互联网 的科技创新 善班互联网科技 奇酷互联网科技公司 兼蜜互联网科技 广州紫鲸互联网科技 美国互联网前沿科技 成都玖崟互联网科技有限公司乐商圈怎么样 常德市电业局互联网科技部 成都铂石互联网科技做什么的 互联网方面的科技前沿 半导体行业属于互联网高科技类吗 容联科技互联网电商 北京瑞云互联网科技有限公司 互联网金融 科技金融 万易互联网科技有限公司 紫鲸互联网科技 狮子座互联网科技有限公司 亳州好赞互联网科技有限公司 中国科技创新与世界互联网大会 威龙国际互联网科技公司 锡山区互联网智能科技产品供应 平安好医生打造互联网科技医疗 承德科技产业互联网平台
0