热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Sqoop导出数据

官方文档已经比较详细,这里只是介绍几个简单的例子导出到HDFS按列导出sqoopimport\--connectjdbc:mysql:${host}:${port}${db}\--

官方文档 已经比较详细,这里只是介绍几个简单的例子

导出到 HDFS

按列导出

sqoop import \
--connect jdbc:mysql://${host}:${port}/${db} \
--username ${user} \
--password ${passwd} \
--table foos \
--columns 'id,name,click,editdate' \
--where 'click >= 100' \
--delete-target-dir \
--target-dir /path/to/foos \
--hive-delims-replacement " " \
--fields-terminated-by '\001' \
--num-mappers 1

参数说明

  • --connect, --username, --password 数据库连接参数
  • --table 需要导出的表名
  • --columns 需要导出的列,用 , 分隔且不能重复
  • --delete-target-dir 导出的目标位置已经存在时,先删除该目录,没有这个参数导出会终止
  • --target-dir 导出的目标位置
  • --hive-delims-replacement 替换文本字段中的 \n, \r, \001 字符。Hive 会把 \r\n 都当初新行来对待,如果导出的文本中包含这些字符,需要使用此参数
  • --fields-terminated-by 导出文件的列分隔符,导出的列包含复杂的文本字段,则必须使用 \001 作为分隔符,这是由于 sqoop 只会替换 \n, \r, \001 字符,如果分隔符为 \t 且文本字段中包含 \t,就会导致列错位
  • --num-mappers 并发的任务数量。建议设置为 1 减少数据库压力。注意设置为大于 1 的值时,sqoop 会额外启动几个重复的任务(通常是2个)来竞争资源

按查询语句导出

sqoop import \
--connect jdbc:mysql://${host}:${port}/${db} \
--username ${user} \
--password ${passwd} \
--query "select id,name,click,editdate,'$day' as nowtime from foos where click >= 100 and \$CONDITIONS" \
--delete-target-dir \
--target-dir /path/to/foos \
--fields-terminated-by '\001' \
--hive-delims-replacement " " \
--num-mappers 4 \
--split-by id

--query 导出数据使用的查询语句,条件中必须包含 $CONDITIONS,用于并行导入任务。并行导入的条件由 --split-by 控制。查询语句导出比较灵活,如可以导出重复的字段和使用数据库函数转换格式等,本例中添加了一个数据库中没有的 nowtime 字段作为输出

导出到 HBase

sqoop import \
--connect jdbc:mysql://${host}:${port}/${db} \
--username ${user} \
--password ${passwd} \
--table foos \
--columns "id,name,click,editdate" \
--where "editdate > $start" \
--hbase-table foos \
--hbase-row-key id \
--column-family cf \
--num-mappers 1

和导出到 HDFS 的方式大致相同。目标位置从 HDFS 目录变为 HBase 的表名、RowKey 和 列族。一次只能导出数据到一个列族中

增量导出

用 last_value 的方式来代替时间戳进行增量更新也会遇到之前数据不断滚动导致丢失的问题(提交hadoop的任务太慢了)

参数 --check-column, --incremental, --last-value 用于指定增量导出的行为。下例中导出 editdate > 1469700476 的数据到 HBase.
注意增量导出用于时间戳字段时,可能会遇到更新很频繁的数据遗漏问题。sqoop 在查询前会获取 check-column 的最新值,但是提交任务到 hadoop 的有较大的延迟,可能已经有很多数据被修改而没有被导出

增量导出时候保存为任务执行,sqoop 会记录任务最后一次更新的值

sqoop import \
--connect jdbc:mysql://${host}:${port}/${db} \
--username ${user} \
--password ${passwd} \
--table foos \
--columns ${columns} \
--hbase-table foos \
--hbase-row-key id \
--column-family cf \
--check-column editdate \
--incremental append \
--last-value 1469700476 \
--num-mappers 1 \
--verbose

保存任务

先修改 $SQOOP_HOME/conf/sqoop-site.xml 配置允许保存密码


sqoop.metastore.client.record.password
true

创建任务

sqoop job --create update_foos -- import \
--connect jdbc:mysql://${host}:${port}/${db} \
--username ${user} \
--password ${passwd} \
--table foos \
--columns ${columns} \
--hbase-table foos \
--hbase-row-key id \
--column-family cf \
--check-column editdate \
--incremental append \
--num-mappers 1 \
--verbose

然后从一个比较近的时间点开始执行

sqoop job --exec update_foos -- --last-value 1469700476

再查看任务信息,发现 incremental.last.value 属性已经更新

sqoop job --show update_foos

推荐阅读
  • 如何在mysqlshell命令中执行sql命令行本文介绍MySQL8.0shell子模块Util的两个导入特性importTableimport_table(JS和python版本 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • ubuntu用sqoop将数据从hive导入mysql时,命令: ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • 大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记
    本文介绍了大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记,包括outputFormat接口实现类、自定义outputFormat步骤和案例。案例中将包含nty的日志输出到nty.log文件,其他日志输出到other.log文件。同时提供了一些相关网址供参考。 ... [详细]
  • 什么是大数据lambda架构
    一、什么是Lambda架构Lambda架构由Storm的作者[NathanMarz]提出,根据维基百科的定义,Lambda架构的设计是为了在处理大规模数 ... [详细]
  • Kylin 单节点安装
    软件环境Hadoop:2.7,3.1(sincev2.5)Hive:0.13-1.2.1HBase:1.1,2.0(sincev2.5)Spark(optional)2.3.0K ... [详细]
  • 我们在之前的文章中已经初步介绍了Cloudera。hadoop基础----hadoop实战(零)-----hadoop的平台版本选择从版本选择这篇文章中我们了解到除了hadoop官方版本外很多 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • Postgresql备份和恢复的方法及命令行操作步骤
    本文介绍了使用Postgresql进行备份和恢复的方法及命令行操作步骤。通过使用pg_dump命令进行备份,pg_restore命令进行恢复,并设置-h localhost选项,可以完成数据的备份和恢复操作。此外,本文还提供了参考链接以获取更多详细信息。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
  • 2018-02-1420:07:13,610ERROR[main]regionserver.HRegionServerCommandLine:Regionserverexiting ... [详细]
  • Hive的数据表创建数据文件inner_table.dat创建表hive>createtableinner_table(keystri ... [详细]
author-avatar
岳述穗__
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有