文档章节

Sqoop官方文档翻译1

强子哥哥
 强子哥哥
发布于 2015/12/29 14:11
字数 1959
阅读 130
收藏 0
点赞 0
评论 0

7.2.4. Controlling Parallelism

Sqoop从大多数数据库源并行导入数据。
可以指定map任务的个数,这可以通过-m或者--num-mappers参数。
每个参数带一个整数---并发度。
默认的,4个并发度。
有一些数据库可以调整到8或者16会有更好地表现。
不要将这个数字超过mr集群的最大值,
任务一个接一个执行,有可能增加等待时间。
同样的,也不要增加数据库服务器能支持的最大并发数,
100个客户端可能会严重降低数据库的性能。

当执行并行导入时,sqoop需要一个标准来分区。
sqoop使用一个列来分区。
默认的,sqoop将使用主键列来分区。
低值和高值将从数据库里查询出来,map任务执行一个划分。
比如,如果有一个表格,有一个主键列id. 最小值0,最大值1000.
sqoop默认使用4个任务,sqoop将启动4个进程,每个进程执行如下所示的SQL.
SELECT * FROM sometable WHERE id >= lo AND id < hi, with (lo, hi) set to (0, 250), (250, 500), (500, 750), and (750, 1001)

如果值不是均匀分布,就会导致不均衡工作。此时可以考虑换一个列,通过 --split-by参数,
比如:--split-by employee_id
sqoop不支持多列。
如果表格没有索引列,或者有一个组合索引,需要手动选择一个列。

7.2.5. Controlling the Import Process

导入过程将使用JDBC.
有一些数据库可以使用自己的高速数据移动工具。
比如,mysql提供mysqldump工具,这个工具可以从mysql导出数据到其它系统。

通过指定--direct参数,sqoop就会尝试直接导入。效率比直接使用jdbc快。
目前,direct模式不支持导入大对象列,
 
当从postgresql导入且用direct模式时,每个文件可以指定最大大小,用--direct-split-size参数指定.


默认的,sqoop将导入表格foo到foo文件夹[HDFS]。
比如,如果用户名是someuser,那么数据就会导入到/user/someuser/foo/(files)

你可以调整父目录,通过--warehouse-dir参数。

$ sqoop import --connnect <connect-str> --table foo --warehouse-dir /shared \
    ...
这个命令就会导致文件写入到文件夹/shared/foo/ directory.

也可以显式的选择目标目录,比如:
$ sqoop import --connnect <connect-str> --table foo --target-dir /dest \
    ...
这样就会导入文件到/dest文件夹, --target-dir 不能和 --warehouse-dir一起使用。

当使用direct模式,可以指定额外的参数给工具。

如果参数--在命令行里指定,后面的参数就直接发给工具。
比如:下面的命令指定编码方式
$ sqoop import --connect jdbc:mysql://server.foo.com/db --table bar \
    --direct -- --default-character-set=latin1
默认的,如果目标文件夹已经在HDFS里存在了,sqoop将拒绝导入或者拒绝覆盖。
可以使用--append参数,sqoop将导入数据到一个临时的目录,
然后重命名文件到正常的目标文件夹里来避免冲突。

7.2.6. Controlling type mapping

Sqoop预先配置来映射大多数SQL类型到合适的java/hive对象。
尽管如此,默认的映射可能不是对所有人都合适,
可以通过--map-column-java来覆盖,或者通过--map-column-hive (for changing Hive mapping).

Table 4. Parameters for overriding mapping
Argument  Description
--map-column-java <mapping>  Override mapping from SQL to Java type for configured columns.
--map-column-hive <mapping>  Override mapping from SQL to Hive type for configured columns.

Sqoop希望是逗号隔开的映射列表<name of column>=<new type>
比如:
$ sqoop import ... --map-column-java id=String,value=Integer
Sqoop将报异常如果一些配置的映射没有被使用。

7.2.7. Incremental Imports[增量导入]

Sqoop提供一个增量导入模式,用来检索新生成的行。
下面的参数控制增量导入:
Table 5. Incremental import arguments:
Argument  Description
--check-column (col)  Specifies the column to be examined when determining which rows to import. (the column should not be of type CHAR/NCHAR/VARCHAR/VARNCHAR/ LONGVARCHAR/LONGNVARCHAR)
--incremental (mode)  Specifies how Sqoop determines which rows are new. Legal values for mode include append and lastmodified.
--last-value (value)  Specifies the maximum value of the check column from the previous import.

Sqoop支持两种类型的增量导入: 追加模式,最后修改模式。
可以使用--incremental参数来指定要执行的模式。

当导入表格时,这个表格不断增加行,行的id不断增加,此时应该指定append模式,
指定包含row的id的列,这是通过 --check-column参数
Sqoop导入行(行的id的值大于参数--last-value)
 

另外一个就是支持lastmodified模式,什么情况下使用这种模式?
表格的数据可能会被更新,每次修改都会更新last-modified列为当前时间戳。
列的值比--last-value指定的值新的列将会被导入。

增量模式导入的最后,--last-value的值会打印到屏幕上。
当执行连续的导入,需要指定--last-value来保证新数据。
这个会被自动处理,也是推荐模式。

7.2.8. File Formats

可以导入数据以2种模式:
1)文本文件 2)SequenceFiles

Delimited text是默认的文件导入格式
可以通过参数--as-textfile来指定
这个参数将写字符串到文件里,一行一个文件,列之间有分隔符,可以是逗号,\t,或者其它字符

下面的是一个例子:
1,here is a message,2010-05-01
2,happy new year!,2010-01-01
3,another message,2009-11-12
这种格式对大多数非二进制的数据类型适用,
也可以被Hive理解。

2)SequenceFiles 是一种二进制格式,存储数据为特定数据类型。
这些数据类型被java类理解,
sqoop将自动生成这些数据类型,这种格式支持二进制格式,适合存储二进制数据。
或者那些会被MR程序处理,
(reading from SequenceFiles is higher-performance than reading from text files, as records do not need to be parsed).

Avro数据文件是一种紧凑的,有效的二进制格式,
Avro支持版本号, so that when, e.g., columns are added or removed from a table, previously imported data files can be processed along with new ones.

默认的,数据没有被压缩,可以使用gzip算法压缩,通过-z或者--compress参数来指定,
或者指定任何Hadoop压缩方式,这是通过--compression-codec参数,这个适用于 SequenceFile, text, and Avro files.

7.2.9. Large Objects

7.2.10. Importing Data Into Hive

7.2.11. Importing Data Into HBase

7.2.12. Additional Import Configuration Properties

 

7.3. Example Invocations

下面的例子描述了怎样使用导入工具:

基本导入EMPLOYEES表格,数据库corp
$ sqoop import --connect jdbc:mysql://db.foo.com/corp --table EMPLOYEES

加上登陆:
$ sqoop import --connect jdbc:mysql://db.foo.com/corp --table EMPLOYEES \
    --username SomeUser -P
Enter password: (hidden)
Selecting specific columns from the EMPLOYEES table:
$ sqoop import --connect jdbc:mysql://db.foo.com/corp --table EMPLOYEES \
    --columns "employee_id,first_name,last_name,job_title"
 
控制并发map
$ sqoop import --connect jdbc:mysql://db.foo.com/corp --table EMPLOYEES \
    -m 8
 
启用msql的直接模式
$ sqoop import --connect jdbc:mysql://db.foo.com/corp --table EMPLOYEES \
    --direct
 
存储数据为SequenceFiles,指定生成类名为com.foocorp.Employee:
$ sqoop import --connect jdbc:mysql://db.foo.com/corp --table EMPLOYEES \
    --class-name com.foocorp.Employee --as-sequencefile
 
指定文本模式下的分隔符:
$ sqoop import --connect jdbc:mysql://db.foo.com/corp --table EMPLOYEES \
    --fields-terminated-by '\t' --lines-terminated-by '\n' \
    --optionally-enclosed-by '\"'
 
导入数据到Hive里:
$ sqoop import --connect jdbc:mysql://db.foo.com/corp --table EMPLOYEES \
    --hive-import
 
导入新employees: 
$ sqoop import --connect jdbc:mysql://db.foo.com/corp --table EMPLOYEES \
    --where "start_date > '2010-01-01'"
 
改变split列:
$ sqoop import --connect jdbc:mysql://db.foo.com/corp --table EMPLOYEES \
    --split-by dept_id
 
校验是否导入成功:
$ hadoop fs -ls EMPLOYEES
Found 5 items
drwxr-xr-x   - someuser somegrp          0 2010-04-27 16:40 /user/someuser/EMPLOYEES/_logs
-rw-r--r--   1 someuser somegrp    2913511 2010-04-27 16:40 /user/someuser/EMPLOYEES/part-m-00000
-rw-r--r--   1 someuser somegrp    1683938 2010-04-27 16:40 /user/someuser/EMPLOYEES/part-m-00001
-rw-r--r--   1 someuser somegrp    7245839 2010-04-27 16:40 /user/someuser/EMPLOYEES/part-m-00002
-rw-r--r--   1 someuser somegrp    7842523 2010-04-27 16:40 /user/someuser/EMPLOYEES/part-m-00003

$ hadoop fs -cat EMPLOYEES/part-m-00000 | head -n 10
0,joe,smith,engineering
1,jane,doe,marketing
...

执行增量导入,之前已经导入了100,000行数据。
$ sqoop import --connect jdbc:mysql://db.foo.com/somedb --table sometable \
    --where "id > 100000" --target-dir /incremental_dataset --append
 
数据库:corp,表格:EMPLOYEES,使用验证机制
$ sqoop import --connect jdbc:mysql://db.foo.com/corp \
    --table EMPLOYEES --validate

© 著作权归作者所有

共有 人打赏支持
强子哥哥

强子哥哥

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

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

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

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

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

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

sqoop——sqoop2使用

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

cjun1990 ⋅ 2016/11/17 ⋅ 0

sqoop2 中如何配置sqoop hook

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

wuqi57 ⋅ 2016/09/19 ⋅ 1

HBase数据导入工具总结

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

_陆豪 ⋅ 2017/08/24 ⋅ 0

sqoop2基本架构、部署和个人使用感受

一、概述 随着公司集群升级到2.x,hadoop周边的一些工具也进行了版本的更新。这次主要说说sqoop2的升级和部署,其中sqoop1和sqoop2基本框架和用法发生翻天覆地的改变,其对版本的向下兼容做的...

zengzhaozheng ⋅ 2014/06/28 ⋅ 0

2、sqoop的命令使用

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

刘付kin ⋅ 2016/12/04 ⋅ 0

【干货索引】阿里云大数据计算服务MaxCompute与生态系统的融合

摘要: MaxCompute大家都不陌生,之前产品名称叫ODPS,之后随国际化而更名。从支持阿里集团内部99%数据业务到计算能力对外输出,帮助政府、互联网公司、金融等进行大数据项目服务,使得数据变...

阿里云云栖社区 ⋅ 01/12 ⋅ 0

Sqoop官方文档翻译2

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

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

使用sqoop将数据从mysql同步到hbase

--- sqoop 数据同步 hbase --- 使用sqoop将数据从mysql同步到hbase知识点-HBase初体验知识点-愉快地通过Thrift访问HBase知识点-HBaseClient(Java) > 目前机器使用的sqoop版本 > sqoop1.4.6文...

知了小巷 ⋅ 2017/12/16 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring Bean基础

1、Bean之间引用 <!--如果Bean配置在同一个XML文件中,使用local引用--><ref bean="someBean"/><!--如果Bean配置在不同的XML文件中,使用ref引用--><ref local="someBean"/> 其实两种......

霍淇滨 ⋅ 25分钟前 ⋅ 0

05、基于Consul+Upsync+Nginx实现动态负载均衡

1、Consul环境搭建 下载consul_0.7.5_linux_amd64.zip到/usr/local/src目录 cd /usr/local/srcwget https://releases.hashicorp.com/consul/0.7.5/consul_0.7.5_linux_amd64.zip 解压consu......

北岩 ⋅ 28分钟前 ⋅ 0

Webpack 4 api 了解与使用

webpack 最近升级到了 v4.5+版 01 官方不再支持 node4 以下版本 官方不再支持 node4 以下版本官方不再支持 node4 以下的版本,所以如果你的node版本太低,先开始升级node吧!话说node10 ...

NDweb ⋅ 38分钟前 ⋅ 0

使用nodeJs安装Vue-cli

Vue脚手架就是一个Vue框架开发环境 脚手架的意思是帮你快速开始一个vue的项目,也就是给你一套vue的结构,包含基础的依赖库,只需要 npm install就可以安装,让我们不需要为了编辑或者一些其...

木筏笔歆 ⋅ 今天 ⋅ 0

【微信小程序开发实战】0x00.开发前准备工作

写在开始 本人资深后端码农一枚,近期项目需求,接触到了微信小程序,将学习过程整理成文分享给小伙伴们,由于是边学边整理难免有表述不对的地方,望大家及时指正,感谢。 本人微信号: dream...

dreamans ⋅ 今天 ⋅ 0

linux redis的安装和php7下安装redis扩展

安装redis服务器 (1)下载安装包: $ wget http://download.redis.io/releases/redis-2.8.17.tar.gz (2)编译程序: $ tar xzf redis-2.8.17.tar.gz $ cd redis-2.8.17 $ make $ cd src &&......

concat ⋅ 今天 ⋅ 0

Guava EventBus源码解析

一、EventBus使用场景示例 Guava EventBus是事件发布/订阅框架,采用观察者模式,通过解耦发布者和订阅者简化事件(消息)的传递。这有点像简化版的MQ,除去了Broker,由EventBus托管了订阅&...

SaintTinyBoy ⋅ 今天 ⋅ 0

http怎么做自动跳转https

Apache 版本 如果需要整站跳转,则在网站的配置文件的<Directory>标签内,键入以下内容: RewriteEngine on RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^(.*)?$ https://%{SERVER_NAME......

Helios51 ⋅ 今天 ⋅ 0

Python爬虫,抓取淘宝商品评论内容

作为一个资深吃货,网购各种零食是很频繁的,但是能否在浩瀚的商品库中找到合适的东西,就只能参考评论了!今天给大家分享用python做个抓取淘宝商品评论的小爬虫! 思路 我们就拿“德州扒鸡”...

python玩家 ⋅ 今天 ⋅ 0

MySQL 内核深度优化

MYSQL数据库适用场景广泛,相较于Oracle、DB2性价比更高,Web网站、日志系统、数据仓库等场景都有MYSQL用武之地,但是也存在对于事务性支持不太好(MySQL 5.5版本开始默认引擎才是InnoDB事务...

java高级架构牛人 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部