一、概述

  1.sqoop是什么

    从其官网:http://sqoop.apache.org/

  Apache Sqoop(TM) is a tool designed for efficiently transferring bulk data between Apache Hadoop and structured datastores such as relational databases

    中文来说,就是:

sqoop是apache旗下一款“Hadoop和关系数据库服务器之间传送数据”的工具。

  导入数据:MySQL,Oracle导入数据到Hadoop的HDFS、HIVE、HBASE等数据存储系统;

  导出数据:从Hadoop的文件系统中导出数据到关系数据库

    简而言之,sqoop是一个数据迁移工具!

  2.主要原理  

    将导入或导出命令翻译成mapreduce程序来实现

    在翻译出的mapreduce中主要是对inputformat和outputformat进行定制

二、安装与配置

    1.准备

      本地具备java与hadoop环境,下载sqoop,下载地址:http://archive.apache.org/dist/sqoop/1.4.6/

      // 这里的Alpha表示的是内测版

      将下载的sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz上传到服务器

    2.解压

  1. [hadoop@mini1 ~]$ tar -zxvf sqoop-1.4..bin__hadoop-2.0.-alpha.tar.gz

    // 位置可以按照自己的习惯进行定义

  1. [hadoop@mini1 ~]$ mv sqoop-1.4..bin__hadoop-2.0.-alpha sqoop

    3.修改配置文件

  1. [hadoop@mini1 ~]$ cd sqoop/
  2. [hadoop@mini1 sqoop]$ cd conf/
  3. [hadoop@mini1 conf]$ mv sqoop-env-template.sh sqoop-env.sh

    通过which/whereis 定位一下hadoop等目录

    打开 sqoop-env.sh,修改以下几项(打开注释,添加相关值):

  1. export HADOOP_COMMON_HOME=/home/hadoop/apps/hadoop-2.6.4/
  2. export HADOOP_MAPRED_HOME=/home/hadoop/apps/hadoop-2.6.4/
  3. export HIVE_HOME=/home/hadoop/apps/hive-1.2.

    4.加入Mysql的jdbc驱动包

      由于我们是向MySQL导数据,所以需要的是对应的驱动包到Lib目录(这里就直接从hive里面拿了)

  1. [hadoop@mini1 sqoop]$ cp ~/apps/hive-1.2./lib/mysql-connector-java-5.1..jar ./lib/

    5.验证启动     

  1. [hadoop@mini1 sqoop]$ bin/sqoop

    // 如果配置了环境变量,将可以直接通过sqoop启动

    6.查看帮助

  1. [hadoop@mini1 sqoop]$ bin/sqoop help
  1. usage: sqoop COMMAND [ARGS]
  2.  
  3. Available commands:
  4. codegen Generate code to interact with database records
  5. create-hive-table Import a table definition into Hive
  6. eval Evaluate a SQL statement and display the results
  7. export Export an HDFS directory to a database table
  8. help List available commands
  9. import Import a table from a database to HDFS
  10. import-all-tables Import tables from a database to HDFS
  11. import-mainframe Import datasets from a mainframe server to HDFS
  12. job Work with saved jobs
  13. list-databases List available databases on a server
  14. list-tables List available tables in a database
  15. merge Merge results of incremental imports
  16. metastore Run a standalone Sqoop metastore
  17. version Display version information
  18.  
  19. See 'sqoop help COMMAND' for information on a specific command.

三、sqoop数据导入

  “导入工具”导入单个表从RDBMS到HDFS。表中的每一行被视为HDFS的记录。所有记录都存储为文本文件的文本数据(或者Avro、sequence文件等二进制数据)

  1.数据库导入HDFS

    1.语法

  1. $ sqoop import (generic-args) (import-args)

  // 完整参数,参考:http://sqoop.apache.org/docs/1.4.6/SqoopUserGuide.html#_literal_sqoop_import_literal

    2.示例

  1. bin/sqoop import \
  2. --connect jdbc:mysql://mini1:3306/test \
  3. --username root \
  4. --password Zcc170821# \
  5. --table girl \
  6. --m

   -m,--num-mappers <n> Use n map tasks to import in parallel,其他完整参数,参考文档

   未指定--target-dir /user/sqoop/test1 则默认为/user/hadoop/表名,这里可以进行在HDFS上的查看:

  1. [hadoop@mini1 lib]$ hadoop fs -cat /user/hadoop/girl/part-m-

  2.导入关系表到Hive

    其实基本上是从数据库到hdfs,再Load到hive的表,不过这里可以一步到位了

  1. bin/sqoop import \
  2. --connect jdbc:mysql://mini1:3306/test \
  3. --username root \
  4. --password Zcc170821# \
  5. --table girl \
  6. --target-dir /user/hadoop/girl2 \
  7. --hive-import \
  8. --m

 

   3.导入数据子集

    有时候只想导入数据表中的一部分数据,可以通过where来进行过滤筛选:

  1. bin/sqoop import \
  2. --connect jdbc:mysql://mini1:3306/test \
  3. --username root \
  4. --password Zcc170821# \
  5. --where "id > 5" \
  6. --target-dir /user/hadoop/girl3 \
  7. --table girl \
  8. --m

    当然,如果单纯where无法满足,可以使用自定义的query语句来筛选:——注意只要写了where则后面的 and \$CONDITIONS是死的,必须这么写!

  1. bin/sqoop import \
  2. --connect jdbc:mysql://mini1:3306/test \
  3. --username root \
  4. --password Zcc170821# \
  5. --query "select * from girl where name='11' and id>6 and \$CONDITIONS" \
  6. --target-dir /user/hadoop/girl3 \
  7. --table girl \
  8. --m

    也可以使用split by来指定切片字段,这样就结合--m参数分配了

  1. --split-by id \
  2. --m

    或者指定字段的分隔符,这样到HDFS就是这个分割符了。这样以后建表从hive映射就使用这个分隔符了:

  1. --fields-terminated-by <char>

  4.增量导入 

    增量导入( Incremental Imports)是仅导入新添加的表中的行的技术。

    它需要添加‘incremental’, ‘check-column’, 和 ‘last-value’选项来执行增量导入

  1. bin/sqoop import \
  2. --connect jdbc:mysql://mini1:3306/test \
  3. --username root \
  4. --password Zcc170821# \
  5. --table girl --m \
  6. --target-dir /user/hadoop/girl4 \
  7. --incremental append \
  8. --check-column id \
  9. --last-value

   // 如果不想一直因为已经存在target-dir而新建,可以使用参数delete-target-dir,这样就会自动删除已经存在的目录了!请选择性使用

  这样,targer-dir里面就是新增的数据了:

  1. [hadoop@mini1 lib]$ hadoop fs -cat /user/hadoop/girl4/part-m-
  2. ,,aa
  3. ,,bb

四、sqoop数据导出 

   1.从HDFS中导出

   将数据从HDFS导出到RDBMS数据库

  导出前,目标表必须存在于目标数据库中

    默认操作是从将文件中的数据使用INSERT语句插入到表中

    更新模式下,是生成UPDATE语句更新表数据

  1.手动创建目标表

  1. 两种方法复制表结构:
  2. 1.create table B as select * from A where 1=2;
  3. 或者:
  4. 2.create table B like A;

  这里就复制上面的girl的表结构了

  2.执行导出命令

  1. bin/sqoop export \
  2. --connect jdbc:mysql://mini1:3306/test \
  3. --username root \
  4. --password Zcc170821# \
  5. --table girl2 \
  6. --export-dir /user/hadoop/girl/

  如果文件不是默认的,分隔符,则添加指定参数:

  1. --fields-terminated-by '\t'

  2.sqoop作业

    sqoop也支持作业的形式

      --create创建

  1. bin/sqoop job --create myimportjob -- import --connect jdbc:mysql://hdp-node-01:3306/test --username root --password root --table emp --m 1

      --list查看

  1. $ sqoop job --list

      --show查看

  1. $ sqoop job --show myjob

      --exec执行

  1. $ sqoop job --exec myjob
  2. 它会显示下面的输出。
  3. // :: INFO tool.CodeGenTool: Beginning code generation
  4. ...

    但是我们可以用shell脚本的方式来运行调度,所以这个意义并不是很大.

大数据入门第十二天——sqoop入门的更多相关文章

  1. 大数据入门第十二天——azkaban入门

    一.概述 1.azkaban是什么 通过官方文档:https://azkaban.github.io/ Azkaban is a batch workflow job scheduler create ...

  2. 大数据入门第十二天——flume入门

    一.概述 1.什么是flume 官网的介绍:http://flume.apache.org/ Flume is a distributed, reliable, and available servi ...

  3. 大数据入门第二十天——scala入门(一)入门与配置

    一.概述 1.什么是scala  Scala是一种多范式的编程语言,其设计的初衷是要集成面向对象编程和函数式编程的各种特性.Scala运行于Java平台(Java虚拟机),并兼容现有的Java程序. ...

  4. 大数据入门第二十一天——scala入门(二)并发编程Akka

    一.概述 1.什么是akka Akka基于Actor模型,提供了一个用于构建可扩展的(Scalable).弹性的(Resilient).快速响应的(Responsive)应用程序的平台. 更多入门的基 ...

  5. 大数据入门第二十一天——scala入门(一)并发编程Actor

    注:我们现在学的Scala Actor是scala 2.10.x版本及以前版本的Actor. Scala在2.11.x版本中将Akka加入其中,作为其默认的Actor,老版本的Actor已经废弃 一. ...

  6. 大数据入门第二十天——scala入门(二)scala基础01

    一.基础语法 1.变量类型 // 上表中列出的数据类型都是对象,也就是说scala没有java中的原生类型.在scala是可以对数字等基础类型调用方法的. 2.变量声明——能用val的尽量使用val! ...

  7. 大数据入门第二十天——scala入门(二)scala基础02

    一. 类.对象.继承.特质 1.类 Scala的类与Java.C++的类比起来更简洁 定义: package com.jiangbei //在Scala中,类并不用声明为public. //Scala ...

  8. 大数据入门第十九天——推荐系统与mahout(一)入门与概述

    一.推荐系统概述 为了解决信息过载和用户无明确需求的问题,找到用户感兴趣的物品,才有了个性化推荐系统.其实,解决信息过载的问题,代表性的解决方案是分类目录和搜索引擎,如hao123,电商首页的分类目录 ...

  9. 大数据入门第十七天——storm上游数据源 之kafka详解(一)入门与集群安装

    一.概述 1.kafka是什么 根据标题可以有个概念:kafka是storm的上游数据源之一,也是一对经典的组合,就像郭德纲和于谦 根据官网:http://kafka.apache.org/intro ...

随机推荐

  1. Android 监听手机GPS打开状态

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/70854942 本文出自[赵彦军的博客] GPS_Presenter package ...

  2. 基于MSMQ绑定的WCF服务实现总结

    一. 创建消息队列    1 1) 创建一个非事物性的私有队列    1 2)设置消息队列访问权限    2 二.创建WCF服务并绑定消息队列    4 1)创建HelloService服务    4 ...

  3. 使用MonkeyTest对Android客户端进行压力测试

    目录 monkey命令简介 monkey命令参数说明 自动化实例 如何通过日志定位问题   1.monkey命令简介 Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中.它 ...

  4. 使用 D: 盘作为 Windows VM 上的数据驱动器

    如果应用程序需要使用 D 盘存储数据,请按照以下说明使用其他驱动器号作为临时磁盘. 切勿使用临时磁盘来存储需要保存的数据. 如果调整虚拟机大小或停止(解除分配)虚拟机,这可能会触发将虚拟机放置于新虚拟 ...

  5. T-SQL检查停止的复制作业代理,并启动 (转载)

    有时候搭建的复制在作业比较多的时候,会因为某些情况导致代理停止或出错,如果分发代理时间停止稍微过长可能导致复制延期,从而需要从新初始化复制,带来问题.因此我写了一个脚本定期检查处于停止状态的分发代理, ...

  6. Oracle数据库 插入数据格式,简单查询

    操作练习代码,知识点往下翻 TRUNCATE TABLE hehe1111; select * from hehe1111; desc hehe1111; ,'); ,'); ,'); ,'); ,' ...

  7. 转:SqlServer索引及优化详解

    (一)深入浅出理解索引结构 实际上,您可以把索引理解为一种特殊的目录.微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引.簇集索引)和非聚集索引(nonc ...

  8. ConcurrentModificationException探究

    modCount ? 在ArrayList,LinkedList,HashMap等等的内部实现增,删,改中我们总能看到modCount的身影,modCount字面意思就是修改次数 // HashMap ...

  9. 网络唤醒(WOL)全解指南:原理篇

    什么是网络唤醒 网络唤醒(Wake-on-LAN,WOL)是一种计算机局域网唤醒技术,使局域网内处于关机或休眠状态的计算机,将状态转换成引导(Boot Loader)或运行状态.无线唤醒(Wake-o ...

  10. 自己写的开源MVC-easyMVC分享

    简介 基本风格是按照spring mvc做的,在后期会加入一些新的特性,封装成易于自己项目使用的mvc框架. github地址: https://github.com/tangyanbo/easymv ...