设为首页 收藏本站
查看: 1007|回复: 0

[经验分享] Hadoop数据传输工具sqoop - 样例

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2018-10-30 12:03:00 | 显示全部楼层 |阅读模式
  Hadoop数据传输工具sqoop
  分类: 开源学习分享 Architecture hadoop 数据仓库 传输2013-03-24 19:22 8875人阅读 评论(2) 收藏 举报
  Sqoop Hadoop 数据传输
  目录(?)[+]
概述
  sqoop是Apache顶级项目,主要用来在Hadoop和关系数据库中传递数据。通过sqoop,我们可以方便的将数据从关系数据库导入到HDFS,或者将数据从HDFS导出到关系数据库。
  sqoop架构:



  sqoop架构非常简单,其整合了Hive、Hbase和Oozie,通过map-reduce任务来传输数据,从而提供并发特性和容错。
  sqoop的进一步发展可以参考:A New Generation of Data Transfer Tools for Hadoop: Sqoop 2
  sqoop主要通过JDBC和关系数据库进行交互。理论上支持JDBC的database都可以使用sqoop和hdfs进行数据交互。
  但是,只有一小部分经过sqoop官方测试,如下:
  Database            version            --direct support            connect string matches
  HSQLDB            1.8.0+            No            jdbc:hsqldb:*//
  MySQL            5.0+             Yes            jdbc:mysql://
  Oracle             10.2.0+            No             jdbc:oracle:*//
  PostgreSQL             8.3+            Yes             (import only)jdbc:postgresql://
  较老的版本有可能也被支持,但未经过测试。
  出于性能考虑,sqoop提供不同于JDBC的快速存取数据的机制,可以通过--direct使用。
  以下基于sqoop-1.4.3
安装
  sqoop安装使用可以参考http://www.54chen.com/java-ee/sqoop-mysql-to-hive.html,测试work
工具
  sqoop包含一系列的工具,运行sqoop help可以查看相关帮助,
  $ ./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
  job                Work with saved jobs
  list-databases     List available databases on a server
  list-tables        List available tables in a database
  merge              Merge results of incremental imports
  metastore          Run a standalone Sqoop metastore
  version            Display version information
  See 'sqoop help COMMAND' for information on a specific command.
  使用工具list-tables查看表,如下:
  $ ./sqoop list-tables --connect jdbc:mysql://127.0.0.1/test --username root --password 123456
  a
  t1
  可以使用codegen生成代码,但不执行map-reduce,如下:
  $ ./sqoop codegen --connect jdbc:mysql://127.0.0.1/test --username root --password 123456 --table a --
  class-name zxm_sqoop
  ......
  13/03/21 21:02:01 INFO orm.CompilationManager: Writing jar file: /tmp/sqoop-work/compile/29864e3980ab5630b699e8e1e2145369/zxm_sqoop.jar
  此处相关代码和java包可在 /tmp/sqoop-work/compile/29864e3980ab5630b699e8e1e2145369/找到

  Import
  sqoop 数据导入具有以下特点:
  1.支持文本文件(--as-textfile)、avro(--as-avrodatafile)、SequenceFiles(--as-sequencefile)。 RCFILE暂未支持,默认为文本
  2.支持数据追加,通过--apend指定
  3.支持table列选取(--column),支持数据选取(--where),和--table一起使用
  4.支持数据选取,例如读入多表join后的数据'SELECT a.*, b.* FROM a JOIN b on (a.id == b.id) ‘,不可以和--table同时使用
  5.支持map数定制(-m)
  6.支持压缩(--compress)
  7.支持将关系数据库中的数据导入到Hive(--hive-import)、HBase(--hbase-table)
  数据导入Hive分三步:1)导入数据到HDFS  2)Hive建表  3)使用“LOAD DATA INPAHT”将数据LOAD到表中
  数据导入HBase分二部:1)导入数据到HDFS 2)调用HBase put操作逐行将数据写入表
  *
  示例:
  mysql文件内容:
  mysql> select * from a;
  +------+--------+
  | key1 | value1 |
  +------+--------+
  |    1 | a1     |
  |    2 | a2     |
  |    3 | a3     |
  |    4 | a4     |
  |    5 | a5     |
  |    6 | a6     |
  |    7 | a7     |
  |    8 | a8     |
  |    9 | a9     |
  +------+--------+
  编写文件a.conf,内容:
  [html] view plaincopy

  •   import

  •   --append

  •   -m
  •   3

  •   --connect
  •   jdbc:mysql://127.0.0.1/test

  •   --username
  •   root

  •   --password
  •   123456

  •   --table
  •   a

  •   --target-dir
  •   /tmp/a

  •   --columns
  •   key1

  •   --where
  •   'key1>3'
  运行:
  $ ./sqoop --options-file a.conf
  查看输出:
  $ hadoop fs -ls /tmp/a/
  Found 3 items
  -rw-r--r--   1 work supergroup          4 2013-03-21 23:08 /tmp/a/part-m-00000
  -rw-r--r--   1 work supergroup          4 2013-03-21 23:08 /tmp/a/part-m-00001
  -rw-r--r--   1 work supergroup          4 2013-03-21 23:08 /tmp/a/part-m-00002
  ==》3个文件对应3个mapper
  $ hadoop fs -cat /tmp/a/*
  4
  5
  6
  7
  8
  9

  Export
  sqoop export 能将HDFS上的文件导出到关系数据库。其工作原理是根据用户指定的分隔符(字段分隔符:--fields-terminated-by)读入并解析数据,然后转换成insert/update语句导入数据到关系数据库。
  其具有以下特点:
  1. 支持将数据导出到表(--table)或者调用存储过程(--call)
  2. 支持insert、update模式
  3. 支持并发控制(-m)
  实例:
  $ hadoop fs -cat /tmp/b/*
  1,a
  2,b
  3,c
  $ ./sqoop export --connect jdbc:mysql://127.0.0.1/test --table b  -username root -password 123456 --ex
  port-dir /tmp/b
  mysql> select * from b;
  +------+--------+
  | key1 | value1 |
  +------+--------+
  |    1 | a      |
  |    2 | b      |
  |    3 | c      |
  +------+--------+
  出了上述提到的工具外,sqoop还提供了一些有意思的工具,例如sqoop job,有兴趣的同学可以研究下
其它:
  1. 通过使用map-reduce,sqoop提供了良好的并发性和容错,可以作为异构数据库同步工具。
  2. Sqoop虽然支持Hive、HBase,但并不完整,某些场景下数据传输后的加工不可避免
  3. 大数据传输,也许可以使用--direct


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-628468-1-1.html 上篇帖子: 去除Hadoop-Streaming行末多余的TAB 下篇帖子: HADOOP2.0,Exception java.lang.NoClassDefFoundError: org/apache/hadoop/mapreduce/
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表