前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Sqoop学习笔记-202103

Sqoop学习笔记-202103

作者头像
用户8483969
发布于 2021-04-09 03:34:00
发布于 2021-04-09 03:34:00
49800
代码可运行
举报
文章被收录于专栏:bgmonkeybgmonkey
运行总次数:0
代码可运行

Sqoop学习笔记

1、简介

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

2、安装配置

第一步:解压

第二步:修改配置文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## 修改配置文件名称
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

全部导入

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 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中如果涉及到多列,用逗号分隔,分隔时不要添加空格

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 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 关键字筛选查询导入数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 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/用户名/表名,下方真实场景中已经配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ 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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 表的功能

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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-等参数同时使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 指定的值是会包含于增量导入的数据中

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ 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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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脚本 先清空表,再导入

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## 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、常用参数及详解

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## 生成的java文件存放路径
–outdir <dir>

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

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

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

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
c++ 时间类型详解(time_t和tm)
原文:http://blog.csdn.net/love_gaohz/article/details/6637625
用户7886150
2021/02/17
3.3K0
三句话理解时区与时间戳
时间不分东西南北、在地球的每一个角落都是相同的。他们都有一个相同的名字,叫时间戳。时间戳 指的就是Unix时间戳(Unix timestamp)。它也被称为Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。
chengcheng222e
2021/11/04
4.1K0
使用时间戳生成唯一主键
时间戳(timestamp),一个能表示一份数据在某个特定时间之前已经存在的、 完整的、 可验证的数据,通常是一个字符序列,唯一地标识某一刻的时间。使用数字签名技术产生的数据, 签名的对象包括了原始文件信息、 签名参数、 签名时间等信息。广泛的运用在知识产权保护、 合同签字、 金融帐务、 电子报价投标、 股票交易等方面。
李郑
2019/12/04
4.5K0
C#时间戳基本使用案例分享
由于TimeZone类已经过时,官方推荐使用TimeZoneInfo来做时间的转换。
用户7718188
2022/11/06
4.5K0
扩展学习之时间戳趣谈
Unix时间戳(英文为Unix epoch, Unix time, POSIX time 或 Unix timestamp),是从1970年1月1日(UTC/GMT的午夜)开始到现在所经过的秒数(格林威治时间1970年01月01日00时00分00秒、北京时间1970年01月01日08时00分00秒),不考虑闰秒。
chimchim
2023/10/17
8730
扩展学习之时间戳趣谈
GMT UTC CST ISO 夏令时 时间戳,都是些什么鬼?
日期/时间的处理是平时开发中非常常见的场景,若只是简单的格式化场景那就还好,一旦涉及到时区、跨地域跨时区时间转换场景,甚至当还有GMT时间、UTC时间等一堆概念堆上来的时候,总是心理发虚,招架不住。
YourBatman
2021/01/19
3.5K0
GMT UTC CST ISO 夏令时 时间戳,都是些什么鬼?
Linux时间戳转换_时间戳转换软件
在大多数 UNIX 系统中,当前时间存储为自特定时刻以来经过的时间以简化,将时间保持为长整数。所有 UNIX 系统普遍接受的时刻是 1970 年 1 月 1 日凌晨 12:00:00。 这称为 UNIX 时间戳,并被所有现代 UNIX/Linux 系统识别。
全栈程序员站长
2022/11/09
16.5K0
Linux时间戳转换_时间戳转换软件
GMT UTC CST ISO 夏令时 时间戳,都是些什么鬼?
日期/时间的处理是平时开发中非常常见的场景,若只是简单的格式化场景那就还好,一旦涉及到时区、跨地域跨时区时间转换场景,甚至当还有GMT时间、UTC时间等一堆概念堆上来的时候,总是心理发虚,招架不住。
YourBatman
2022/03/08
3.6K0
GMT UTC CST ISO 夏令时 时间戳,都是些什么鬼?
Date 对象(上)
Date对象是 JavaScript 原生的时间库。它以1970年1月1日00:00:00作为时间的零点,可以表示的时间范围是前后各1亿天(单位为毫秒)。
RiemannHypothesis
2022/10/28
6010
PHP 实现时间戳转化为几分钟前、几小时前等格式
一.PHP最近遇到了后台接口需要给前端传递时间新格式,由于是报警和显示作用,所以就以社交软件上长显示的格式为准,整理了下时间格式。二.封装的时间转换函数,大体都是按照业务来的,小伙伴们可以在优化function get_last_time($time) 三.如果需要几周前、几月前啥的可以自己调一下比较的时间即可。这段代码放到线上后, 出现了奇怪的BUG, 明明是当天注册的用户, 却出现了有次日登录的情况. 排查代码没有发现问题, 于是暂时搁置去忙其它事情. 然后在第6天时, 竟然又出现了有七日登陆的数据.
php007
2019/08/05
1.9K0
iPhone碰上1970年变砖是什么梗?又该如何拯救?
继上个月的十二行代码分分钟让浏览器崩溃iPhone重启事件之后,近日又有网友爆出:如果把64位的iOS设备(iPhone、iPad、iPod touch)系统时间修改为1970年1月1日,设备重启后将
FB客服
2018/02/07
1.6K0
iPhone碰上1970年变砖是什么梗?又该如何拯救?
PHP时间戳
我们可以通过 date() 函数提供的丰富格式化来显示需要的时间日期,如下面的例子:
我不是费圆
2020/09/21
6K0
区块链Block创建时间
该文介绍了如何获取区块链中的区块创建时间,包括使用Unix时间戳和Java语言进行转换和获取。同时介绍了在ETH和BTC网络中的区块创建时间存储单位和获取方法。
程序新视界
2017/12/29
2.9K0
Python | 时间戳转换
爬数据的时候,有没有遇见过爬下来的数据日期显示为一大串数字?像上图中的beginbidtime变量,这是时间戳。时间戳是啥?是指格林威治时间自 1970 年 1 月 1 日(00:00:00 GMT)(一般把这个时点称为 unix 纪元或 POSIX 时间)至当前时间的总秒数。时间戳的好处是能够唯一地表示某一刻的时间,但这显然不利于肉眼观察和分析数据,所以下面我们将时间戳转化为常见的时间格式。
PyStaData
2020/09/14
3.8K0
Python | 时间戳转换
对时间戳的理解
时间不分东西南北、在地球的每一个角落都是相同的。他们都有一个相同的名字,叫时间戳。在计算机中,「时间戳」一般是指 Unix 时间戳,即自从 Unix 纪元(格林威治时间 1970 年 1 月 1 日 00:00:00)到当前时间的秒数。
张紫娃
2023/07/23
4620
对时间戳的理解
常用模块~PHP时间戳与日期.
自从 Unix 纪元(格林威治时间 1970 年 1 月 1 日 00:00:00)到当前时间的秒数 .
汤清丽
2019/11/03
3.7K0
常用模块~PHP时间戳与日期.
时间戳,mysql 秒数,毫秒数与时间之间的相互转换
时间戳是指格林威治时间自1970年1月1日(00:00:00 GMT)至当前时间的总秒数。通俗的讲,时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。 常见有10位(单位:秒)和13位(单位:毫秒)。
oktokeep
2024/10/09
3330
【100个 Unity实用技能】☀️ | Unity中C#获取当前时间戳,时间戳和时间格式相互转换、时间戳转换为多久之前
1970年01月01日00时00分00秒的来历:UNIX系统认为1970年1月1日0点是时间纪元,所以我们常说的UNIX时间戳是以1970年1月1日0点为计时起点时间的。
呆呆敲代码的小Y
2023/07/24
4.5K0
【100个 Unity实用技能】☀️ | Unity中C#获取当前时间戳,时间戳和时间格式相互转换、时间戳转换为多久之前
python3 time模块解释
time() 模块继承自 Object 类,datetime() 模块继承自 Object 下面的 Date() 模块。
py3study
2020/01/10
4600
由浅入深,走进中级工程师都未必知道的 JavaScript 时间处理冷知识
在过去,世界各地都各自订定当地时间,例如我国古代将一昼夜分为十二时辰,每一时辰相当于现代的两个小时。但随着交通和通信的发达,各地交流日益频繁,不同的地方时间给人们造成了许多困扰。于是在1884年的国际经度会议上制定了全球性的标准时,确定以英国伦敦格林威治区这个地方为零度经线的起点(本初子午线),并以地球由西向东每24小时自转一周360°,规定经度每隔15°,时差1小时,而每15°的经线则称为该时区的中央经线。全球被划分为24个时区,其中包含23个整时区及180°经线左右两侧的2个半时区。东经的时间比西经要早,也就是如果格林威治时间是中午12时,则中央经线15°E的时区为下午1时,中央经线30°E时区的时间为下午2时;反之,中央经线15°W的时区时间为上午11时,中央经线30°W时区的时间为上午10时。如果两人同时从格林威治的0°各往东、西方前进,当他们在经线180°时,就会相差24小时,所以经线180°被定为国际换日线,由西向东通过此线时日期要减去一日,反之,若由东向西则增加一日。
wade
2021/07/08
2.2K0
由浅入深,走进中级工程师都未必知道的 JavaScript 时间处理冷知识
相关推荐
c++ 时间类型详解(time_t和tm)
更多 >
LV.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、常用参数及详解
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档