Sqoop-client源码

sqoop-client类

简介

sqoop2的架构是C-S架构的。sqoop2的用户都必须通过sqoop-client类来与服务器进行交互。
Sqoop-client提供给用户:

  • 连接服务器,
  • 搜索Connectors,
  • 创建Link,
  • 创建Job,
  • 提交Job,
  • 返回Job运行信息等功能。
    这些功能基本包括了用户在数据迁移的过程中的所用到的所有的信息。

相关概念解释

sqoop2中将数据迁移任务中的相关概念进行细分。将数据迁移任务中的数据源, 数据传输配置, 数据传输任务进行提取抽象。

经过抽象分别得到核心概念Connector, Link, Job, Driver。

Connector

Connector相当于一个类型,其描述了一种数据源作为传输源或者传输目的地时需要的配置信息。官网中是如下描述Connector的: " The registered connector implementation will provide logic to read from and/or write to a data source that it represents. A connector can have one or more links associated with it."
比如在现在的Sqoop2中提供:

  • Generic JDBC Connector
  • MySqlJdbcConnector
  • KiteConnector (Kite connector enables access to data in HDFS or HBase in diverse file formats (CSV, Avro and Parquet))
  • KafkaConnector
  • HdfsConnector
    共五中connector。
    对于每种的数据源有一个相对应的Connector类型。
    具体的Connector细节将在后面的文中中给出。

Link

Connector是和数据源(类型)相关的。对于Link是和具体的任务Job相关的。
针对具体的Job, 例如从MySQL->HDFS 的数据迁移Job。就需要针对该Job创建和数据源MySQL的Link1,和数据目的地MySQL的Link2.
Link是和Job相关的, 针对特定的数据源,配置信息。
Link定义了从某一个数据源读出和写入时的配置信息。

Driver

官方源代码中对于Driver的描述是:Sqoop driver that manages the job lifecyle
Dirver提供了对于Job任务运行的其他信息。比如对Map/Reduce任务的配置。

Job

Link定义了从某一个数据源的进行读出和写入时的配置信息。Job是从一个数据源读出, 写入到另外的一个数据源的过程。
所以Job需要由Link(From), Link(To),以及Driver的信息组成。

官网中对Job的原文描述如下: Job: A sqoop job holds the From and To parts for transferring data from the From data source to the To data source. Both the From and theTo are uniquely identified by their corresponding connector Link Ids.
Thus the pre-requisite for creating a job is to first create the links as described above.

Once the linkIds for the From and To are given, then the job configs for the associated connector for the link object have to be filled. You can get the list of all the from and to job config/inputs using Display Config and Input Names For Connector for that connector. A connector can have one or more links. We then use the links in the From and To direction to populate the corresponding MFromConfig and MToConfig respectively.

In addition to filling the job configs for the From and the To representing the link, we also need to fill the driver configs that control the job execution engine environment. For example, if the job execution engine happens to be the MapReduce we will specifiy the number of mappers to be used in reading data from the From data source.

Sqoop-Client源代码分析

public class SqoopClient {

  /**
   * Underlying request object to fetch data from Sqoop server.
   */
  private SqoopResourceRequests resourceRequests;

  /**
   * True if user retrieved all connectors at once.
   */
  private boolean isAllConnectors;
  /**
   * All cached connectors.
   */
  private Map<Long, MConnector> connectors;
  /**
   * All cached config params for every registered connector in the sqoop system.
   */
  private Map<Long, ResourceBundle> connectorConfigBundles;

  /**
   * Cached driver.
   */
  private MDriver mDriver;
  /**
   * Cached driverConfig bundle.
   */
  private ResourceBundle driverConfigBundle;

  /**
   * Status flags used when updating the submission callback status
   */
  //TODO(https://issues.apache.org/jira/browse/SQOOP-1652): Why do wee need a duplicate status enum in client when shell is using the server status?
  // NOTE: the getStatus method is on the job resource and this needs to be revisited
  private enum SubmissionStatus {
    SUBMITTED,
    UPDATED,
    FINISHED
  }

  public SqoopClient(String serverUrl) {
    resourceRequests = new SqoopResourceRequests();
    setServerUrl(serverUrl);
  }

  /**
   * Set new server URL.
   *
   * Setting new URL will also clear all caches used by the client.
   *
   * @param serverUrl Server URL
   */
  public void setServerUrl(String serverUrl) {
    resourceRequests.setServerUrl(serverUrl);
    clearCache();
  }

  /**
   * Set arbitrary request object.
   *
   * @param requests SqoopRequests object
   */
  public void setSqoopRequests(SqoopResourceRequests requests) {
    this.resourceRequests = requests;
    clearCache();
  }

  /**
   * Clear internal cache.
   */
  public void clearCache() {
    connectorConfigBundles = new HashMap<Long, ResourceBundle>();
    driverConfigBundle = null;
    connectors = new HashMap<Long, MConnector>();
    mDriver = null;
    isAllConnectors = false;
  }
.......
}

从上面的源代码中可以看出SqoopClient中保存了:

  • SqoopResourceRequests类型的对象,其负责和Server进行通信。
  • connectors 保存了系统定义的所有的connector
  • connectorConfigBundles保存相对应的Connector的配置信息
  • mDriver 保存了Driver
  • driverConfigBundle 保存了Driver的配置信息。

sqoop-client构造器接受一个URL字符串,用于与Server连接。
同时情况相关的配置信息。

Sqoop-client中剩余的方法主要用于取出相关的connector, Link , Job等,这里先不赘述。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,928评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,192评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,468评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,186评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,295评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,374评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,403评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,186评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,610评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,906评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,075评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,755评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,393评论 3 320
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,079评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,313评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,934评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,963评论 2 351

推荐阅读更多精彩内容