文档章节

Sqoop官方文档翻译0

强子哥哥
 强子哥哥
发布于 2015/12/28 10:53
字数 2638
阅读 114
收藏 0
点赞 0
评论 0

官方文档翻译:

1. Introduction

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

Sqoop自动操作大部分过程,依赖于数据库来描述要导入的数据的模式。
Sqoop使用MR来导入/导出数据,可并行操作和错误处理。
本文档描述了如何使用sqoop来移动数据,以及命令行工具套件。

适用的读者群:
1) 系统和程序开发者
2) 系统管理员
3) 数据库管理员
4) 数据分析师
5) 数据工程师

2. Supported Releases 

Sqoop-v1.4.4

3. Sqoop Releases 

Sqoop是一个开源软件,来自于Apache基金会。
官网: http://sqoop.apache.org ,在这个网址,你可以获得:
Sqoop的新版本和最新源代码。
issue tracker
wiki

4. Prerequisites

所需技能:

基本的计算机技能和知识

熟悉命令行工具

关系型数据库

了解hadoop

Sqoop目前支持4个主要版本:  - 0.20, 0.23, 1.0 and 2.0.

本文档假设你在使用Linux环境

5. Basic Usage

基于Sqoop,你可以从关系型数据库导入数据到HDFS.
输入是一个数据库的表格,Sqoop会逐行读入到HDFS.输出则是一系列文件作为表格的备份。
导入过程是并行的,基于此,输出文件是多个文件。
这些文件可以是文本文件,或者二进制Avro,或者SequenceFiles
导入过程的副产品是一些生成的java类,这些类在导入过程中被使用。
这个类的java源码可以看到,在后续的MR操作中被使用。
这些类的能力很强大,可以让你很快开发MR程序。也可以自己解析有界记录。

处理完记录后,也许你想把数据再写回关系型数据库,
Sqoop的导出功能可以并行读取HDFS的文件,解析成记录,插入到关系型数据库里供后续使用。

Sqoop包含其它的命令,可以让你监视数据库。
比如,你可以列举出可用的数据库schemas.(with the sqoop-list-databases tool)
或者表格 (with the sqoop-list-tables tool).
Sqoop也包含原始的SQL执行shell (the sqoop-eval tool).

导入、代码生成、导出可以被定制。
你可以控制导入的行范围或者特定的列,也可以指定特定的边界符等。
你可以控制生成的代码里的类/包名

 

6. Sqoop Tools

Sqoop是一个相关工具的集合。
为了使用sqoop,你可以指定要使用的工具和参数来控制它。

如果sqoop是从源码编译的,你可以运行它不需要运行bin/sqoop.
$ sqoop tool-name [tool-arguments]
Sqoop ships with a help tool.


$ sqoop help
usage: sqoop COMMAND [ARGS]

Available commands:
  codegen            Generate code to interact with database records
  create-hive-table  Import a table definition into Hive
  eval               Evaluate a SQL statement and display the results
  export             Export an HDFS directory to a database table
  help               List available commands
  import             Import a table from a database to HDFS
  import-all-tables  Import tables from a database to HDFS
  list-databases     List available databases on a server
  list-tables        List availab le tables in a database
  version            Display version information

观察 'sqoop help COMMAND' 查看一个特定的命令,比如sqoop help import.
也可以使用sqoop import --help.

6.1. Using Command Aliases

也可以使用别名的脚本,比如sqoop-import,sqoop-export等

6.2. Controlling the Hadoop Installation

sqoop命令行调用bin/hadoop脚本。
如果你有多个hadoop的版本,你可以指定其中一个版本,通过$HADOOP_COMMON_HOME and $HADOOP_MAPRED_HOME环境变量。

例如:

$ HADOOP_COMMON_HOME=/path/to/some/hadoop \
  HADOOP_MAPRED_HOME=/path/to/some/hadoop-mapreduce \
  sqoop import --arguments...
or:
$ export HADOOP_COMMON_HOME=/some/path/to/hadoop
$ export HADOOP_MAPRED_HOME=/some/path/to/hadoop-mapreduce
$ sqoop import --arguments...

如果任何一个环境变量未指定,sqoop将使用 $HADOOP_HOME.如果这个变量还没有设置,则将使用默认位置 for Apache Bigtop, /usr/lib/hadoop and /usr/lib/hadoop-mapreduce, respectively.

The active Hadoop configuration is loaded from $HADOOP_HOME/conf/, unless the $HADOOP_CONF_DIR environment variable is set.

6.3. Using Generic and Specific Arguments

可以指定参数
比如:
$ sqoop help import
usage: sqoop import [GENERIC-ARGS] [TOOL-ARGS]

普通参数:
   --connect <jdbc-uri>     Specify JDBC connect string
   --connect-manager <jdbc-uri>     Specify connection manager class to use
   --driver <class-name>    Manually specify JDBC driver class to use
   --hadoop-mapred-home <dir>+      Override $HADOOP_MAPRED_HOME
   --help                   Print usage instructions
   --password-file          Set path for file containing authentication password
   -P                       Read password from console
   --password <password>    Set authentication password
   --username <username>    Set authentication username
   --verbose                Print more information while working
   --hadoop-home <dir>+     Deprecated. Override $HADOOP_HOME

[...]

总的Hadoop命令行参数:
(must preceed any tool-specific arguments)
Generic options supported are
-conf <configuration file>     specify an application configuration file
-D <property=value>            use value for given property
-fs <local|namenode:port>      specify a namenode
-jt <local|jobtracker:port>    specify a job tracker
-files <comma separated list of files>    specify comma separated files to be copied to the map reduce cluster
-libjars <comma separated list of jars>    specify comma separated jar files to include in the classpath.
-archives <comma separated list of archives>    specify comma separated archives to be unarchived on the compute machines.

命令行参数模式
bin/hadoop command [genericOptions] [commandOptions]
You must supply the generic arguments -conf, -D, and so on after the tool name but before any tool-specific arguments (such as --connect). Note that generic Hadoop arguments are preceeded by a single dash character (-), whereas tool-specific arguments start with two dashes (--), unless they are single character arguments such as -P.

The -conf, -D, -fs and -jt arguments control the configuration and Hadoop server settings. For example, the -D mapred.job.name=<job_name> can be used to set the name of the MR job that Sqoop launches, if not specified, the name defaults to the jar name for the job - which is derived from the used table name.

The -files, -libjars, and -archives arguments are not typically used with Sqoop, but they are included as part of Hadoop’s internal argument-parsing system.

6.4. Using Options Files to Pass Arguments

6.5. Using Tools

下面的章节将具体描述每个工具的操作。

7. sqoop-import

7.1. Purpose

import工具导入一个表格到HDFS里,表里的每行数据在HDFS里就是一条单独的记录。
记录可以被保存为text文件(每个记录一行),或者二进制文件比如avro|SequenceFiles

7.2. Syntax

$ sqoop import (generic-args) (import-args)
$ sqoop-import (generic-args) (import-args)
当hadoop的generic参数需要在import参数之前,
Table 1. Common arguments

Argument  Description
--connect <jdbc-uri>  Specify JDBC connect string
--connection-manager <class-name>  Specify connection manager class to use
--driver <class-name>  Manually specify JDBC driver class to use
--hadoop-mapred-home <dir>  Override $HADOOP_MAPRED_HOME
--help  Print usage instructions
--password-file  Set path for a file containing the authentication password
-P  Read password from console
--password <password>  Set authentication password
--username <username>  Set authentication username
--verbose  Print more information while working
--connection-param-file <filename>  Optional properties file that provides connection parameters

7.2.1. Connecting to a Database Server

Sqoop设计来导入数据库的表进入HDFS.
为了完成此目标,必须指定一个connect字符串(描述了怎样连接到数据库).
这个字符串类似于URL,通过--connect参数指定。
描述了要连接的数据库,和端口。
$ sqoop import --connect jdbc:mysql://database.example.com/employees

这个字符串,连接到mysql数据库employees. 主机为database.example.com
这个字符串会在MR中被TaskTracker节点使用,需要使用全主机名或者IP地址

也许还需要鉴权,--username 来提供用户名,有多种实现方式。

为了安全的提供密码,应该密码保存在家目录的文件里,具有400权限。
然后通过--password-file指定文件路径。
Sqoop将读取密码,传到MR过程中,

$ sqoop import --connect jdbc:mysql://database.example.com/employees \
    --username venkatesh --passwordFile ${user.home}/.password
 
 另外一种方式来提供密码是-P参数,从控制台读取参数。


$ sqoop import --connect jdbc:mysql://database.example.com/employees \
    --username aaron --password 12345
 
Sqoop会自动支持一些数据库,包括mysql.
Connect字符串以jdbc:mysql://开始,sqoop会自动处理。

下载合适的JDBC驱动,安装.jar文件在 $SQOOP_HOME/lib目录。
每个.jar文件有相应的驱动类。
比如,mysql的 Connector/J库有驱动类com.mysql.jdbc.Driver.
通过--driver参数指定驱动类。

例如,为了连接sqlserver数据库,下载驱动,在sqoop的lib目录下安装。

运行sqoop,例如:
$ sqoop import --driver com.microsoft.jdbc.sqlserver.SQLServerDriver \
    --connect <connect-string> ...
当使用JDBC连接数据库,可以通过额外的JDBC参数文件指定
这通过--connection-param-file.

Table 2. 验证参数的细节

Argument  Description
--validate  Enable validation of data copied, supports single table copy only. --validator <class-name> Specify validator class to use.
--validation-threshold <class-name>  Specify validation threshold class to use.
+--validation-failurehandler <class-name  >+ Specify validation failure handler class to use.

Table 3. Import control arguments:

参数  描述
--append  Append data to an existing dataset in HDFS
--as-avrodatafile  Imports data to Avro Data Files
--as-sequencefile  Imports data to SequenceFiles
--as-textfile  Imports data as plain text (default)
--boundary-query <statement>  Boundary query to use for creating splits
--columns <col,col,col…>  Columns to import from table
--delete-target-dir  Delete the import target directory if it exists
--direct  Use direct import fast path
--direct-split-size <n>  Split the input stream every n bytes when importing in direct mode
--fetch-size <n>  Number of entries to read from database at once.
--inline-lob-limit <n>  Set the maximum size for an inline LOB
-m,--num-mappers <n>  Use n map tasks to import in parallel
-e,--query <statement>  Import the results of statement.
--split-by <column-name>  Column of the table used to split work units
--table <table-name>  Table to read
--target-dir <dir>  HDFS destination dir
--warehouse-dir <dir>  HDFS parent for table destination
--where <where clause>  WHERE clause to use during import
-z,--compress  Enable compression
--compression-codec <c>  Use Hadoop codec (default gzip)
--null-string <null-string>  The string to be written for a null value for string columns
--null-non-string <null-string>  The string to be written for a null value for non-string columns

The --null-string and --null-non-string arguments are optional.\ If not specified, then the string "null" will be used.

7.2.2. Selecting the Data to Import

Sqoop 导入数据以表为单位,
使用--table参数来选择引入的表格。
比如:--table employees. 这个参数也可以指定一个视图或者其它类似的。

默认的,所有的列都被导入,导入的数据根据自然顺序写入HDFS.
比如说,有个表格包含列A,B,C。
导入的数据就是:
A1,B1,C1
A2,B2,C2
...
你可以选择列的子集来控制顺序,这通过使用--columns参数。
列之间用逗号隔开,比如 --columns "name,employee_id,jobtitle".

你可以控制那些行被导入,通过增加一个SQL WHERE语句。
默认的,sqoop产生语句类似于SELECT <column list> FROM <table name>.
增加一个where语句通过--where参数。
比如: --where "id > 400".

默认的,sqoop将使用查询 select min(<split-by>), max(<split-by>) from <table name>来找到分区的边界,
在一些情况下,这个查询不是最合适的,所以你可以自己指定任何强制的查询语句返回2个数字列,
这通过使用--boundary-query参数。

7.2.3. Free-form Query Imports

Sqoop可以导入指定的SQL语句的查询结果,而不是使用--table,--columns,--where语句。
可以指定一个SQL语句,通过--query参数。
当导入一个自由形式的查询语句,必须指定一个目标文件夹,这是通过--target-dir参数。

如果想并行导入数据,每个map任务需要执行查询的拷贝,结果被边界条件分区。

查询必须包括$CONDITIONS,每个sqoop过程将替换为独特的条件。
必须选择一个split列,通过参数--split-by

下面是一些例子:
$ sqoop import --query 'SELECT a.*, b.* FROM a JOIN b on (a.id == b.id) WHERE $CONDITIONS' \
  --split-by a.id --target-dir /user/foo/joinresults
Alternately, the query can be executed once and imported serially, by specifying a single map task with -m 1:

$ sqoop import \
  --query 'SELECT a.*, b.* FROM a JOIN b on (a.id == b.id) WHERE $CONDITIONS' \
  -m 1 --target-dir /user/foo/joinresults

© 著作权归作者所有

共有 人打赏支持
强子哥哥

强子哥哥

粉丝 856
博文 551
码字总数 647493
作品 8
南京
架构师
Sqoop官方文档翻译1

7.2.4. Controlling Parallelism Sqoop从大多数数据库源并行导入数据。 可以指定map任务的个数,这可以通过-m或者--num-mappers参数。 每个参数带一个整数---并发度。 默认的,4个并发度。 ...

强子哥哥 ⋅ 2015/12/29 ⋅ 0

sqoop——sqoop2使用

启动sqoop2 client后,就可以在sqoop2的命令行下执行各种命令了。sqoop官方的文档很全很好很简单,所有不清楚的先去官网找到官网的参考文档: User Guide 启动sqoop client:sqoop2,如果配置...

cjun1990 ⋅ 2016/11/17 ⋅ 0

Sqoop官方文档翻译2

8.1. Purpose import-all-tables命令导入一堆表格到HDFS, 每个表的数据存储在独立的HDFS目录里。 下列条件必须满足: 每个表必须有单列的主键 导入每个表的所有列 You must not intend to use...

强子哥哥 ⋅ 2015/12/29 ⋅ 0

[大数据之Sqoop] —— Sqoop初探

Sqoop是一款用于把关系型数据库中的数据导入到hdfs中或者hive中的工具,当然也支持把数据从hdfs或者hive导入到关系型数据库中。 Sqoop也是基于Mapreduce来做的数据导入。 关于sqoop的原理 sq...

青夜之衫 ⋅ 2017/12/05 ⋅ 0

sqoop2 中如何配置sqoop hook

在sqoop1.4.7这个版本中使用sqoop完成mysql 导入 hive的过程中出现sqoop_process在atlas中无法捕捉的情况,虽然通过其他的手段解决了,但是不知道兼容情况如何,因此决定尝试下sqoop2,版本号...

wuqi57 ⋅ 2016/09/19 ⋅ 1

2、sqoop的命令使用

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

刘付kin ⋅ 2016/12/04 ⋅ 0

HBase数据导入工具总结

本文对HBase常用的数据导入工具进行介绍,并结合云HBase常见的导入场景,给出建议的迁移工具和参考资料。 HBase之间数据导入常用工具 HBase提供了几种数据迁移工具,其中基于API调用的有Cop...

_陆豪 ⋅ 2017/08/24 ⋅ 0

《Istio官方文档》翻译邀请

《Istio官方文档》翻译邀请 并发编程网 – ifeve.com2018-01-020 阅读 2018新年快乐,本月并发网组织翻译Service Mesh框架( 什么是Service Mesh )《 Istio官方文档 》,欢迎有兴趣的同学参与...

并发编程网 – ifeve.com ⋅ 01/02 ⋅ 0

[Hadoop] Sqoop安装过程详解

Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系...

长平狐 ⋅ 2013/06/03 ⋅ 0

[Hadoop] Sqoop安装过程详解

Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系...

长平狐 ⋅ 2013/06/03 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

MySQL主从复制原理、半同步操作步骤及原理

1.1 企业Linux运维场景数据同步方案 1.1.1 文件级别的异机同步方案 1、scp/sftp/nc 命令可以实现远程数据同步。 2、搭建ftp/http/svn/nfs 服务器,然后在客户端上也可以把数据同步到服务器。...

xiaomin0322 ⋅ 8分钟前 ⋅ 0

Oracle10g 数据及文件迁移过程[原]

QL*Plus: Release 10.2.0.1.0 - Production on 星期三 5月 11 10:22:35 2011 Copyright (c) 1982, 2005, Oracle. All rights reserved. 连接到: Oracle Database 10g Enterprise Edition Re......

harrypotter ⋅ 14分钟前 ⋅ 0

nginx安装

1:安装工具包 wget、vim和gcc yum install -y wget yum install -y vim-enhanced yum install -y make cmake gcc gcc-c++ 2:下载nginx安装包 wget http://nginx.org/download/nginx-1......

壹丶贰 ⋅ 17分钟前 ⋅ 0

ideaVim安装及配置

1.安装插件 File-Settings-Plugins,Browse Repositories,输入ideavim,安装。 重启后,在Tools-Vim Emulator启用。 2.快捷键设置 ideaViim键与idea快捷键有冲突,可以在Settings-Other Se...

Funcy1122 ⋅ 21分钟前 ⋅ 0

MySQL中B+Tree索引原理

B+树索引是B+树在数据库中的一种实现,是最常见也是数据库中使用最为频繁的一种索引。B+树中的B代表平衡(balance),而不是二叉(binary),因为B+树是从最早的平衡二叉树演化而来的。在讲B...

浮躁的码农 ⋅ 35分钟前 ⋅ 0

两道面试题,带你解析Java类加载机制

在许多Java面试中,我们经常会看到关于Java类加载机制的考察,例如下面这道题: class Grandpa{ static { System.out.println("爷爷在静态代码块"); }} cl...

1527 ⋅ 39分钟前 ⋅ 0

SpringCloud(Data Flow)

dataflow-server

赵-猛 ⋅ 50分钟前 ⋅ 0

深入理解Java虚拟机

这本书我读到第8章,之后就是在读不下去了。 读到后面是一种痛苦的体验,太多的东西是不全面的,大量的专有名词是没有解释的,读到最后很多东西仅仅是一个侧面,所以我觉得,这本书不适合初学...

颖伙虫 ⋅ 55分钟前 ⋅ 0

NanoPi NEO core/ Ubuntu16.04单网卡配置3个IP地址(2个静态,1个动态)

配置 root@NanoPi-NEO-Core:/etc/network# cat interfacesauto loiface lo inet loopbackallow-hotplug eth0iface eth0 inet static address 172.31.188.249 netmask 255.......

SamXIAO ⋅ 今天 ⋅ 0

三步为你的App集成LivePhoto功能

摘要:LivePhoto是iOS9新推出的一种拍照方式,类似于拍摄Gif图或录制视频片段生成图片。如果没有画面感,可以联想《哈利波特》霍格沃茨城堡的壁画,哈哈,很炫酷有木有,但坑爹的是只有iphone6S以...

壹峰 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部