文档章节

Sqoop源代码笔记

强子哥哥
 强子哥哥
发布于 2015/12/25 11:04
字数 791
阅读 117
收藏 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的一些重要属性如下:

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


 


© 著作权归作者所有

共有 人打赏支持
强子哥哥

强子哥哥

粉丝 860
博文 900
码字总数 615641
作品 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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

php 使用redis锁限制并发访问类

1.并发访问限制问题 对于一些需要限制同一个用户并发访问的场景,如果用户并发请求多次,而服务器处理没有加锁限制,用户则可以多次请求成功。 例如换领优惠券,如果用户同一时间并发提交换领...

豆花饭烧土豆
9分钟前
0
0
Linux环境搭建 | 手把手教你配置Linux虚拟机

在上一节 「手把你教你安装Linux虚拟机」 里,我们已经安装好了Linux虚拟机,在这一节里,我们将配置安装好的Linux虚拟机,使其达到可以开发的程度。 Ubuntu刚安装完毕之后,还无法进行开发,...

良许Linux
11分钟前
0
0
Nginix开启SSL支持HTTPS访问(自签名方法)

Nginix开启SSL支持HTTPS访问(自签名方法) 超文本传输安全协议(缩写:HTTPS,英语:Hypertext Transfer Protocol Secure)是超文本传输协议和SSL/TLS的组合,用以提供加密通讯及对网络服务器...

openthings
27分钟前
0
0
(三)Nginx配置·续

概述 前文写了关于Nginx环境配置,但是还没有完,接下来将会继续讲三个相关的配置 主要是以下三个 1.Nginx访问日志 2.Nginx日志切割 3.静态文件不记录日志和过期时间 Nginx访问日志 1.先看看...

杉下
今天
1
0
jquery创建类似于java的map

var map = {}; // Map map = new HashMap(); map[key] = value; // map.put(key, value); var value = map[key]; // Object value = map.get(key); var has = key in map; // boolean has = ......

SuperDabai
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部