Sqoop实用指南

Sqoop简介

Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql…)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。此外,对于某些NoSQL数据库它也提供了连接器。Sqoop类似于其他ETL工具,使用元数据模型来判断数据类型并在数据从数据源转移到Hadoop时确保类型安全的数据处理。Sqoop专为大数据批量传输设计,能够分割数据集并创建Hadoop任务来处理每个区块。

在这里插入图片描述

Sqoop安装指南

1、下载Sqoop安装包、配置环境变量

本文使用的版本是sqoop-1.4.3.bin__hadoop-1.0.0.tar.gz,可以点击这里下载,安装在/usr/local目录下。

首先就是解压缩,重命名为sqoop,然后在文件/etc/profile中设置环境变量SQOOP_HOME。

把mysql的jdbc驱动mysql-connector-java-5.1.49.jar复制到sqoop项目的lib目录下。

2、重命名配置文件

在${SQOOP_HOME}/conf中执行命令

mv  sqoop-env-template.sh  sqoop-env.sh

在conf目录下,有两个文件sqoop-site.xml和sqoop-site-template.xml内容是完全一样的,不必在意,我们只关心sqoop-site.xml即可。

3、修改sqoop.env.sh

内容如下:

#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/usr/local/hadoop/

#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/usr/local/hadoop

#set the path to where bin/hbase is available
export HBASE_HOME=/usr/local/hbase

#Set the path to where bin/hive is available
export HIVE_HOME=/usr/local/hive

#Set the path for where zookeper config dir is
export ZOOCFGDIR=/usr/local/zk

Sqoop使用指南

4、把mysql的数据导入hdfs中

在mysql中数据库webdemo中有一张表是acct_user,表中的数据如下图所示

在这里插入图片描述
现在我们要做的是把acct_user中的数据导入到hdfs中,执行命令如下:

sqoop import 
--connect jdbc:mysql://192.168.126.10:3306/webdemo
--username root 
--password admin 
--query "SELECT * FROM acct_user WHERE \$CONDITIONS AND id='1'" -m 1 
--target-dir /sqoop/test2

5、把hdfs中的数据导入到mysql中

把上一步导入到hdfs的数据导出到mysql中。我们已知该文件有两个字段,使用制表符分隔的。那么,我们现在数据库test中创建一个数据表叫做bb,里面有两个字段。然后执行下面的命令

sqoop export 
--connect jdbc:mysql://192.168.126.10:3306/webdemo
--username root 
--password admin  
--table acct_user2
--export-dir /sqoop/test 
--input-fields-terminated-by '\t'

6、列出mysql数据库中的所有数据库

sqoop list-databases 
--connect jdbc:mysql://localhost:3306/ -username root -password admin

7、连接mysql并列出数据库中的表

sqoop list-tables 
--connect jdbc:mysql://localhost:3306/test --username root --password admin

8、将关系型数据的表结构复制到hive中

sqoop create-hive-table
--connect jdbc:mysql://192.168.126.10:3306/webdemo 
--table acct_user 
--username root 
--password admin 
--hive-table acct_user 
--fields-terminated-by "\t" 
--lines-terminated-by "\n";

参数说明:

  • fields-terminated-by “\t” 是设置每列之间的分隔符,它是hive的默认行内分隔符, 而sqoop的默认行内分隔符为","

  • lines-terminated-by “\n” 设置的是每行之间的分隔符,此处为换行符,也是默认的分隔符;

注意:只是复制表的结构,表中的数据并没有复制

9、将数据从关系数据库导入文件到hive表中

sqoop import 
--connect jdbc:mysql://192.168.126.10:3306/webdemo 
--username root 
--password admin 
--table acct_user 
--hive-import 
--hive-table acct_user -m 2 
--fields-terminated-by "\t";

参数说明:

  • m 2 表示由两个map作业执行;

  • fields-terminated-by “\t” 需同创建hive表时保持一致;

10、将hive中的表数据导入到mysql数据库表中

sqoop export 
--connect jdbc:mysql://192.168.126.10:3306/webdemo 
--username root 
--password admin 
--table acct_user2 
--export-dir /user/hive/warehouse/acct_user/part-m-00000 
--input-fields-terminated-by '\t'

注意:

  • 在进行导入之前,mysql中的表userst必须已经提起创建好了。

  • jdbc:mysql://192.168.126.10:3306/test中的IP地址改成localhost会报异常,

11、将数据从关系数据库导入文件到hive表中,–query 语句使用

sqoop import 
--append 
--connect jdbc:mysql://192.168.126.10:3306/webdemo 
--username root 
--password admin 
--query "select id,email from acct_user2 where \$CONDITIONS AND id='1'" -m 1 
--target-dir /user/hive/warehouse/acct_user 
--fields-terminated-by "\t";

12、将数据从关系数据库导入文件到hive表中,–columns --where 语句使用

sqoop import 
--append 
--connect jdbc:mysql://192.168.126.10:3306/webdemo 
--username root 
--password admin 
--table acct_user -columns "id,name" 
--where "id > 0 and (name = 'User' or name = 'Admin')" -m 1 
--target-dir /user/hive/warehouse/acct_user 
--fields-terminated-by "\t";

猜你喜欢

转载自blog.csdn.net/qq_37163925/article/details/106277832
今日推荐