sqoop数据导入与数据导出

sqoop

Sqoop is a tool designed to transfer data between Hadoop andrelational databases. You can use Sqoop to import data from a relationaldatabase management system (RDBMS) such as MySQL or Oracle into the HadoopDistributed File System (HDFS), transform the data in Hadoop MapReduce, andthen export the data back into an RDBMS.

官方文档中说到,sqoop是一种用来将关心型数据库(比如MySQL)中的数据导入到HDFS中,或者将HDFS中数据导出到MySQL中的工具。

以HDFS/hive为参照,确定导入导出方向

         1)improt    mysql --> Hive/HDFS  //导入

         2)export    Hive/HDFS --> mysql   //导出

sqoop的配置:我们下载好sqoop并解压之后,需要更改如下两点:

1、  修改配置文件

这里修改主要是配置sqoop找到hadoop:

比如:

#Set pathto where bin/hadoop is available

exportHADOOP_COMMON_HOME=/opt/modules/cdh/hadoop-2.5.0-cdh5.3.6

 

#Set pathto where hadoop-*-core.jar is available

exportHADOOP_MAPRED_HOME=/opt/modules/cdh/hadoop-2.5.0-cdh5.3.6

 

#set thepath to where bin/hbase is available

#exportHBASE_HOME=

 

#Set thepath to where bin/hive is available

exportHIVE_HOME=/opt/modules/cdh/hive-0.13.1-cdh5.3.6

 

#Set thepath for where zookeper config dir is

export ZOOCFGDIR=/opt/modules/cdh/zookeeper-3.4.5-cdh5.3.6/conf

2、  加入MySQL的jdbc驱动包到sqoop目录下的lib目录中

$ cp mysql-connector-java-5.1.34-bin.jar   /opt/modules/cdh/sqoop-1.4.5-cdh5.3.6/lib/

3、  做好以上两点之后,我们就可以测试能否连接MySQL了。

通过官网查询,我们可以看到sqoop主要有如下命令:


其中,我们多用到导入 import,导出export,这里我们使用其中的—list命令测试能否使用sqoop连接mysql。

         在这里,需要输入mysql的用户与密码。我这里设置root用户的密码为root123。

bin/sqooplist-databases \

--connectjdbc:mysql://[hostname]:3306 \

--usernameroot \

--password root123

如果测试成功的话,就代表我们已经配置成功。

5、我们以官方文档为例,

Argument

Description

--connect <jdbc-uri>

Specify JDBC connect string

--connection-manager <class-name>

Specify connection manager class to use

--driver <class-name>

Manually specify JDBC driver class to use

--hadoop-mapred-home <dir>

Override $HADOOP_MAPRED_HOME

--help

Print usage instructions

--password-file

Set path for a file containing the authentication password

-P

Read password from console

--password <password>

Set authentication password

--username <username>

Set authentication username

--verbose

Print more information while working

--connection-param-file <filename>

Optional properties file that provides connection parameters

--relaxed-isolation

Set connection transaction isolation to read uncommitted for the mappers.

 

以如下例子进行导入:

1、将MySQL数据库中数据导入到HDFS

bin/sqoop import \

--connect jdbc:mysql://[hostname]:3306/test \

--username root \                                //使用root用户

-P \                         //不使用明文指定数据库连接密码

--table user \                                     //使用user表格

--target-dir /sqoop \                      //指定数据导入到HDFS上的目录 

--delete-target-dir \                   //如果目标目录已存在,则先删除

-m 1 \                                            //指定使用导入数据的map个数,mapreduce(V1)中的方式

--fields-terminated-by ","             //目标文件的分隔符

 

这是将数据库中的test数据库下面的user表格导入到HDFS中的sqoop目录下面,测试成功后我们可以在HDFS中进行查看。

当然我们也可是使用明文密码进行连接。

比如:

bin/sqoop import \

--connect jdbc:mysql://[hostname]:3306/test \

--username root \

--password root \

--table user \

--target-dir /sqoop/input \

--num-mappers 1 \

--fields-terminated-by ","  \

--delete-target-dir

2、将MySQL数据库数据导入到hive

bin/sqoop import \

--connect jdbc:mysql://[hostname]:3306/test \

--username root \

--password root \

--table user \

-m 1 \

--delete-target-dir \

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

--hive-import \                                                         //导入hive

--hive-overwrite \

--hive-database mydb \                                         //导入hive中的mydb数据库

--hive-table user0                                                  //导入hive中的mydb数据库中的user表

 

总结:

         1.hive中的database要先创建

         2.hive中的表会自动创建

         3.数据是由MySQL先导入到当前用户在HDFS的用户主目录下,然后再加载到hive表中

3、从HDFS、Hive表导出到Mysql

         由于hive表的数据库和表其实就是HDFS上的目录,表数据是HDFS上的文件,所以从Hive表导出数据就是从HDFS对应的目录导出数据

比如:

create table hive2mysql (

pl     varchar(20),

date varchar(20),

hour varchar(20),

value varchar(20)

);

 

bin/sqoop export \

--connect jdbc:mysql://hadoop0505:3306/mydb\           //连接数据库

--username root \

--password root \

--table hive2mysql \                                                                       //数据库中表名

--num-mappers 1 \                                                                             //设置MapReduce中map个数

--export-dir /user/hive/warehouse/test \                          //HDFS中存放hive数据的位置

--fields-terminated-by "\001"

 

总结:

         1.从Hive表和HDFS导出数据其实是一回事,都是要到处HDFS上的目录

         2.--fields-terminated-by对于Hive表就是创建时候的字段分隔符,对于HDFS上的文件而言就是该文件的分隔符

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值