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”