Sqoop 是什么及安装

Hadoop sqoop

Apache sqoop (SQL to Hadoop)

Sqoop is a tool designed to transfer data between Hadoop and relational databases or mainframes. You can use Sqoop to import data from a relational database management system (RDBMS) such as MySQL or Oracle or a mainframe into the Hadoop Distributed File System (HDFS), transform the data in Hadoop MapReduce, and then export the data back into an RDBMS.

Sqoop是一种用于在Hadoop和关系数据库或大型机之间传输数据的工具。你可以使用Sqoop从一个关系数据库管理系统(RDBMS)中导入数据,比如MySQL或Oracle,或者一个大型机到Hadoop分布式文件系统(HDFS),在Hadoop MapReduce中转换数据,然后将数据导出到RDBMS中。

sqoop 安装

1.解压

2.配置sqoop-env.sh文件

  1. #Set path to where bin/hadoop is available
  2. export HADOOP_COMMON_HOME=/opt/cdh-5.3.6/hadoop-2.5.0-cdh5.3.6
  3. #Set path to where hadoop-*-core.jar is available
  4. export HADOOP_MAPRED_HOME=/opt/cdh-5.3.6/hadoop-2.5.0-cdh5.3.6
  5. #Set the path to where bin/hive is available
  6. export HIVE_HOME=/opt/cdh-5.3.6/hive-0.13.1-cdh5.3.6

3.拷贝 MySQL 连接 jar 包到 lib 目录下

4.使用工具

  1. # 帮助文档
  2. bin/sqoop help
  3. bin/sqoop list-databases --help
  4. # 连接数据库
  5. bin/sqoop list-databases \
  6. --connect jdbc:mysql://hostname-ubuntu:3306 \
  7. --username root \
  8. --password ubuntu

Imports( RDBMS > HDFS )

底层通过JDBC连接数据库,通过生成 JAVA (只有 map 程序) 代码,编译成 jar ,经过 YARN 执行

  1. #执行命令(五要素)
  2. bin/sqoop import \
  3. --connect jdbc:mysql://hostname-ubuntu:3306/test \
  4. --username root \
  5. --password ubuntu \
  6. --table user \
  7. --target-dir /user/cen/sqoop/imp_user \
  8. # 注意文件夹不能存在
  9. # 若此项不设置默认会在 /user/cen/tablename/ 创建文件夹
  10. # 可添加以下选项解决
  11. # 删除目标目录
  12. --delete-target-dir \
  13. # 选择列
  14. --columns id,name \
  15. # 增加查询条件
  16. --where "age = '18'" \
  17. # 设置压缩
  18. --compress \
  19. --compression-codec org.apache.hadoop.io.compress.SnappyCodec
  20. # 设置输出的分隔符
  21. --fields-terminated-by '\t' \
  22. # 设置map数目
  23. --num-mappers 1 \
  24. # 设置文件存储格式(默认是textfile)
  25. --as-parquetfile \
  26. # 设置直接从 MySQL 直接导入(不经过MapReduce)
  27. --direct
  28. #日志分析
  29. Running Sqoop version: 1.4.5-cdh5.3.6 说明执行版本
  30. Setting your password on the command-line is insecure. Consider using -P instead. 这样使用密码是不安全的,推荐使用-p的方式
  31. Preparing to use a MySQL streaming resultset. 使用MySQL流导出数据
  32. Beginning code generation 开始生成Java代码
  33. Executing SQL statement: SELECT t.* FROM `user` AS t LIMIT 1 执行SQL查询语句
  34. Executing SQL statement: SELECT t.* FROM `user` AS t LIMIT 1 执行SQL查询语句
  35. HADOOP_MAPRED_HOME is /opt/cdh-5.3.6/hadoop-2.5.0-cdh5.3.6 Hadoop的目录是。。。
  36. Note: /tmp/sqoop-cen/compile/55ff43412ccc6eae25cf74ff6a4b119a/user.java uses or overrides a deprecated API. 生成jar
  37. Note: Recompile with -Xlint:deprecation for details.
  38. Writing jar file: /tmp/sqoop-cen/compile/55ff43412ccc6eae25cf74ff6a4b119a/user.jar 写入jar文件
  39. It looks like you are importing from mysql.
  40. This transfer can be faster! Use the --direct 这个转换可以更快,使用直接模式
  41. option to exercise a MySQL-specific fast path.
  42. Setting zero DATETIME behavior to convertToNull (mysql)
  43. Beginning import of user 开始导入数据
  44. Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
  45. mapred.jar is deprecated. Instead, use mapreduce.job.jar 使用mapreducejar

使用SQL查询语句(无需 tablename 无需选择列 无需where )

  1. bin/sqoop import \
  2. --connect jdbc:mysql://hostname-ubuntu:3306/test \
  3. --username root \
  4. --password ubuntu \
  5. --query 'select id from user where $CONDITIONS' \
  6. --target-dir /user/cen/sqoop/imp_user_query \
  7. --split-by id
  • 错误:When importing query results in parallel, you must specify --split-by.

  • 增加:--split-by id

  • 错误:Query [select id from user] must contain '$CONDITIONS' in WHERE clause.

  • 解决:--query 'select id from user where $CONDITIONS' \

增量数据导入Incremental import(只导入新增加的)

1. query 对时间戳进行条件查询(更好用)

  1. where createtime => 20170721000000 and createtimt < 201707220000

2. 使用 sqoop 的参数

--check-column Source column to check for incremental

change 根据哪一个字段进行查询

--incremental Define an incremental import of type

'append' or 'lastmodified' 追加方式

--last-value Last imported value in the incremental

check column 查询的开始值

Export( HDFS > RDBMS )( Hive > RDBMS )

底层通过JDBC连接数据库,通过生成 JAVA (只有 map 程序) 代码,编译成 jar ,经过 YARN 执行

  1. #执行命令(五要素)
  2. bin/sqoop export \
  3. --connect jdbc:mysql://hostname-ubuntu:3306/test \
  4. --username root \
  5. --password ubuntu \
  6. --table user \
  7. --export-dir /user/cen/sqoop/imp_user

Import Hive table

从 RDBMS 导入到 Hive 表中,底层实现:正常 Import > HDFS > load

  1. # 关系型数据库 4 要素(IP+database/username/pw/table) + Hive 4 要素(import/database/table/分隔符)
  2. bin/sqoop import \
  3. --connect jdbc:mysql://hostname-ubuntu:3306/test \
  4. --username root \
  5. --password ubuntu \
  6. --table user \
  7. --hive-import \
  8. --hive-database default \
  9. --hive-table user \
  10. --fields-terminated-by '\t' \
  11. --delete-target-dir \
  12. # 需要缓冲目录,若目录存在则删除
  13. --create-hive-table #若表不存在,需要创建的话

通过文件执行 sqoop 命令

!!格式如下:

  1. #这是注释!!
  2. bin/sqoop
  3. import
  4. --connect
  5. jdbc:mysql://hostname-ubuntu:3306/test
  6. --username
  7. root
  8. --password
  9. ubuntu
  10. --table
  11. user
  12. --target-dir
  13. /user/cen/sqoop/imp_user

执行:

  1. sqoop --options-file /opt/datas/xxx.xx

Sqoop 工具使用的更多相关文章

  1. 使用sqoop工具从oracle导入数据

    sqoop工具是hadoop下连接关系型数据库和Hadoop的桥梁,支持关系型数据库和hive.hdfs,hbase之间数据的相互导入,可以使用全表导入和增量导入 从RDBMS中抽取出的数据可以被Ma ...

  2. sqoop工具从oracle导入数据2

    sqoop工具从oracle导入数据 sqoop工具是hadoop下连接关系型数据库和Hadoop的桥梁,支持关系型数据库和hive.hdfs,hbase之间数据的相互导入,可以使用全表导入和增量导入 ...

  3. Sqoop工具

    简介 SQOOP是用于对数据进行导入导出的. (1)把MySQL.Oracle等数据库中的数据导入到HDFS.Hive.HBase中 (2)把HDFS.Hive.HBase中的数据导出到MySQL.O ...

  4. hive数据导入Sqoop工具

    下载Sqoop ,直接解压缩;然后导入2个环境变量 1.导入oracle数据库中表emp的数据到hive表中 1.导入到HDFS中 $ sqoop import --connect jdbc:mysq ...

  5. sqoop工具介绍(hdfs与关系型数据库进行数据导入导出)

    数据表 第一类:数据库中的数据导入到HDFS上 #数据库驱动jar包用mysql-connector-java--bin,否则有可能报错! ./sqoop import --connect jdbc: ...

  6. 初识sqoop

    Sqoop 产生背景 Sqoop 的产生主要源于以下几种需求: 1.多数使用 Hadoop 技术处理大数据业务的企业,有大量的数据存储在传统的关系型数据库(RDBMS)中. 2.由于缺乏工具的支持,对 ...

  7. 大数据之sqoop

    一.安装: 1 解压然后把mysql的驱动放在$SQOOP_HOME/lib 目录中2. conf/sqoop-en.sh export HADOOP_COMMON_HOME=/home/hadoop ...

  8. sqoop的安装与使用

    1.什么是Sqoop Sqoop即 SQL to Hadoop ,是一款方便的在传统型数据库与Hadoop之间进行数据迁移的工具.充分利用MapReduce并行特点以批处理的方式加快传输数据.发展至今 ...

  9. Sqoop安装与使用(sqoop-1.4.5 on hadoop 1.0.4)

    1.什么是Sqoop Sqoop即 SQL to Hadoop ,是一款方便的在传统型数据库与Hadoop之间进行数据迁移的工具,充分利用MapReduce并行特点以批处理的方式加快数据传输,发展至今 ...

随机推荐

  1. EF--payload or not

    负载加载非负载加载适用于多对多场境. 一.非负载(payload-free)加载 1.1创建表 create table Album ( AlbumId ,), AlbumName ) ) creat ...

  2. pcp分布式监控工具

    已经集成在redhat6.x版本里 http://pcp.io

  3. ASP.NET设置母版页

    母版页允许开发人员创建具有指定的可编辑区域的站点级模板.随后,此模板可应用到网站中的 ASP.NET 页面上.这些 ASP.NET 页面只需为母版页中指定的可编辑区域提供相应内容 – 在使用母版页的所 ...

  4. POJ-3067 Japan---树状数组逆序对变形

    题目链接: https://vjudge.net/problem/POJ-3067 题目大意: 日本岛东海岸与西海岸分别有N和M个城市,现在修高速公路连接东西海岸的城市,求交点个数. 解题思路: 记每 ...

  5. 优先队列(priority_queue)的cmp,POJ(2051)

    sort()函数的cmp为函数,priority_queue的cmp为类,具体写法是: struct Node { int i,j; } node[]; struct cmp { bool opera ...

  6. jenkins 执行shell命令出错command not found 和No such file or directory

    [root@localhost usr]# sh test.sh command not found -bash: cd: usr: No such file or directory 这里碰到了一个 ...

  7. 基于指令的移植方式的几个重要概念的理解(OpenHMPP, OpenACC)-转载

    引言: 什么是基于指令的移植方式呢?首先我这里说的移植可以理解为把原先在CPU上跑的程序放到像GPU一样的协处理器上跑的这个过程.在英文里可以叫Porting.移植有两种方式:一种是使用CUDA或者O ...

  8. 当Java遇见了Html--Jsp详解篇

    ###一.什么是Jsp jsp是一种基于文本的程序,全名java server page,其特点是html和java程序共存.执行时jsp会被运行容器编译,编译后的jsp跟servlet一样,因此js ...

  9. Informatica 简单使用

    1. Informatica简介 ① Repository manager 主要用来维护资料库的目录,对象,建完对象可以创建demo的folder. ② Administration Console是 ...

  10. Spring整合JUnit spring静态对象属性的注入

    package cn.itcast.d_junit4; import org.junit.Test; import org.junit.runner.RunWith; import org.sprin ...