sqoop1.99.6 mysql_Sqoop 1.99.6 安装和使用

本文详细介绍了如何使用Sqoop在MySQL和Hive之间迁移数据,包括安装配置、基本操作及高级功能如增量导入等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安装

1.安装准备工作:

下载的sqoop安装包

http://mirrors.hust.edu.cn/apache/sqoop/1.99.6/sqoop-1.99.6.tar.gz

2.解压文件到工作目录:

hadoop@hadoopMaster:$ sudo tar -xvf /opt/hn/hadoop_family/sqoop-1.99.6-bin-hadoop200.tar.gz

hadoop@hadoopMaster:mv /opt/hn/hadoop_family/sqoop-1.99.6-bin-hadoop200 /usr/local/sqoop

3.修改环境变量:

hadoop@hadoopMaster:~$ vim /etc/profile

添加如下内容:

#sqoop

export SQOOP_HOME=/usr/local/sqoop

export PATH=$SQOOP_HOME/bin:$PATH

export CATALINA_HOME=$SQOOP_HOME/server

export LOGDIR=$SQOOP_HOME/logs

保存退出即时生效:

source /etc/profile

4.修改sqoop配置:

hadoop@hadoopMaster:~$ vim /usr/local/sqoop/server/conf/sqoop.properties

#修改指向我的hadoop安装目录

org.apache.sqoop.submission.engine.mapreduce.configuration.directory=/usr/local/hadoop/

#把hadoop目录下的jar包都引进来

hadoop@hadoopMaster:~$ vim /usr/local/sqoop/server/conf/catalina.properties

common.loader=/usr/local/hadoop/share/hadoop/common/*.jar,/usr/local/hadoop/share/hadoop/common/lib/*.jar,/usr/local/hadoop/share/hadoop/hdfs/*.jar,/usr/local/hadoop/share/hadoop/hdfs/lib/*.jar,/usr/local/hadoop/share/hadoop/mapreduce/*.jar,/usr/local/hadoop/share/hadoop/mapreduce/lib/*.jar,/usr/local/hadoop/share/hadoop/tools/*.jar,/usr/local/hadoop/share/hadoop/tools/lib/*.jar,/usr/local/hadoop/share/hadoop/yarn/*.jar,/usr/local/hadoop/share/hadoop/yarn/lib/*.jar,/usr/local/hadoop/share/hadoop/httpfs/tomcat/lib/*.jar

5.下载mysql驱动包

mysql-connector-java-5.1.16-bin.jar

6.启动/停止sqoop200

hadoop@hadoopMaster:/usr/local/sqoop/bin$ ./sqoop.sh server start/stop

查看启动日志:

hadoop@hadoopMaster:/usr/local/sqoop/server/logs$ vim catalina.out

7.进入客户端交互目录

hadoop@hadoopMaster:/usr/local/sqoop/bin$ ./sqoop.sh client

使用

1 查看所有数据库:

sqoop list-databases --connect  jdbc:mysql://192.168.1.1:3306/ --username root --password 123456

2 查看具体数据库内的表

sqoop list-tables --connect jdbc:mysql://localhost:3306/kellte --username root --password 123456

3  将关系型数据表结构users复制到Hive默认库的表users中:

sqoop create-hive-table --connect jdbc:mysql://localhost:3306/test --table users --username root  --password 123456

--hive-table users --fields-terminated-by "\0001"  --lines-terminated-by "\n";

参数说明:  这两个参数可以不加

--fields-terminated-by "\0001"  是设置每列之间的分隔符,"\0001"是ASCII码中的1,它也是hive的默认行内分隔符,

而sqoop的默认行内分隔符为","

--lines-terminated-by "\n"  设置的是每行之间的分隔符,此处为换行符,也是默认的分隔符;

4  将mysql表student数据拷贝到hive默认库的student表中:这里使用一个mapreduce来执行

sqoop

import --connect jdbc:mysql://192.168.1.1:3306/kettle --username root

--passwd 123456 --table  student  --hive-import --hive-table student -m

1;

5 根据列导入数据: 将kettle库下student表的name属性 写入到 hive表的student1中

sqoop import --connect jdbc:mysql://192.168.1.1:3306/kettle --username root --password 123456

--table student  --column 'name'  --hive-import --hive-table student1 -m1;

5.1  column和where合用在mysql导出到hive中:

sqoop import --connect jdbc:mysql://192.168.1.1:3306/kettle --username root --password 123456

--table student --columns "id,age,name"  --where "id > 3 and (age = 88 or age = 80)"  -m 1

--target-dir /user/hive/warehouse/userinfos2 --fields-terminated-by ",";

注意:--target-dir /user/hive/warehouse/userinfos2   可以用  --hive-import --hive-table userinfos2 进行替换

5.2 将数据表导入到HDFS中

sqoop import --append --connect $CONNECTURL --username $ORACLENAME --password $ORACLEPASSWORD

--target-dir $hdfsPath --m 1 --table $oralceTableName --columns $columns

--fields-terminated-by '\001' --where "data_desc='2011-02-26'"

6 增量添加数据:

Sqoop提供了原生增量导入的特性,包含以下三个关键参数:

--check-column (col)    指定一个“标志列”用于判断增量导入的数据范围,该列不能是字符型,最好是数字或者日期型(这个很好理解吧)。

--incremental (mode)    指定增量模式,包含“追加模式”  append 和“最后修改模式”  lastmodified (该模式更满足常见需求)。

--last-value (value)    指定“标志列”上次导入的上界。如果“标志列”是最后修改时间,则--last-value为上次执行导入脚本的时间。

sqoop支持两种增量MySql导入到hive的模式

一种是 append,即通过指定一个递增的列,比如:

--incremental append  --check-column num_iid --last-value 0

另种是可以根据时间戳,比如:

--incremental lastmodified --check-column created --last-value '2012-02-01 11:0:00'

就是只导入created 比'2012-02-01 11:0:00'更大的数据。

sqoop

job --create incretest -- import --connect

jdbc:oracle:thin:@192.168.0.138:1521:orcl  --username HIVE --password

hivefbi --table FBI_SQOOPTEST --hive-import --hive-table INCRETEST

--incremental lastmodified --check-column LASTMODIFIED --last-value

'2014/8/27 13:00:00'

注意

导入数据的过程中,如果碰到列值为null的情况,hive中为null的是以\N代替的,所以你在导入到MySql时,需要加上两个参数:--

input-null-string '\\N' --input-null-non-string

'\\N',多加一个'\',是为转义。如果你通过这个还不能解决字段为null的情况,还是报什么NumberFormalt异常的话,那就是比较另类

的了,没有关系,我们还是要办法解决,这就是终极武器。呵呵

--direct 只支持mysql 5.0 + 和postgresql 8.3+(只是import)

jdbc的jar包需要放在$SQOOP_HOME/lib目录下

mysql zeroDateTimeBehavior

mysql允许DATE列使用'0000-00-00\' 如果不处理sqoop默认给转换为null

当然你也可以自己指定为 round,自动转换为('0001-01-01\')

$ sqoop import --table foo --connect jdbc:mysql://db.example.com/someDb?zeroDateTimeBehavior=round

mysql UNSIGNED 列

如果是UNSIGNED的,它是介于0 and 2^32 (4294967295)的,但是数据库会告诉sqoop,这是整形

整形的大小是介于-2147483648 and \+2147483647的,超过214748364的,它处理不了。

--direct模式不支持BLOB和CLOB,不支持视图

为了性能,一般的是32MB提交一次,可以通过 -D sqoop.mysql.export.checkpoint.bytes=size来指定

它的单位是bytes,设置为0,就禁用检查点了。

在对生产环境导入数据时,用户也在用,我们通过stage表来解决稳定性的问题,肯定会对生产环境产生影响

我们可以通过设置 -D sqoop.mysql.export.sleep.ms=time 参数(单位毫秒)来让它停止一段时间

每传输sqoop.mysql.export.checkpoint.bytes个字节就休息一段时间

oracle部分

sqoop支持 ojdbc6.jar

oracle当中的DATE和TIME,都会当做是TIMESTAMP值,sqoop会当做java.sql.Timestamp来存储

当把数据导回到数据库的时候,sqoop会把它转换为 yyyy-mm-dd HH:MM:SS.ffffffff格式

但是你只希望yyyy-mm-dd格式

时区,默认是GMT

$ sqoop import -D oracle.sessionTimeZone=America/Los_Angeles --connect jdbc:oracle:thin:@//db.example.com/foo --table bar

hive和sql的数据类型匹配

DATE,TIME,TIMESTAMP 会被当做是字符串处置, NUMERIC和DECIMAL会被认为是double

sqoop会提醒你精度丢失了

Microsoft SQL特殊的参数

--schema      Scheme name that sqoop should use. Default is "dbo".

--table-hints      Table hints that Sqoop should use for data movement.

$ sqoop import ... --table custom_table -- --schema custom_schema

$ sqoop import ... --table custom_table -- --table-hints NOLOCK

PostgreSQL

$ sqoop export (generic-args) --connection-manager org.apache.sqoop.manager.PGBulkloadManager (export-args)

支持参数和例子

Property     Description

mapred.reduce.tasks     map数量

pgbulkload.bin             pg_bulkoad binary安装路径,每一台机器都有

pgbulkload.check.constraints     检查约束,默认是true

pgbulkload.parse.errors             在转义,加密,过滤,检查约束,数据类型转换中产生的错误的最大数,默认是无穷大

pgbulkload.duplicate.errors     数据重复的忍耐值. 重复值在数据库中存储是badfile,默认是无穷大

pgbulkload.filter             转换每一行为输入的数据

Here is a example of complete command line.

$ sqoop export \

-Dmapred.reduce.tasks=2

-Dpgbulkload.bin="/usr/local/bin/pg_bulkload" \

-Dpgbulkload.input.field.delim=$'\t' \

-Dpgbulkload.check.constraints="YES" \

-Dpgbulkload.parse.errors="INFINITE" \

-Dpgbulkload.duplicate.errors="INFINITE" \

--connect jdbc:postgresql://pgsql.example.net:5432/sqooptest \

--connection-manager org.apache.sqoop.manager.PGBulkloadManager \

--table test --username sqooptest --export-dir=/test -m 2

参数

import的主要参数:

--connect     jdbc连接地址

--connection-manager      连接管理者

--driver      驱动类

--hadoop-mapred-home

--password      密码

--username      账号

--verbose    打印信息

--help     help信息

--connection-param-file   可选参数

--append     添加到hdfs中已经存在的dataset

--as-avrodatafile     导入数据作为avrodata

--as-sequencefile     导入数据位SequenceFiles

--as-textfile          默认导入数据为文本

--boundary-query      创建splits的边界

--columns

     选择列

--direct             使用直接导入快速路径

--direct-split-size      在快速模式下每n字节使用一个split

--fetch-size      一次读入的数量

--inline-lob-limit      最大数值 an inline LOB

-m,--num-mappers      通过实行多少个map,默认是4个,某些数据库8 or 16性能不错

-e,--query      通过查询语句导入

--split-by      创建split的列,默认是主键

--table      要导入的表名

--target-dir

--warehouse-dir

--where      where条件

-z,--compress     Enable compression

--compression-codec      压缩方式,默认是gzip

--null-string     字符列null值

--null-non-string      非字符列null值

export主要参数

--direct     快速导入

--export-dir

-m,--num-mappers      都少个map线程

--table      导出哪个表

--call      存储过程

--update-key      通过哪个字段来判断更新

--update-mode      插入模式,默认是只更新,可以设置为allowinsert.

--input-null-string      字符类型null处理

--input-null-non-string      非字符类型null处理

--staging-table      临时表

--clear-staging-table                     清空临时表

--batch                                     批量模式

转义字符相关参数

--enclosed-by      设置字段结束符号

--escaped-by      用哪个字符来转义

--fields-terminated-by      字段之间的分隔符

--lines-terminated-by      行分隔符

--mysql-delimiters             使用mysql的默认分隔符: , lines: \n escaped-by: \ optionally-enclosed-by: '

--optionally-enclosed-by      复制结束符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值