sqoop工具

Sqoop是一款用于在Hadoop与数据库间进行数据传递的开源工具,支持MySQL、Oracle等关系型数据库。它通过MapReduce实现数据的批量迁移,既可将数据导入HDFS,也可将HDFS数据导出到数据库。本文介绍了Sqoop的安装、基本命令,包括导入和导出数据到HDFS、MySQL、Hive和HBase的实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.sqoop简介

Sqoop(发音:skup)是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql…)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。

Sqoop项目开始于2009年,最早是作为Hadoop的一个第三方模块存在,后来为了让使用者能够快速部署,也为了让开发人员能够更快速的迭代开发,Sqoop独立成为一个Apache项目。

Sqoop是一个在(MySQL、Oracle)等关系型数据库和大数据平台之间进行批量数据迁移的工具。Sqoop底层能实现将关系型数据库中的数据迁移到大数据平台上是因为sqoop的底层是采用MapReduce程序实现抽取、转换、加载,MapReduce本身就并行化和高容错率,能很好的保证数据的迁移,而且与Kettle等传统ETL工具相比,Sqoop的任务跑在Hadoop集群上,能有效减少ETL服务器资源的使用情况

2.安装

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

 vi sqoop-env.sh

export HADOOP_COMMON_HOME=/home/hadoop/cluster/hadoop-2.6.4

#Set path to where hadoop-*-core.jar is available

export HADOOP_MAPRED_HOME=/home/hadoop/cluster/hadoop-2.6.4

#set the path to where bin/hbase is available

export HBASE_HOME=/home/hadoop/cluster/hbase-0.98

#Set the path to where bin/hive is available

export HIVE_HOME=/home/hadoop/cluster/hive-1.2.1

#Set the path for where zookeper config dir is

export ZOOCFGDIR=/home/hadoop/cluster/zookeeper-3.4.5/conf

加入 mysql 驱动包到 sqoop1.4.6/lib 目录下

cp mysql-connector-java-5.1.40-bin.jar apps/sqoop-1.4.6/lib/

验证安装是否成功

./sqoop-version

 3.Sqoop的基本命令

列出MySQL数据有哪些数据库

./sqoop list-databases --connect jdbc:mysql://192.168.47.128:3306/ --username root --password root

列出MySQL中的某个数据库有哪些数据表:

./sqoop list-tables --connect jdbc:mysql://192.168.47.128:3306/mysql --username root --password root

创建一张跟mysql中的help_keyword表一样的hive表hk:

./sqoop create-hive-table --connect jdbc:mysql://192.168.47.128:3306/mysql --username root --password root --table help_keyword --hive-table hk

4.Sqoop的数据导入hdfs

“导入工具”导入单个表从 RDBMS 到 HDFS。表中的每一行被视为 HDFS 的记录。

所有记录 都存储为文本文件的文本数据(或者 Avro、sequence 文件等二进制数据)

1、从RDBMS导入到HDFS中

语法格式

sqoop import (generic-args) (import-args)

常用参数

--connect <jdbc-uri> jdbc 连接地址

--connection-manager <class-name> 连接管理者

--driver <class-name> 驱动类

--hadoop-mapred-home <dir> $HADOOP_MAPRED_HOME

--help help 信息

-P 从命令行输入密码

--password <password> 密码

--username <username> 账号

--verbose 打印流程信息

--connection-param-file <filename> 可选参数

eg:

普通导入:导入mysql库中的help_keyword的数据到HDFS上

  导入的默认路径:/user/hadoop/help_keyword

    -m 1  生成一个文件

./sqoop import --connect jdbc:mysql://192.168.47.128:3306/mysql --username root  --password root  --table help_keyword  -m 1

导入: 指定分隔符和导入路径   

   -m 2 生成2个文件

./sqoop import --connect jdbc:mysql://192.168.47.128:3306/mysql --username root --password root --table help_keyword  --target-dir  /input/sqoop/  --fields-terminated-by '\t'  -m 2

导入数据:带where条件

./sqoop import --connect jdbc:mysql://192.168.47.128:3306/mysql --username root --password root --where "name='STRING' " --table help_keyword --target-dir /input/condition -m 1

查询指定列

./sqoop import --connect jdbc:mysql://192.168.47.128:3306/mysql --username root --password root   --columns "name" --where "name='STRING' " --table help_keyword  --target-dir /input/col  -m 

导入:指定自定义查询SQL

sqoop import   \

--connect jdbc:mysql://192.168.47.128:3306/  \

--username root  \

--password root   \

--target-dir /input/myimport  \

--query 'select help_keyword_id,name from mysql.help_keyword where $CONDITIONS and name = "STRING"' \

--split-by  help_keyword_id \

--fields-terminated-by '\t'  \

-m 4

./sqoop import --connect jdbc:mysql://192.168.47.128:3306/mysql  --username root  --password root   --target-dir /input/myimport  --query 'select help_keyword_id,name from mysql.help_keyword where $CONDITIONS and name = "STRING"' --split-by  help_keyword_id --fields-terminated-by '\t'  -m 1

在以上需要按照自定义SQL语句导出数据到HDFS的情况下:

1、引号问题,要么外层使用单引号,内层使用双引号,$CONDITIONS的$符号不用转义, 要么外层使用双引号,那么内层使用单引号,然后$CONDITIONS的$符号需要转义

2、自定义的SQL语句中必须带有WHERE \$CONDITIONS

5.从hdfs把数据导出到mysql中

1、创建mysql中的表

create table help_keyword_hive like help_keyword;

2、导出数据到MySql

./sqoop export --connect jdbc:mysql://192.168.47.128:3306/mysql --username root --password root --table help_keyword_hive --export-dir /input/sqoop/ --input-fields-terminated-by '\t' -m 1

6.mySQL到Hive

首先要启动hive元数据服务

将MySQL中的test表导入到hive中

./sqoop import \

--connect jdbc:mysql://192.168.47.128:3306:3306/test\

--username root \

--password root \

--table student1\

--num-mappers 1 \

--hive-import \

--fields-terminated-by "\t" \

--hive-overwrite \

--hive-table student1

注意:该过程分为两步,第一步将数据导入到HDFS,第二步将导入到HDFS的数据迁移到Hive仓库

7.MySQL到HBase

首先要启动HBASE服务。同时在HBASE中手动创建表,因为部分版本原因,可能导致sqoop不会在HBASE中自动创建表格

7.1 在HBASE中创建student1_hbase表

7.2 将mysql中的数据同步到HBASE中

bin/sqoop import \

--connect jdbc:mysql://192.168.47.128:3306/test \

--username root \

--password root \

--table student1 \

--where 'id >= 5' \

--hbase-create-table \

--hbase-table "student1_hbase" \

--hbase-row-key "id" \

--column-family "info" \

--num-mappers 1 \

--split-by id

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rose and war

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值