大数据之Sqoop <一>

Sqoop简介

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

Sqoop successfully graduated from the Incubator in March of 2012 and is now a Top-Level Apache project: More information

Latest stable release is 1.4.6 (downloaddocumentation). Latest cut of Sqoop2 is 1.99.7 (downloaddocumentation). Note that 1.99.7 is not compatible with 1.4.6 and not feature complete, it is not intended for production deployment.

Apache Sqoop(TM)是一种旨在有效地在Apache Hadoop和诸如关系数据库等结构化数据存储之间传输大量数据的工具。

Sqoop20123月孵化出来,现在是一个顶级的Apache项目。

最新的稳定版本是1.4.6Sqoop2的最新版本是1.99.7。请注意,1.99.71.4.6不兼容,且没有特征不完整,它并不打算用于生产部署

Sqoop原理

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

在翻译出的mapreduce中主要是对inputformatoutputformat进行定制。

Sqoop安装

安装Sqoop的前提是已经具备JavaHadoop的环境。

3.1、下载并解压

1) 最新版下载地址:http://mirrors.hust.edu.cn/apache/sqoop/1.4.6/

2) 上传安装包sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz到虚拟机中,如我的上传目录是:/home/admin/softwares/installation

3) 解压sqoop安装包到指定目录,如:

$ tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C ~/modules/

3.2、修改配置文件

Sqoop的配置文件与大多数大数据框架类似,在sqoop根目录下的conf目录中。

1) 重命名配置文件

$ mv sqoop-env-template.sh sqoop-env.sh

$ mv sqoop-site-template.xml sqoop-site.xml

 

2) 修改配置文件

sqoop-env.sh

export HADOOP_COMMON_HOME=/home/admin/modules/hadoop-2.7.2

export HADOOP_MAPRED_HOME=/home/admin/modules/hadoop-2.7.2

export HIVE_HOME=/home/admin/modules/apache-hive-1.2.2-bin

export ZOOKEEPER_HOME=/home/admin/modules/zookeeper-3.4.5

export ZOOCFGDIR=/home/admin/modules/zookeeper-3.4.5

 

3.3、拷贝JDBC驱动

拷贝jdbc驱动到sqooplib目录下,如:

$ cp -a mysql-connector-java-5.1.27-bin.jar ~/modules/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/lib/

3.4、验证Sqoop

我们可以通过某一个command来验证sqoop配置是否正确:

$ bin/sqoop help

出现一些Warning警告(警告信息已省略),并伴随着帮助命令的输出:

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

  import-mainframe    Import datasets from a mainframe server 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

 

3.5、测试Sqoop是否能够成功连接数据库

$ bin/sqoop list-databases --connect jdbc:mysql://linux01:3306/ --username root --password 123456

出现如下输出:

information_schema

metastore

mysql

performance_schema


四、Sqoop的简单使用案例

4.1、导入数据

Sqoop中,“导入”概念指:从非大数据集群(RDBMS)向大数据集群(HDFSHIVEHBASE)中传输数据,叫做:导入,即使用import关键字。

4.1.1RDBMSHDFS

1) 确定Mysql服务开启正常

2) Mysql中新建一张表并插入一些数据

$ mysql -uroot -p123456

mysql> create database company;

mysql> create table company.staff(id int(4) primary key not null auto_increment, name varchar(255), sex varchar(255));

mysql> insert into company.staff(name, sex) values('Thomas', 'Male');

mysql> insert into company.staff(name, sex) values('Catalina', 'FeMale');

 

3) 导入数据

 

 

       1)全部导入

$ bin/sqoop import \

--connect jdbc:mysql://hadoop102:3306/company \

--username root \

--password 000000 \

--table staff \

--target-dir /user/company \

--delete-target-dir \

--num-mappers 1 \

--fields-terminated-by "\t"

 

       2)查询导入

$ bin/sqoop import \

--connect jdbc:mysql://hadoop102:3306/company \

--username root \

--password 000000 \

--target-dir /user/company \

--delete-target-dir \

--num-mappers 1 \

--fields-terminated-by "\t" \

--query 'select name,sex from staff where id <=1 and $CONDITIONS;'

尖叫提示:must contain '$CONDITIONS' in WHERE clause.

尖叫提示:如果query后使用的是双引号,则$CONDITIONS前必须加转移符,防止shell识别为自己的变量。

       3)导入指定列

$ bin/sqoop import \

--connect jdbc:mysql://hadoop102:3306/company \

--username root \

--password 000000 \

--target-dir /user/company \

--delete-target-dir \

--num-mappers 1 \

--fields-terminated-by "\t" \

--columns id,sex \

--table staff

尖叫提示:columns中如果涉及到多列,用逗号分隔,分隔时不要添加空格

       4)使用sqoop关键字筛选查询导入数据

$ bin/sqoop import \

--connect jdbc:mysql://hadoop102:3306/company \

--username root \

--password 000000 \

--target-dir /user/company \

--delete-target-dir \

--num-mappers 1 \

--fields-terminated-by "\t" \

--table staff \

--where "id=1"

尖叫提示:Sqoop中可以使用sqoop import -D property.name=property.value这样的方式加入执行任务的参数,多个参数用空格隔开。

4.1.2RDBMSHive

$ bin/sqoop import \

--connect jdbc:mysql://hadoop102:3306/company \

--username root \

--password 000000 \

--table staff \

--num-mappers 1 \

--hive-import \

--fields-terminated-by "\t" \

--hive-overwrite \

--hive-table staff_hive

尖叫提示:该过程分为两步,第一步将数据导入到HDFS,第二步将导入到HDFS的数据迁移到Hive仓库

尖叫提示:第一步默认的临时目录是/user/admin/表名

4.2、导出数据

Sqoop中,“导出”概念指:从大数据集群(HDFSHIVEHBASE)向非大数据集群(RDBMS)中传输数据,叫做:导出,即使用export关键字。

4.2.1HIVE/HDFSRDBMS

$ bin/sqoop export \

--connect jdbc:mysql://hadoop102:3306/company \

--username root \

--password 000000 \

--table staff \

--num-mappers 1 \

--export-dir /user/hive/warehouse/staff_hive \

--input-fields-terminated-by "\t"

尖叫提示:Mysql中如果表不存在,不会自动创建

思考:数据是覆盖还是追加

4.3、脚本打包

使用opt格式的文件打包sqoop命令,然后执行

1) 创建一个.opt文件

$ mkdir opt

$ touch opt/job_HDFS2RDBMS.opt

 

2) 编写sqoop脚本

$ vi opt/job_HDFS2RDBMS.opt

 

export

--connect

jdbc:mysql://linux01:3306/company

--username

root

--password

123456

--table

staff

--num-mappers

1

--export-dir

/user/hive/warehouse/staff_hive

--input-fields-terminated-by

"\t"

3) 执行该脚本

$ bin/sqoop --options-file opt/job_HDFS2RDBMS.opt

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值