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的使用
1、Sqoop使用要点
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
⑻脚本的使用(以数据导入为例)①导入数据到HDFSexport --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"