首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Sqoop学习笔记-202103

Sqoop学习笔记-202103

作者头像
用户8483969
发布2021-04-09 11:34:00
4160
发布2021-04-09 11:34:00
举报
文章被收录于专栏:bgmonkeybgmonkey

Sqoop学习笔记

1、简介

Sqoop 是一款开源的工具,主要用于在 Hadoop(Hive)与传统的数据库(mysql、postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres 等)中的数据导进到 Hadoop 的 HDFS 中,也可以将 HDFS 的数据导进到关系型数据库中。Sqoop 项目开始于 2009 年,最早是作为 Hadoop 的一个第三方模块存在,后来为了让使用者能够快速部署,也为了让开发人员能够更快速的迭代开发,Sqoop 独立成为一个 Apache项目。
Sqoop2 的最新版本是 1.99.7。请注意,2 与 1 不兼容,且特征不完整,它并不打算用于生产部署

2、安装配置

第一步:解压

第二步:修改配置文件

## 修改配置文件名称
mv sqoop-env-template.sh sqoop-env.sh

## 修改sqoop-env.sh配置
export HADOOP_COMMON_HOME=/usr/local/hadoop-2.7.2
export HADOOP_MAPRED_HOME=/usr/local/hadoop-2.7.2
export HIVE_HOME=/usr/local/hive
export ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.10
export ZOOCFGDIR=/usr/local/zookeeper-3.4.10
export HBASE_HOME=/usr/local/hbase

## 拷贝驱动
## 拷贝 jdbc 驱动到 sqoop 的 lib 目录下,如
cp mysql-connector-java-5.1.27-bin.jar /usr/local/sqoop-1.4.6/lib/

3、导入数据(RDBMS to Hadoop)

3.1、MySQL导入到HDFS

全部导入

sqoop import \
--connect jdbc:mysql://hadoop102:3306/company --username root --password 000000 \
--table staff \    ## 以上全为MySQL参数,以下全为HDFS参数
--target-dir /user/company \
--delete-target-dir \  ## 导前判断target-dir目录是否存在,存在则删除
--num-mappers 1 \
--fields-terminated-by "\t"

查询导入 --------结尾必须带有 $CONDITIONS

 bin/sqoop import \
--connect jdbc:mysql://hadoop102:3306/company --username root --password 000000 \
--target-dir /user/company \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t" \
--query 'select name,sex from staff where id <=1 and $CONDITIONS;'

## 注意:
使用--query的时候SQL语句结尾必须带有 `$CONDITIONS` ,且SQL语句使用单引号‘’括起来
如果SQL语句使用的是双引号“”,则$CONDITIONS 前必须加转移符,防止 shell 识别为自己的变量
--query "select name,sex from staff where id <=1 and \$CONDITIONS;"

导入指定列 -------- columns中如果涉及到多列,用逗号分隔,分隔时不要添加空格

 bin/sqoop import \
--connect jdbc:mysql://hadoop102:3306/company --username root --password 000000 \
--target-dir /user/company \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t" \
--columns id,sex \
--table staff

使用sqoop 关键字筛选查询导入数据

 bin/sqoop import \
--connect jdbc:mysql://hadoop102:3306/company --username root --password 000000 \
--target-dir /user/company \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t" \
--table staff \
--where "id=1"

3.2、MySQL导入到Hive

==注意:==该过程分为两步: 第一步将数据导入到 HDFS 第二步将导入到 HDFS 的数据迁移到Hive仓库,第一步默认的临时目录是/user/用户名/表名,下方真实场景中已经配置

$ bin/sqoop import \
--connect jdbc:mysql://hadoop102:3306/company --username root --password 000000 \
--table staff \
--num-mappers 1 \
--hive-import \
--fields-terminated-by "\t" \	## 设定每个字段是以什么符号作为结束,默认为逗号
--hive-overwrite \
--hive-table staff_hive

真实场景 提示: 如果在导入后发现数据错位了,或者有好多原来有值的字段都变成了NULL, 这是因为你原表varchar类型的字段中可能含有\n\r等一些特殊字符。则加上hive-drop-import-delims

sqoop import --connect 'jdbc:mysql://localhost:3306/test?characterEncoding=utf8' \
--username root \
--password root \
--table table \		## 以上为MySQL参数,以下为Hive参数
--target-dir /user/root/table_20201218 \
--delete-target-dir \
--hive-overwrite \
--hive-import \
--hive-table ndwt.table_20201218 \
--m 1 \
--hive-drop-import-delims

## 导完之后修复刷新数据
#dynamic parition repair
hive -e "msck repair table ndwt.table_20201218;"
#impala metadata refresh
impala-shell -q "invalidate metadata ndwt.table_20201218;"

3.3、MySQL导入到Hbase

sqoop1.4.6 只支持 HBase1.0.1 之前的版本的自动创建 HBase 表的功能

bin/sqoop import \
--connect jdbc:mysql://hadoop102:3306/company --username root --password 000000 \
--table company \
--columns "id,name,sex" \
--column-family "info" \
--hbase-create-table \
--hbase-row-key "id" \
--hbase-table "hbase_company" \
--num-mappers 1

3.4、增量导入到 hive 中

增量导入数据到 hive 中,mode=append --check-column: 用来指定一些列,这些列在增量导入时用来检查这些数据是否作为增量数据进行导入,和关系型数据库中的自增字段类似. 注意:这些被指定的列的类型不能使任意字符类型,如char、varchar等类型都是不可以的,同时–check-column可以去指定多个列 --incremental:用来指定增量导入的模式,两种模式分别为Append和Lastmodified --last-value: 指定上一次导入中检查列指定字段最大值 ==提示:==append 不能与–hive-等参数同时使用

bin/sqoop import \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password root \
--table staff \
--num-mappers 1 \
--fields-terminated-by "\t" \
--target-dir /user/hive/warehouse/staff_hive \
--check-column id \		## 指定增量字段可以指定多个
--incremental append \
--last-value 3

增量导入数据到 hdfs 中,mode=lastmodified ==提示:==使用 lastmodified 方式导入数据要指定增量数据是要–append(追加)还是要 --merge-key(合并) ==提示:==last-value 指定的值是会包含于增量导入的数据中

$ bin/sqoop import \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 000000 \
--table staff_timestamp \
--check-column last_modified \
--incremental lastmodified \
--last-value "2017-09-28 22:20:38" \
--m 1 \
--append

4、导出数据( Hadoop to RDBMS)

如果Mysql 中表不存在,不会自动创建

4.1、HIVE、HDFS 到 MySQL

bin/sqoop export \
--connect jdbc:mysql://hadoop102:3306/company --username root --password 000000 \
--table staff \
--num-mappers 1 \
--export-dir /user/hive/warehouse/staff_hive \
--input-fields-terminated-by "\t"

真实场景:此处为shell脚本 先清空表,再导入

## eval 查看 SQL 执行结果

sqoop eval --connect jdbc:mysql://localhost:3306/test --username root --password root \
--query "truncate table tablename;"  \
;

sqoop export --connect jdbc:mysql://localhost:3306/test --username root --password root \
--table tablename \  ## 以上为MySQL参数,以下为Hive参数
--export-dir /user/hive/warehouse/dw/dwa/table/*   \
--columns column1,column2,column3,column4 \
--fields-terminated-by '\001'  \
--input-null-string "\\\\N" \
--input-null-non-string "\\\\N" \
--batch \	## 批量导入
--m 4;  ## 批量的map数,默认为4

4.2、sqoop无法导出parquet文件到mysql

https://www.cnblogs.com/xiaoliu66007/p/9633505.html

5、常用参数及详解

## 生成的java文件存放路径
–outdir <dir>

## 增量导
append和delete-target-dir是相互冲突的。

##在控制台打印出详细信息
--verbose 

## 设定每个字段是以什么符号作为结束,默认为逗号
--fields-terminated-by

## 设定每行记录之间的分隔符,默认是\n
--lines-terminated-by
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-04-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Sqoop学习笔记
    • 1、简介
      • 2、安装配置
        • 3、导入数据(RDBMS to Hadoop)
          • 3.1、MySQL导入到HDFS
          • 3.2、MySQL导入到Hive
          • 3.3、MySQL导入到Hbase
          • 3.4、增量导入到 hive 中
        • 4、导出数据( Hadoop to RDBMS)
          • 4.1、HIVE、HDFS 到 MySQL
          • 4.2、sqoop无法导出parquet文件到mysql
        • 5、常用参数及详解
        相关产品与服务
        云数据库 SQL Server
        腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档