Sqoop安装及使用

Sqoop

1)Sqoop介绍

Sqoop即 SQL to Hadoop ,是一款方便的在传统型数据库与Hadoop之间进行数据迁移的工具,充分利用MapReduce并行特点以批处理的方式加快数据传输,发展至今主要演化了二大版本,Sqoop1和Sqoop2,我们以Sqoop1为案例进行讲解,Sqoop2商用不太稳定。Sqoop工具是Hadoop下连接关系型数据库和Hadoop的桥梁,支持关系型数据库和hive、hdfs,hbase之间数据的相互导入,可以使用全表导入和增量导入。

2)sqoop安装---安装很简单-->主要是给个jdbc的jar包。然后将bin目录下的hive_home和zookeeper_home注释掉,当然也得配置环境变量

①解压tar包

②配置环境变量

export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HIVE_HOME/lib/*:$HIVE_HOME/conf

export SQOOP_HOME=/opt/sqoop

③把MySQL的JDBC驱动包复制到Sqoop的lib目录下

④给jdk环境下的/opt/jdk/jre/lib/security/java.policy 文件中加入

permission javax.management.MBeanTrustPermission "register";

⑤使用sqoop list-databases --connect jdbc:mysql://127.0.0.1:3306/ --username root --password root 测试是否安装成功

3)sqoop导入导出(hdfs)

A、导入

a、普通导入

sqoop import --connect jdbc:mysql://192.168.1.101:3306/库名 --username 数据库用户名 --password 密码 --table 表名 --columns '列1, 列2...'

b、指定输出路径、指定数据分隔符

sqoop import --connect jdbc:mysql://192.168.1.101:3306/库名 --username 数据库用户名 --password 密码 --table 表名 --target-dir '目标路径' --fields-terminated-by '\001'

c、指定Map数量 -m

sqoop import --connect jdbc:mysql://192.168.1.101:3306/库名 --username 数据库用户名 --password 密码 --table 表名 --target-dir '目标路径' --fields-terminated-by '\t' -m 2

d、增加where条件

sqoop import --connect jdbc:mysql://192.168.1.101:3306/库名 --username 数据库用户名 --password 密码 --table 表名 --where '条件' --target-dir '目标路径'

e、使用query语句

sqoop import --connect jdbc:mysql://192.168.1.101:3306/库名 --username 数据库用户名 --password 密码 --table 表名 --query 'SELECT语句' --split-by user.age --target-dir '目标路径'

使用query语句必须指定split-by和--target-dir

f、使用 \将语句换行

sqoop import \
--connect jdbc:mysql://192.168.1.101:3306/库名 \
--username 数据库用户名 \
--password 密码 \
--query 'SELECT语句' \
--split-by user.age \
--target-dir '目标路径'

g、增量导入

◇根据id

sqoop import --connect jdbc:mysql://192.168.1.101:3306/库名 --username 数据库用户名 --password 密码 --table 表名  --target-dir '目标路径'  --incremental append --check-column id --last-value 10 -m 1

--incremental append选项使用append模式,
--check-column id 使用id字段来做增量
--last-value为10,从MySQL表中主键id>10开始同步。

◇根据时间戳

--incremental lastmodified --check-column last_update --last-value '2017-03-20 11:00:00'

B、导出

先建好相对应的表,才能导出

sqoop export --connect jdbc:mysql://192.168.1.101:3306/库名 --username 数据库用户名 --password 密码 --export-dir '要导出的数据所在的路径' --table 表名 -m 1 --fields-terminated-by '\t'

4)sqoop导入导出(hive)

A、导入

a、普通导入

sqoop import --connect jdbc:mysql://192.168.1.101:3306/库名 --username 数据库用户名 --password 密码 --table 表名  --hive-import

内部执行实际分三部,1.将数据导入hdfs(可在hdfs上找到相应目录),2.创建hive表名相同的表,3,将hdfs上数据导入hive表中

b、创建hive表

sqoop create-hive-table  --connect jdbc:mysql://192.168.1.101:3306/库名 --username 数据库用户名 --password 密码 --table 表名  --hive-table hive表名  --fields-terminated-by "\t"

c、指定hive表名、指定数据分隔符

sqoop import --connect jdbc:mysql://192.168.1.101:3306/库名 --username 数据库用户名 --password 密码 --table 表名  --hive-import --hive-table hive表名 --fields-terminated-by '\t'

d、通过create-hive-table创建表

sqoop import --connect jdbc:mysql://192.168.1.101:3306/库名 --username 数据库用户名 --password 密码 --table 表名  --hive-import --create-hive-table --hive-table hive表名 --fields-terminated-by '\t'

可以通过 --create-hive-table 创建表,如果表已经存在则会执行失败

如果提示目录已存在,可以在导入脚本后面追加:--delete-target-dir

f、覆盖hive表的内容

sqoop import --connect jdbc:mysql://192.168.1.101:3306/库名 --username 数据库用户名 --password 密码 --table 表名  --hive-import --hive-overwrite --hive-table hive表名 --fields-terminated-by '\t'

g、增加where条件

sqoop import --connect jdbc:mysql://192.168.1.101:3306/库名 --username 数据库用户名 --password 密码 --table 表名 --where '条件' --hive-import --hive-table hive表名 --fields-terminated-by '\t'

h、指定编码格式

sqoop import --connect jdbc:mysql://192.168.1.101:3306/库名 --username 数据库用户名 --password 密码 --table 表名 --where '条件' --hive-import --hive-table hive表名 --fields-terminated-by '\t' --default-character-set=utf-8

i、使用query语句

sqoop import --connect jdbc:mysql://localhost:3306/库名 --username 数据库用户名 --password 密码 --query 'select语句' --hive-import --hive-table hive表名 --fields-terminated-by '\t' --target-dir '目标路径' --split-by user.age

使用query语句必须指定split-by和--target-dir

j、增量导入

◇根据id

sqoop import --connect jdbc:mysql://192.168.1.101:3306/库名 --username 数据库用户名 --password 密码 --table 表名 --hive-import --hive-table hive表名 --incremental append --check-column id --last-value 11 --fields-terminated-by '\t'

◇根据时间戳

通过时间戳来增量导入的脚本:

--incremental lastmodified --check-column last_update --last-value '2017-03-20 11:00:00'

完整脚本:

sqoop import --connect jdbc:mysql://192.168.1.101:3306/库名 --username 数据库用户名 --password 密码 --table 表名 --hive-import --hive-table hive表名 --incremental lastmodified --check-column last_update --last-value '2017-03-20 11:00:00' --fields-terminated-by '\t'

B、导出

sqoop export --connect jdbc:mysql://localhost:3306/库名 --username 数据库用户名 --password 密码 --export-dir '要导出的数据的路径' --table 表名 -m 1 --fields-terminated-by '\t'

你可能感兴趣的:(sqoop)