文档章节

Sqoop源代码笔记

强子1985
 强子1985
发布于 2015/12/25 11:04
字数 791
阅读 126
收藏 1

Sqoop分1和2之分,其实本质都差不多,无非就是MR运算。 命令行可参考文章: http://my.oschina.net/zhangliMyOne/blog/97236

为了节省时间,直接上了sqoop1的源码,这样可快速抽取其代码本质,作为后续开发指导之用。

=============================================================

中间比较重要的几个类是:

SqoopTool --- 工具类

SqoopOptions---运行的选项

Sqoop---整合类,也是重点

===最关键的还是Sqoop类,当然是一些具体实现类

先看ToolRunner 源码

package org.apache.hadoop.util;

 

import java.io.PrintStream;

 

import org.apache.hadoop.conf.Configuration;

 

/**

 * A utility to help run {@link Tool}s.

 * 

 * <p><code>ToolRunner</code> can be used to run classes implementing 

 * <code>Tool</code> interface. It works in conjunction with 

 * {@link GenericOptionsParser} to parse the 

 * <a href="{@docRoot}/org/apache/hadoop/util/GenericOptionsParser.html#GenericOptions">

 * generic hadoop command line arguments</a> and modifies the 

 * <code>Configuration</code> of the <code>Tool</code>. The 

 * application-specific options are passed along without being modified.

 * </p>

 * 

 * @see Tool

 * @see GenericOptionsParser

 */

public class ToolRunner {

 

  /**

   * Runs the given <code>Tool</code> by {@link Tool#run(String[])}, after 

   * parsing with the given generic arguments. Uses the given 

   * <code>Configuration</code>, or builds one if null.

   * 

   * Sets the <code>Tool</code>'s configuration with the possibly modified 

   * version of the <code>conf</code>.  

   * 

   * @param conf <code>Configuration</code> for the <code>Tool</code>.

   * @param tool <code>Tool</code> to run.

   * @param args command-line arguments to the tool.

   * @return exit code of the {@link Tool#run(String[])} method.

   */

  public static int run(Configuration conf, Tool tool, String[] args) 

    throws Exception{

    if(conf == null) {

      conf = new Configuration();

    }

    GenericOptionsParser parser = new GenericOptionsParser(conf, args);

    //set the configuration back, so that Tool can configure itself

    tool.setConf(conf);

    

    //get the args w/o generic hadoop args

    String[] toolArgs = parser.getRemainingArgs();

    return tool.run(toolArgs);

  }

  

  /**

   * Runs the <code>Tool</code> with its <code>Configuration</code>.

   * 

   * Equivalent to <code>run(tool.getConf(), tool, args)</code>.

   * 

   * @param tool <code>Tool</code> to run.

   * @param args command-line arguments to the tool.

   * @return exit code of the {@link Tool#run(String[])} method.

   */

  public static int run(Tool tool, String[] args) 

    throws Exception{

    return run(tool.getConf(), tool, args);

  }

  

  /**

   * Prints generic command-line argurments and usage information.

   * 

   *  @param out stream to write usage information to.

   */

  public static void printGenericCommandUsage(PrintStream out) {

    GenericOptionsParser.printGenericCommandUsage(out);

  }

  

}

所以具体就看实现类的run方法

==============================================================================

 

@Override

  /**

   * Actual main entry-point for the program  表明是具体入口点

   */

  public int run(String [] args) {

    if (options.getConf() == null) {

      // Configuration wasn't initialized until after the ToolRunner

      // got us to this point. ToolRunner gave Sqoop itself a Conf

      // though.

      options.setConf(getConf());

    }

 

    try {

      options = tool.parseArguments(argsnulloptionsfalse);

      tool.appendArgs(this.childPrgmArgs);

      tool.validateOptions(options);

    } catch (Exception e) {

      // Couldn't parse arguments.

      // Log the stack trace for this exception

      LOG.debug(e.getMessage(), e);

      // Print exception message.

      System.err.println(e.getMessage());

      // Print the tool usage message and exit.

      ToolOptions toolOpts = new ToolOptions();

      tool.configureOptions(toolOpts);

      tool.printHelp(toolOpts);

      return 1; // Exit on exception here.

    }

 

    return tool.run(options);

  }

 所以最后还是落到tool.run执行。

------------------------------------------------核心代码如下:org.apache.sqoop.mapreduce.ImportJobBase

/**

   * Run an import job to read a table in to HDFS.

   *

   * @param tableName  the database table to read; may be null if a free-form

   * query is specified in the SqoopOptions, and the ImportJobBase subclass

   * supports free-form queries.

   * @param ormJarFile the Jar file to insert into the dcache classpath.

   * (may be null)

   * @param splitByCol the column of the database table to use to split

   * the import

   * @param conf A fresh Hadoop Configuration to use to build an MR job.

   * @throws IOException if the job encountered an IO problem

   * @throws ImportException if the job failed unexpectedly or was

   * misconfigured.

   */

  public void runImport(String tableName, String ormJarFile, String splitByCol,

      Configuration confthrows IOException, ImportException {

 

    if (null != tableName) {

      LOG.info("Beginning import of " + tableName);

    } else {

      LOG.info("Beginning query import.");

    }

 

    String tableClassName =

        new TableClassName(options).getClassForTable(tableName);

    loadJars(conformJarFiletableClassName);

 

    try {

      Job job = new Job(conf);

 

      // Set the external jar to use for the job.

      job.getConfiguration().set("mapred.jar"ormJarFile);

 

      configureInputFormat(jobtableNametableClassNamesplitByCol);

      configureOutputFormat(jobtableNametableClassName);

      configureMapper(jobtableNametableClassName);

      configureNumTasks(job);

      cacheJars(job, getContext().getConnManager());

 

      jobSetup(job);

      setJob(job);

      boolean success = runJob(job);//提交运行

      if (!success) {

        throw new ImportException("Import job failed!");

      }

    } catch (InterruptedException ie) {

      throw new IOException(ie);

    } catch (ClassNotFoundException cnfe) {

      throw new IOException(cnfe);

    } finally {

      unloadJars();

    }

  }

 

=========运行前,抽取了job的一些重要属性如下:

后续重点分析这几个类就可以了。


 


© 著作权归作者所有

共有 人打赏支持
强子1985

强子1985

粉丝 866
博文 1002
码字总数 681491
作品 8
南京
架构师
Sqoop1和Sqoop2简介

主要来源: http://www.linuxidc.com/Linux/2014-10/108337.htm 1.什么是Sqoop Sqoop即 SQL to Hadoop ,是一款方便的在传统型数据库与Hadoop之间进行数据迁移的工具,充分利用MapReduce并行特...

强子哥哥
2015/12/23
792
0
2、sqoop的命令使用

Sqoop中文手册 1.概述 本文档主要对SQOOP的使用进行了说明,参考内容主要来自于Cloudera SQOOP的官方文档。 2.codegen --> 将关系数据库表映射为一个Java文件、Java class类、以及相关的jar...

刘付kin
2016/12/04
29
0
sqoop2 1.99.6 中遇到问题及源码修改汇总

1.当PartitionColumn的基数为1(如下图)时。则会报错 报错如下图 源代码如下 sqoop-1.99.6-bin-hadoop200connectorconnector-generic-jdbcsrcmainjavaorgapachesqoopconnectorjdbcGenericJd......

去买大白兔
2017/05/21
0
0
Sqoop官方文档翻译0

官方文档翻译: 1. Introduction Sqoop是一个工具,用来在关系型数据库和Hadoop之间传输数据。 你可以使用Sqoop来从RDBMS(MySQL or Oracle)到Hadoop环境里, 通过MR转换数据,把数据导回到数...

强子哥哥
2015/12/28
96
0
Apache Sqoop 1.99.4 发布,Hadoop 数据迁移

Apache Sqoop 1.99.4 发布,这是 Sqoop2 的第四个里程碑版本,是非常重要的一个里程碑。 Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如 : ...

oschina
2014/11/27
2.2K
0

没有更多内容

加载失败,请刷新页面

加载更多

原型模式

1、原型模式-定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 克隆(浅度克隆->拷贝值类型或者引用,深度克隆->创建新的对象,开辟新的内存) 例如客户端知道抽象Pro...

阿元
今天
47
0
awk命令扩展使用操作

awk 中使用外部shell变量 示例1 [root@centos01 t1022]# A=888[root@centos01 t1022]# echo "" | awk -v GET_A=$A '{print GET_A}'888[root@centos01 t1022]# echo "aaaaaaaaaaaaa" | aw......

野雪球
今天
41
0
深入解析MySQL视图VIEW

Q:什么是视图?视图是干什么用的? A:视图(view)是一种虚拟存在的表,是一个逻辑表,本身并不包含数据。作为一个select语句保存在数据字典中的。   通过视图,可以展现基表的部分数据;...

IT--小哥
今天
45
0
虚拟机学习之二:垃圾收集器和内存分配策略

1.对象是否可回收 1.1引用计数算法 引用计数算法:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时候计数器值为0的对象就是不可能...

贾峰uk
今天
40
0
smart-doc功能使用介绍

smart-doc从8月份底开始开源发布到目前为止已经迭代了几个版本。在这里非常感谢那些敢于用smart-doc去做尝试并积极提出建议的社区用户。因此决定在本博客中重要说明下smart-doc的功能,包括使...

上官胡闹
昨天
47
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部