sqoop的import与export及其脚本使用

Sqoop官方网址:http://sqoop.apache.org/

一、Sqoop的诞生

1、存在的问题

⑴RDBMS:数据大量存储在RDBMS(Oracle、MySQL、DB2等)上,如果需要对数据进行分析,需要将这些数据迁移到HDFS上去。

2、Sqoop的产生和作用

⑴Sqoop:Sql-to-Hadoop

⑵将关系数据库中的某张表数据抽取到Hadoop的HDFS文件系统当中,底层运行还是MapReduce。

将HDFS上的文件数据或者是Hive表中的数据导出到关系型数据库中的某张表中。

⑷Sqoop利用MapReduce批处理方式进行数据传输加快数据传输速度。

二、sqoop的版本

1、Sqoop1 & Sqoop2两个不同版本,完全不兼容;

2、Sqoop2比Sqoop1的改进

⑴引入Sqoop server,集中化管理Connector等;

⑵多种访问方式:CLI,Web UI,REST API  ;

⑶引入基于角色的安全机制;

三、sqoop的架构

sqoop的import与export及其脚本使用_第1张图片

四、sqoop的使用

1、Sqoop使用要点

sqoop的import与export及其脚本使用_第2张图片

sqoop的import与export及其脚本使用_第3张图片


2、测试Sqoop

⑴链接MySQL数据库,并list数据库中的databases,测试Sqoop是否配置正确。

$bin/sqoop list-databases \
--connect jdbc:mysql://hostname:3306 \
--username root \
--password root

3、import

⑴默认情况下导入数据到HDFS

$/bin/sqoop import \
--connect jdbc:mysql://hostname:3306/mydb \
--username root \
--password root \
--table mytable


⑵指定目录和Mapper个数导入HDFS

①创建目录

${HADOOP_HOME}/bin/hdfs dfs -mkdir -p /user/sqoop/


②设置map个数为1,指定目录为/user/sqoop/,如果目标目录已经存在则先删除
$ bin/sqoop import \
--connect jdbc:mysql://blue01.mydomain:3306/mydb \
--username root \
--password root \
--table my_user \
--target-dir /user/hive/warehouse/my_user \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t" \
--columns  id,passwd \
--where "id<=3"


⑶增量导入HDFS
①增量导入数据到HDFS文件中,可以通过下面三个参数进行设置:
--check-column
--incremental
--last-value
$bin/sqoop import \
--connect jdbc:mysql://hostname:3306/mydb \
--username root \
--password root \
--table mytable \
--num-mappers 1 \
--target-dir /user/sqoop/ \
--fields-terminated-by "\t" \
--check-column id \
--incremental append \
--last-value 4      //表示从第5位开始导入


⑷指定文件格式导入HDFS
①默认情况下,导入数据到HDFS,文件存储格式为textfile,可以通过属性进行指定,比如文件存储格式为parquet
$bin/sqoop import \
--connect jdbc:mysql://hostname:3306/mydb \
--username root \
--password root \
--table mytable \
--num-mappers 1 \
--target-dir /user/sqoop/ \
--fields-terminated-by "\t" \
--as-parquetfile


⑸指定压缩格式导入HDFS
①默认情况下,导入的HDFS文件是不压缩的,可以通过属性--compress 和 --compression-codec设置;
$bin/sqoop import \
--connect jdbc:mysql://hostname:3306/mydb \
--username root \
--password root \
--table mytable \
--num-mappers 1 \
--target-dir /user/sqoop/ \
--fields-terminated-by "\t" \
--compress \
--compression-codec org.apache.hadoop.io.compress.SnappyCodec


⑹把select查询结果导入HDFS
①把select查询结果导入HDFS,必须包含'$CONDITIONS'在where子句中;
$ bin/sqoop import \
--connect jdbc:mysql://hostname:3306/mydb \
--username root \
--password root \
--target-dir /user/hive/warehouse/mydb.db/mytable \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t" \
--query 'select id,account from my_user where id>=3 and $CONDITIONS'


⑺导入数据到Hive中
$ bin/sqoop import \
--connect jdbc:mysql://hostname:3306/mydb \
--username root \
--password root \
--table mytable \
--num-mappers 1 \
--hive-import \
--hive-database mydb \
--hive-table mytable \
--fields-terminated-by "\t" \
--delete-target-dir \
--hive-overwrite 


⑻脚本的使用(以数据导入为例)
①导入数据到HDFS
export
--connect
jdbc:mysql://hostname:3306/mydb
--username
root
--password
root
--table
mytable
--num-mappers
1
--export-dir
/user/hive/warehouse/mydb.db/mytable
--input-fields-terminated-by
"\t"


②执行脚本
$ bin/sqoop  --options-file xxx.opt


4、export
⑴从Hive或者HDFS导出数据到MySQL
$ bin/sqoop export \
--connect jdbc:mysql://hostname:3306/mydb \
--username root \
--password root \
--table mytable \
--num-mappers 1 \
--export-dir /user/hive/warehouse/mydb.db/mytable \
--input-fields-terminated-by "\t"



你可能感兴趣的:(Sqoop)