文档章节

Sqoop源代码笔记

强子1985
 强子1985
发布于 2015/12/25 11:04
字数 791
阅读 129
收藏 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

粉丝 875
博文 1105
码字总数 811915
作品 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
sqoop2 1.99.6 中遇到问题及源码修改汇总

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

去买大白兔
2017/05/21
0
0
2、sqoop的命令使用

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

刘付kin
2016/12/04
29
0
兄弟连区块链教程Fabric1.0源代码分析Peer

区块链教程Fabric1.0源代码分析Peer,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的...

兄弟连区块链入门教程
11/05
0
0
兄弟连区块链教程Fabric1.0源代码分析Ledger(账本)二

区块链教程Fabric1.0源代码分析Ledger(账本)二。 Fabric 1.0源代码笔记 之 Ledger(账本) 补充PeerLedger接口嵌入的commonledger.Ledger接口定义如下: ValidatedLedger接口暂未定义方法,...

兄弟连区块链入门教程
10/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

windows下让 jar 在后台运行的办法

windows下 运行 java jar 不出现 命令行 窗口 新建一个披处理 run.bat,内容如下 @echo off start javaw -jar xx.jar exit 双击运行即可。...

glen_xu
17分钟前
1
0
jdk1.8 lambda stream 指定的对象属性进行去重

原因:因为Stream提供的distinct()方法只能去除重复的对象,无法根据指定的对象属性进行去重,可以应付简单场景。 解决方案: //去重,共同信息保存到bizPledgeSupplierVOs里bizPledgeSupp...

INSISTQIAO
19分钟前
0
0
vue nextTick深入理解---vue性能优化、DOM更新时机、事件循环机制

定义[nextTick、事件循环] nextTick的由来: 由于vue的数据驱动视图更新是异步的,即修改数据的当下,视图不会立即更新,而是等同一事件循环中的所有数据变化完成之后再统一进行视图更新。...

JamesView
28分钟前
2
0
常用汉字编码

GB2312 仅包含大部分的常用简体汉字,但已经不能适应现在的需要; GB13000 由于GB2312的局限性,国家标准化委员会制定了GB13000编码; 但由于当时的硬件和软件都已经支持了GB2312,而GB13000...

晨猫
30分钟前
4
0
纳尼?我的Gradle build编译只要1s

https://juejin.im/post/5c00ec39e51d4555ec0394f6

SuShine
31分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部