Sqoop 实际应用及样例

Sqoop 实际应用及自定query导出

前置条件
已经成功安装配置Hadoop以及Sqoop和Mysql数据库服务器,如果将数据导入或从Hbase导出,还应该已经成功安装配置Hbase。
示例如何将Oracle中的数据导出到Hdfs中,query参数中为导出的查询sql,如查询语句中有where 条件则最后追加 and \$CONDITIONS

nohup /home/hadoop/sqoop/bin/sqoop import 
--connect jdbc:oracle:thin:@192.168.10.33:1521:orcl
--username runvista 
--password runco 
--fields-terminated-by '\0001' 
-m 6 
--split-by idnum 
--target-dir airport 
--delete-target-dir 
--compress 
--as-textfile 
--query "select  replace(a.mac,':',''),
      a.idtype,
      a.idnum,
      trunc(to_number(a.visittime-to_date('1970-01-01 8:0:0','yyyy-MM-DD HH24:MI:SS'))*24*60*60) visittime,
      trunc(to_number(a.createtime-to_date('1970-01-01 8:0:0','yyyy-MM-DD HH24:MI:SS'))*24*60*60),
      trunc(to_number(a.offtime-to_date('1970-01-01 8:0:0','yyyy-MM-DD HH24:MI:SS'))*24*60*60),
      d.placeaddress
 from airportdata a
 left join dic d
   on a.remoteip = d.placeip
where a.remoteip is not null and length(a.mac)>10 and \$CONDITIONS " & > /dev/null
/*
*导出hdfs上的数据
*/
hadoop fs -copyToLocal /user/hadoop/airport/* /tmp/
/*
*解压导出的数据
*/
gunzip /tmp/airport/*.gz

Sqoop在import时,需要制定split-by参数。Sqoop根据不同的split-by参数值来进行切分,然后将切分出来的区域分配到不同map中。每个map中再处理数据库中获取的一行一行的值,写入到HDFS中(由此也可知,导入导出的事务是以Mapper任务为单位)。同时split-by根据不同的参数类型有不同的切分方法,如比较简单的int型,Sqoop会取最大和最小split-by字段值,然后根据传入的num-mappers来确定划分几个区域。 比如select max(split_by),min(split-by) from得到的max(split-by)和min(split-by)分别为1000和1,而num-mappers为2的话,则会分成两个区域(1,500)和(501-100),同时也会分成2个sql给2个map去进行导入操作,分别为select XXX from table where split-by>=1 and split-by<500和select XXX from table where split-by>=501 and split-by<=1000。最后每个map各自获取各自SQL中的数据进行导入工作。

参数解释

数据导入工具import
import工具,是将HDFS平台外部的结构化存储系统中的数据导入到Hadoop平台,便于后续分析。我们先看一下import工具的基本选项及其含义,如下表所示:

表格

Markdown Extra 表格语法:

选项含义说明
–append将数据追加到HDFS上一个已存在的数据集上
–as-avrodatafile将数据导入到Avro数据文件
–as-sequencefile将数据导入到SequenceFile
–as-textfile将数据导入到普通文本文件(默认)
–boundary-query 边界查询,用于创建分片(InputSplit)
–columns 从表中导出指定的一组列的数据
–delete-target-dir如果指定目录存在,则先删除掉
–direct使用直接导入模式(优化导入速度)
–direct-split-size 分割输入stream的字节大小(在直接导入模式下)
–fetch-size 从数据库中批量读取记录数
–inline-lob-limit 设置内联的LOB对象的大小
-m,–num-mappers 使用n个map任务并行导入数据
-e,–query 导入的查询语句
–split-by 指定按照哪个列去分割数据
–table 导入的源表表名
–target-dir 导入HDFS的目标路径
–warehouse-dir HDFS存放表的根路径
–where 指定导出时所使用的查询条件
-z,–compress启用压缩
–compression-codec 指定Hadoop的codec方式(默认gzip)
–null-string 果指定列为字符串类型,使用指定字符串替换值为null的该类列的值
–null-non-string 如果指定列为非字符串类型,使用指定字符串替换值为null的该类列的值

数据导出工具export
export工具,是将HDFS平台的数据,导出到外部的结构化存储系统中,可能会为一些应用系统提供数据支持。我们看一下export工具的基本选项及其含义,如下表所示:

选项含义说明
–validate 启用数据副本验证功能,仅支持单表拷贝,可以指定验证使用的实现类
–validation-threshold 指定验证门限所使用的类
–direct使用直接导出模式(优化速度)
–export-dir 导出过程中HDFS源路径
-m,–num-mappers 使用n个map任务并行导出
–table 导出的目的表名称
–call 导出数据调用的指定存储过程名
–update-key 更新参考的列名称,多个列名使用逗号分隔
–update-mode 指定更新策略,包括:updateonly(默认)、allowinsert
–input-null-string 使用指定字符串,替换字符串类型值为null的列
–input-null-non-string 使用指定字符串,替换非字符串类型值为null的列
–staging-table 在数据导出到数据库之前,数据临时存放的表名称
–clear-staging-table清除工作区中临时存放的数据
–batch使用批量模式导出
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值