介绍与部署
Sqoop
Architecture
用户向
Quick Start
我们
[root@cs0 java]# tar zxvf sqoop-1.4.6.bin__hadoop-1.0.0.tar.gz //解压
[root@cs0 java]# rm sqoop-1.4.6.bin__hadoop-1.0.0.tar.gz //删除安装包
[root@cs0 java]# mv sqoop-1.4.6.bin__hadoop-1.0.0 sqoop //修改安装文件目录
[root@cs0 java]# chown -R hadoop:hadoop sqoop //赋予sqoop hadoop用户权限12341234
2、切换到
[hadoop@cs0 java]$ cd sqoop/conf
[hadoop@cs0 java]$ mv sqoop-env-template.sh sqoop-env.sh
然后使用 vi sqoop-env.sh 命令,打开文件添加如下内容。
#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/usr/java/hadoop-2.2.0-x64
#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/usr/java/hadoop-2.2.0-x64
#set the path to where bin/hbase is available
#export HBASE_HOME=
#Set the path to where bin/hive is available
export HIVE_HOME=/usr/java/hive-1.0.0
#Set the path for where zookeper config dir is
#export ZOOCFGDIR=
如果数据读取不涉及hbase和hive,那么相关hbase和hive的配置可以不加;如果集群有独立的zookeeper集群,那么配置zookeeper,反之,不用配置。12345678910111213141234567891011121314
3、将相关的驱动
[hadoop@cs0 lib]$ cp commons-cli-1.2.jar /usr/java/sqoop/lib
[hadoop@cs0 common]$ cp hadoop-common-2.2.0.jar /usr/java/sqoop/lib
[hadoop@cs0 mapreduce]$ cp hadoop-mapreduce-client-core-2.2.0.jar /usr/java/sqoop/lib
[hadoop@cs0 java]$ cp mysql-connector-java-5.1.21.jar /usr/java/sqoop/lib12341234
4、添加环境变量。
[hadoop@cs0 java]$ vi ~/.bash_profile
PATH=$PATH:$HOME/bin
export SQOOP_HOME=/usr/java/sqoop //sqoop安装目录
export PATH=$PATH:$SQOOP_HOME/bin
环境添加完毕后,执行以下命令使环境生效。
[hadoop@cs0 java]$ source ~/.bash_profile 123456123456
5、测试运行
[hadoop@cs0 java]$ sqoop list-databases \
> --connect jdbc:mysql://db.ywendeng.net:3306/djtdb_hadoop \
> --username sqoop \
> --password sqoop
15/06/03 02:47:27 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6
15/06/03 02:47:27 WARN tool.BaseSqoopTool: Setting your password on the command-line is insecure. Consider using -P instead.
15/06/03 02:47:28 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset.
information_schema
sqoop 命令执行成功,代表安装成功。
Usage
-
Sqoop 与HDFS 结合下面我们结合
HDFS ,介绍Sqoop 从关系型数据库的导入和导出。 Sqoop import 它的功能是将数据从关系型数据库导入HDFS 中,其流程图如下所示。Sqoop 数据导入流程,首先用户输入一个Sqoop import 命令,Sqoop 会从关系型数据库中获取元数据信息,比如要操作数据库表的schema 是什么样子,这个表有哪些字段,这些字段都是什么数据类型等。它获取这些信息之后,会将输入命令转化为基于Map 的MapReduce 作业。这样MapReduce 作业中有很多Map 任务,每个Map 任务从数据库中读取一片数据,这样多个Map 任务实现并发的拷贝,把整个数据快速的拷贝到HDFS 上。 下面我们看一下Sqoop 如何使用命令行来导入数据的,其命令行语法如下所示。
sqoop import \
--connect jdbc:mysql://db.ywendeng.net:3306/djtdb_hadoop \
--username sqoop \
--password sqoop \
--table user \
--target-dir /junior/sqoop/ \ //可选,不指定目录,数据默认导入到/user下
--where "sex='female'" \ //可选
--as-sequencefile \ //可选,不指定格式,数据格式默认为 Text 文本格式
--num-mappers 10 \ //可选,这个数值不宜太大
--null-string '\\N' \ //可选
--null-non-string '\\N' \ //可选
--connect:指定 JDBC URL。
--username/password:mysql 数据库的用户名。
--table:要读取的数据库表。
--target-dir:将数据导入到指定的 HDFS 目录下,文件名称如果不指定的话,会默认数据库的表名称。
--where:过滤从数据库中要导入的数据。
--as-sequencefile:指定数据导入数据格式。
--num-mappers:指定 Map 任务的并发度。
--null-string,--null-non-string:同时使用可以将数据库中的空字段转化为'\N',因为数据库中字段为 null,会占用很大的空间。1234567891011121314151617181912345678910111213141516171819
下面我们介绍几种
sqoop import \
--connect jdbc:mysql://db.ywendeng.net:3306/djtdb_hadoop \
--username sqoop \
--password sqoop \
--table user \
--incremental append \ //代表只导入增量数据
--check-column id \ //以主键id作为判断条件
--last-value 999 //导入id大于999的新增数据
上述三个组合使用,可以实现数据的增量导入。123456789123456789
2、
sqoop import \
--connect jdbc:mysql://db.ywendeng.net:3306/djtdb_hadoop \
--username sqoop \
--table user \
-P1234512345
2)–password-file:指定一个密码保存文件,读取密码。我们可以将这个文件设置为只有自己可读的文件,防止密码泄露。
sqoop import \
--connect jdbc:mysql://db.ywendeng.net:3306/csdb_hadoop \
--username sqoop \
--table user \
--password-file my-sqoop-password1234512345
Sqoop export
它的功能是将数据从
sqoop export \
--connect jdbc:mysql://db.ywendeng.net:3306/csdb_hadoop \
--username sqoop \
--password sqoop \
--table user \
--export-dir user
--connect:指定 JDBC URL。
--username/password:mysql 数据库的用户名和密码。
--table:要导入的数据库表。
--export-dir:数据在 HDFS 上的存放目录。1234567891012345678910
下面我们介绍几种
sqoop export \
--Dsqoop.export.records.per.statement=10 \
--connect jdbc:mysql://db.ywendeng.net:3306/csdb_hadoop \
--username sqoop \
--password sqoop \
--table user \
--export-dir user \
--batch
--Dsqoop.export.records.per.statement:指定每次导入10条数据,--batch:指定是批量导入。123456789123456789
2、在实际应用中还存在这样一个问题,比如导入数据的时候,
sqoop export \
--connect jdbc:mysql://db.ywendeng.net:3306/csdb_hadoop \
--username sqoop \
--password sqoop \
--table user \
--staging-table staging_user 123456123456
3、在
sqoop export \
--connect jdbc:mysql://db.ywendeng.net:3306/csdb_hadoop \
--username sqoop \
--password sqoop \
--table user \
--update-key id 123456123456
sqoop export \
--connect jdbc:mysql://db.ywendeng.net:3306/csdb_hadoop \
--username sqoop \
--password sqoop \
--table user \
--update-key id \
--update-mode allowinsert12345671234567
4、如果
sqoop export \
--connect jdbc:mysql://db.ywendeng.net:3306/csdb_hadoop \
--username sqoop \
--password sqoop \
--table user \
--column username,sex123456123456
5、当导入的字段数据不存在或者为
sqoop export \
--connect jdbc:mysql://db.ywendeng.net:3306/csdb_hadoop \
--username sqoop \
--password sqoop \
--table user \
--input-null-string '\\N' \
--input-null-non-string '\\N'12345671234567
-
Sqoop 与其它系统结合Sqoop 也可以与Hive 、HBase 等系统结合,实现数据的导入和导出,用户需要在sqoop-env.sh 中添加HBASE_HOME 、HIVE_HOME 等环境变量。1、
Sqoop 与Hive 结合比较简单,使用 –hive-import 选项就可以实现。
sqoop import \
--connect jdbc:mysql://db.ywendeng.net:3306/csdb_hadoop \
--username sqoop \
--password sqoop \
--table user \
--hive-import123456123456
2、