首页 > 代码库 > Sqoop 2 Metadata design

Sqoop 2 Metadata design

Sqoop 2 Metadata design

本文描述了Sqoop2元数据架构的设计。分成几个部分从不同的层次描述来帮助理解这个设计。

Top Level Structures

目前有四个顶层的结构:

Connector

Connector将控制Sqoop2中整个数据移动过程。在系统中,有多个Connector可用,每一个特定的数据存储可能有自己特定的Connector(一个Oracle专用,一个MySQL专用)。一些数据存储可能有多个Connector来完成不同的目的。例如,可能有一个MySQL JDBC Connector使用java的JDBC接口,另一个MySQL Fastpath Connector利用MySQL本地工具(mysqldump和mysqlimport)。

因为不同的Connector可能有不同的配置需求,而不是所有的配置直接嵌入到Sqoop2框架,我们已经决定每个Connector将提供自己的元数据结构。每一个Connector将提供两套元数据结构,一个是对connection对象,第二个是job对象(下面解释)。

Framework

与Connector架构包含执行特性行为需要的元数据一样,Sqoop2框架需要为每一个connection和job配置一些额外的配置。Connector和Framework最大的不同是,可能会有多个Connector,但是只会有一个framework。

Connection

Connection对象包含Connector和Framework管理到远程数据存储的链接所需的元数据。Connection与java.sql.Connection对象没有任何关系。因为每一个Connector可能有不同的需要,每一个Connection直接依赖于Connector,这个Connection就是为这个Connector创建的。Connection对象被管理员创建,然后保存在Sqoop2的metastore中。这些Connection将接着被管理员或者job对象(下面解释)使用。

Job

Job对象直接依赖于Connection,持有特定Job的配置。例如,一个Job对象包含作业类型import还是export,导入或者导出使用的HDFS的位置等。管理员填充这些信息。Job将变成可执行的。

Corresponding classes

下面的描述涵盖了所有相关的类,自下而上描述,给读者提供一个更好理解的架构。

MInput

一个Connector请求的配置实体(例如“JDBC URL”或者”Username”)。

Mform

多个相关的MInput组合到一起创建一系列相关的选项(例如,MForm “Connection to database”将包含“JDBC URL” MInput,“username” MInput和“password”MInput)。

MjobForms

Job需要的一系列form。

MConnectionForms

一个Connection需要的多个form。

Mconnector

最顶层的架构包含一个MJobForms实例和一个MConnectionForms实例,指定了一个特定的Connector需要的元数据。所有的MForms是空的,不包含任何的配置。它们只作为Connector提供给Framework的模板,为了获取必要的配置选项。

Mframework

顶层架构包含一个MJobForms实例和一个MConnectionForm实例,指定了从Framework的角度需要的元数据。整个Sqoop2中只有一个这个类的实例。

Mconnection

顶层架构是一个Connector包含一个MConnectionForms实例。Forms将包含填充的值。

MJob

顶层架构师一个Connector包含一个MJobForms实例。Forms将包含填充的值。

Class relationship

Example

让我们假设一些基于Connector的JDBC。

Mconnector

1.      对于Connection:包含一个叫做Connection的MForm的列表,一个MFrom包含3个输入,“JDBC URL”,“Username”和“Password”。

2.      对于Job:包含一个叫做Source的MFrom的列表,一个MForm有一个输入“Table”。

Mframework

1.      对于Connection:包含一个空的列表,也就是没有被需要的值。

2.      对于Job:包含一个叫做Target的MForm,一个MForm只有一个输入“HDFS Directory”。

 

基于这个示例Connector,管理员可以创建两个不同的Connection:

Connection 1:

1.      Connector 部分:3个值,“JDBC URL”=“jdbc:mysql://development/test”,“Username”=“letest”,” Password “=” letest “。

2.      Framework部分:一个Framework没有特定的任何MForms,这将是空的。

Connection2:

1.      Connector 部分:3个值,“JDBCURL”=” jdbc:mysql://production/test “,”Username“=” production-user “,”Password”=” aosdf792r7asfhas8sd-9a7(&(&@#&$(Vosfs9fya9d7

(&SD(F*&S(*F&SDF&VChsdfhsdf

2.      FrameWork 部分:一个FromWork不包含任何特定的MForms,这个值将为空。

操作还没有时间使用Connection 2,因为它还在使用connection 1。已经创建了两个基于connection 1的Job:

Job 1

1.      基于connection 1

2.      Connector部分:包含connector需要的数据,”Table“=” traffic_details

3.      FrameWork部分:”HDFSDirectory“=” /storage/traffic_details

Job 2

1.      基于connection 1

2.      Connector部分:“Table”=“log

3.      FrameWork部分:“HDFSDirectory”=“/storage/log

Sqoop 2 Metadata design