Sqoop快速入门

Sqoop

Sqoop 介绍

什么是 Sqoop

Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql…)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
Sqoop项目开始于2009年,最早是作为Hadoop的一个第三方模块存在,后来为了让使用者能够快速部署,也为了让开发人员能够更快速的迭代开发,Sqoop独立成为一个Apache项目。

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

Sqoop导入

导入工具从RDBMS向HDFS导入单独的表。表中的每一行都被视为HDFS中的记录。所有记录都以文本文件的形式存储在文本文件中或作为Avro和Sequence文件中的二进制数据存储。

Sqoop导出

导出工具将一组文件从HDFS导出回RDBMS。给Sqoop输入的文件包含记录,这些记录在表中被称为行。这些被读取并解析成一组记录并用用户指定的分隔符分隔。

sqoop实战

sqoop安装(只需要做几项配置即可使用无需启动服务)

# sqoop的安装依赖java环境和hadoop所以安装sqoop前必须安装java和hadoop

# 下载sqoop
$ wget https://mirrors.shu.edu.cn/apache/sqoop/1.4.7/sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz 

# 解压sqoop
$ tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz

# 修改配置文件
$ cp sqoop-env-template.sh sqoop-env.sh

# 修改一下配置(替换为你的软件安装目录)
#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/export/servers/hadoop-2.7.7

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

#set the path to where bin/hbase is available
#export HBASE_HOME=/export/servers/hbase-2.1.2

#Set the path to where bin/hive is available
export HIVE_HOME=/export/servers/apache-hive-2.3.4-bin

# 上传mysql的驱动包到$SQOOP_HOME/lib目录下

# 验证sqoop是否安装成功

# 查看sqoop版本
$ $SQOOP_HOME/bin/sqoop-version

# 查看mysql中的库
$ $SQOOP_HOME/bin/sqoop-list-databases --connect jdbc:mysql://ip --username xxxx --password xxxx

# 查看mysql中的表
$ $SQOOP_HOME/bin/sqoop-list-tables --connect jdbc:mysql://ip/dbName?userSSL=false --username xxxx --password xxxx


sqoop的实战

mysql数据导入到好HDFS中

$ $SQOOP_HOME/bin/sqoop import \
--connect jdbc:mysql://ip/dbName \
--username root \
--password root \
--table t_site  \
--fields-terminated-by ',' \
--target-dir /sqoop-1.4.7/mysql/t_site \
--m 2

HDFS中的数据导入到mysql中

$ $SQOOP_HOME/bin/sqoop export \
--connect "jdbc:mysql://ip/dbName?useUnicode=true&characterEncoding=utf8" \
--username root \
--password root \
--table t_site_bak \
--export-dir /sqoop-1.4.7/mysql/t_site \
--fields-terminated-by ','

mysql中的数据导入到hive中

bin/sqoop import \
--connect "jdbc:mysql://ip:3306/dbName?useSSL=false&characterEncoding=utf8" \
--username root \
--password root \
--table t_site \
--m 2 \
--hive-import \
--fields-terminated-by ',' \
--hive-database db1 \
--create-hive-table \
--hive-table t_site_hive

hive中的数据导入到mysql中

bin/sqoop export \
--connect "jdbc:mysql://ip:3306/dbName?useSSL=false&characterEncoding=utf8" \
--username root \
--password root \
--table t_site_bak \
--input-null-string '\\N' \
--input-null-non-string '\\N' \
--export-dir /hive-2.3.4/db1.db/t_site_hive \
--fields-terminated-by ','

sqoop 导入导出相关参数

  • 验证相关的参数
参数描述
–valid启动数据验证功能,只对单表copy有效
–validator < class-name >指定验证类
–validation-threshold < class-name >指定使用的阈值验证类
–validation-failurehandler < class-name >指定验证失败的处理类
  • import控制参数
参数描述
–append导入的数据追加到数据文件中
–as-avrodatafile导入数据格式为avro
–as-sequencefile导入数据格式为sqeuqncefile
–as-textfile导入数据格式为textfile
–boundary-query < statement >代替min(split-by),max(split-by)值指定的边界,下面会有详细介绍
–columns < col,col,col… >指定导入字段
–delete-target-dir如果导入的target路径存在,则删除
–direct使用direct模式
–fetch-size < n >从数据库一次性读入的记录数
-inline-lob-limit < n >设定大对象数据类型的最大值
-m, –num-mappers < n >指定并行导入数据的map个数,默认为4个
-e, –query < statement >导入查询语句得到的数据
–split-by < column-name >一般与-m参数一起使用,指定分割split的字段
–table < table-name >指定database中的表名
–target-dir < dir >指定目标HDFS路径
–warehouse-dir < dir >指定表目标路径所在路径
–where < where clause >即sql语句中的where条件
-z, –compress打开压缩功能
–compression-codec < c >使用Hadoop的压缩,默认为gzip压缩
–null-string < null-string >源表中为null的记录导入为string类型时显示为null-string,默认显示为”null”
–null-non-string < null-string >源表中为null的记录导入为非string类型时显示为null-string,默认显示为”null”
  • export控制参数
参数描述
–columns < col,col,col… >指定导出字段
–direct使用direct模式
–export-dir < dir >导出HDFS文件路径
-m, –num-mappers < n >指定并行导出数据的map个数,默认为4个
–table < table-name >指定database中的表名
–call < stored-proc-name >调用的存储过程名称
–update-key < col-name >UPDATE模式下的更新字段,多个字段可以用逗号分隔
–update-mode < mode >当某记录在数据库中找不到对应记录时的操作。默认为updateonly,可以设置成allowinsert,这个模式遇到新增记录会插入导出表中
–input-null-string < null-string >string类型字段表示null值的字符
–input-null-non-string < null-string >非string类型字段表示null值的字符
–staging-table < staging-table-name >在最终导出到目标表之前临时存储这些记录的表
–clear-staging-table表示可以清除上面的staging-table表中的记录
–batch对底层数据库的插入操作使用batch模式

错Could not load org.apache.hadoop.hive.conf.HiveConf. Make sure HIVE_CONF_DIR

将hive 里面的lib下的hive-exec-**.jar 放到 sqoop 的 lib 下可以解决以下问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值