首页 > 技术文章 > sqoop的配置与使用

zyp0519 2021-10-08 13:38 原文

一、sqoop的安装

1.  先将sqoop的压缩包上传至/opt里面,执行解压

tar -zxvf /opt/download/hadoop/sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C /opt/soft/sqoop146

2.  进入到conf目录下,复制sqoop-env-template.sh,并进行编辑

cd /opt/soft/sqoop146/conf

cp sqoop-env-template.sh sqoop-env.sh

vim sqoop-env.sh

3.  编辑内容如下:将需要连接的数据库的目录导入

 

 

 4.  复制驱动包进来(需要链接什么数据库就导什么数据库的驱动包)

全部复制到sqoop下的lib包内
这里我先把mysql和oracle的驱动包以及java-json.jar导入;

还有hive的驱动包:
[root@hadoopsingle lib]# cp /opt/soft/hive110/lib/hive-jdbc-1.1.0-cdh5.14.2-standalone.jar ./

还有Hadoop的几个包:

 #拷贝hadoop-common
 [root@chust01 lib]# cp /opt/software/hadoop/hadoop260/share/hadoop/common/hadoop-common-2.6.0-cdh5.14.2.jar ./
  #拷贝hadoop-hdfs
  [root@chust01 lib]# cp /opt/software/hadoop/hadoop260/share/hadoop/hdfs/hadoop-hdfs-2.6.0-cdh5.14.2.jar ./
  #拷贝hadoop-mapreduce-client-core
  [root@chust01 lib]# cp /opt/software/hadoop/hadoop260/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.6.0-cdh5.14.2.jar    ./

5.  配置环境变量

#sqoop environment
export SQOOP_HOME=/opt/soft/sqoop146
export PATH=$PATH:$SQOOP_HOME/bin

配置完记得source一下,然后sqoop version命令查看下

6.  启动hadoop,测试下sqoop

start-all.sh

#测试命令,连上和登陆数据库,连接上之后会出现当前数据库的列表,否则失败。在虚拟机中中,回车默认是提交符,需要增加\转义符
sqoop list-databases \
--connect jdbc:mysql://192.168.221.140:3306 \
--username root \
--password kb10

 

二、sqoop的使用

  sqoop一般就是我们用来将mysql等数据库的数据拉到hdfs上,在传入hive,或者反向操作等。就是一个传输数据的工具,本质上还是个命令行工具。核心功能就是导入和导出:

导入数据:MySQL导入数据到 Hadoop 的 HDFS、HIVE、HBASE 等数据存储系统
导出数据:从 Hadoop 的文件系统中导出数据到关系数据库mysql 等

这里以mysql为例进行操作。

2.1、mysql 导出到 hdfs

  四种导入方式:(具体用那种看需求)

  2.1.1全量导入

  将数据库中的某表整张表导入到hdfs上(这里我以mysql中的Bank表,含id,name,money三个字段为例)

-- 全量导入
sqoop import \
--connect jdbc:mysql://192.168.192.200:3306/mydemo \
--username root \
--password okok \
--table Bank \
--target-dir '/zyp/bank' \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by ','

  2.1.2导入指定部分的列

  只要名字和money,不要id列

sqoop import \
--connect jdbc:mysql://192.168.192.200:3306/mydemo \
--username root \
--password okok \
--target-dir '/zyp/bank' \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by ',' \
--columns name,money \
--table Bank

  2.1.3导入部分行,select查询结果导入。如果用的双引号,$CONDITIONS前面要加转义符,否则会被识别为shell的变量报错。

  将查询到的钱数大于1300的数据导入,其余过滤:

-- 按照条件进行查询  将查询到的数据增量导入
sqoop import \
--connect jdbc:mysql://192.168.192.200:3306/mydemo \
--username root \
--password okok \
--target-dir '/zyp/bank' \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by ',' \
--query 'select * from Bank where money>1300 and $CONDITIONS'

  2.1.4使用sqoop关键词筛选查询导入数据,使用where子句

sqoop import \
--connect jdbc:mysql://192.168.192.200:3306/mydemo \
--username root \
--password okok \
--target-dir '/zyp/bank' \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by ',' \
--table Bank \
--where 'id=2'

 

2.2、hdfs 导出到 mysql

  这里就再将之前我们上传到hdfs 上的‘zyp/bank’的数据再导出到mysql中的bank表(这个表小写,之前那个表大写)

首先要去mysql那边创建好表(用like的建表语法,只要表结构不要表数据),然后执行以下命令:

sqoop export \
--connect jdbc:mysql://192.168.192.200:3306/mydemo \
--username root \
--password okok \
--table bank \
--export-dir '/zyp/bank' \
--num-mappers 1 \
--input-fields-terminated-by ','

  然后去mysql那边查看下你的新表。

 

2.3、mysql 导出到 hive

  先启动hive:

hive --service hiveserver2

  进入到hive创建一张表:

hive> create table hive_bank(
> id string,
> name string,
> money string)
> row format delimited fields terminated by ',';

  然后执行下面命令,直接甩到hive上:

sqoop import \
--connect jdbc:mysql://192.168.192.200:3306/mydemo \
--username root \
--password okok \
--table Bank \
--num-mappers 1 \
--hive-import \
--fields-terminated-by ',' \
--hive-overwrite \
--delete-target-dir \
--hive-table mydemo.hive_bank

  然后去hive上select一下结果:

    

 

 

2.4、hive 导出到 MySQL

  1.先去mysql上创建新表   只要表结构不要数据

  2.找到你hive上所要导出的这张表再hdfs上的位置,这里我是内部表,路径:

/hive/warehouse/mydemo.db/hive_bank

  3.执行下面命令:

sqoop export \
--connect jdbc:mysql://192.168.192.200:3306/mydemo \
--username root \
--password okok \
--table bank1 \
--export-dir '/hive/warehouse/mydemo.db/hive_bank' \
--num-mappers 1 \
--input-fields-terminated-by ','

  4.然后去MySQL里查询一下新表bank1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[root@hadoopsingle lib]# cp /opt/soft/hive110/lib/hive-jdbc-1.1.0-cdh5.14.2-standalone.jar ./

推荐阅读