导入 Import--全量数据导入 Hdfs--并行度设置&注意事项 | 学习笔记

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 快速学习 导入 Import--全量数据导入 Hdfs--并行度设置&注意事项

开发者学堂课程【Sqoop 企业级大数据迁移方案实战导入 Import--全量数据导入 Hdfs--并行度设置&注意事项】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/718/detail/12835


导入 Import--全量数据导入 Hdfs--并行度设置&注意事项


内容介绍:

一、并行度设置

二、注意事项


一、并行度设置

在全量导入 mysql 的时候怎么指定并行度,比如有一个表非常大,如果只启动一个 map 读写能力是不足的,如果想提高并行度,是通过参数-m 来表示,m 表示的是 maptask,默认是1个。但是参数并是可以指定为唯一唯二唯三这么简单,当中可能会出现一些问题。

打开脚本资料,刚才的操作是以1为例的,接下来以两个并行度进行导入,路径 genggaiwe214,其他保持不变。

按照正常的思路,把命令复制过来,在服务区上进行执行。

image.png

看起来很正常,但是发现执行过程中报错了,出现代码 error during import,在导入期间发生了错误,错误原因是在表里面没有找到他的主键,请明确一下根据哪个字段进行切割,或者通过一个-m 来进行。

image.png

以当前 Navicat 表中五条数据为例,如果启动两个-m,数据涉及到一个分配问题,一个 map 里面数据放两个,另外一个里面放三个,是二三分还是四二分,通过查看底层,如果表有主键的话,它会根据主键来进行相关的分配,但是如果没有主见,就需要指明根据哪个字段来进行分配?比如说根据 ID 来分配,当指定字段以后,他会首先去查这字段的最大值和最小值,看一下中间的区间,根据指定的并行度,做一个平均的划分,这是她底层的含义,所以说要么不加-m2,默认就是-m1,如果没有主键,需要指定字段,所以现在先复制一下参数,回到 notepad。首先做一个指令,根据 ID 来进行切割,通常来说都是使用数值类型的主键,如果以人名来切割没有任何意义,\表示没有立即结束。输入以下内容

bin/sqoop import \

- - connect jdbc: mysql://node-1 ; 3306/u3erdb \

- - username root\

- -password hadoop \

--target-dir / sqoopresult214 \

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

--split-by id \

--table emp --m 2

执行过程中没有报错

image.png

在执行过程当中,可以看一下相关日志信息,他的读数据组件,不再是默认的 taskInputFormat,而是DBInputFormat,它是专门用于读取数据库的。后面出现了 BoundingValsQuery,边界范围查询,选择 ID 查找的最小值以及最大值,查询的最小值是1201,查询的最大值是1205,然后把它分成两个切片,因为启动了两个number of splits,所以最终的输出结果也是两个。
打开浏览器来验证一下,刷新,打开214

image.png

它有了两个文件,一个是 part-m-0000,一个是 part-m-0001,相当于把表中的数据分成两份,这两份是并行执行的,加大了导入时间,下载验证一下

image.png

里面只有两条记录,不出意外的话 part-m-0001中会有三条记录,这样就加大了并行度,

image.png

接下来把全量导入 MySQL 的数据需要的注意事项来做一个简单的小结。

 

二、注意事项

mysql 的地址尽量不要使用 localhost 请使用 ip 或者 host

如果不指定导入到 hdfs 默认分隔符是","

可以通过--fields-terminated-by "\t 指定具体的分隔符

如果表的数据比较大可以并行启动多个 maptask 执行导入操作,如果表没有主键,请指定根据哪个字段进行切分

bin/sqoop import \

--connect jdbc:mysq1://node-1:3306/userdb \

--username root \

--password hadoop \

--target-dir /s qoopresu1t214 \

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

--split-by id \

--table emp --m 2

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
存储 分布式计算 负载均衡
Hadoop学习笔记(二)之HDFS
Hadoop学习笔记(二)之HDFS
|
存储 大数据
大数据数据存储的分布式文件系统的HDFS的基本使用的命令行接口的导入/导出文件
在 Hdfs 中,使用命令行接口可以方便地对数据进行操作。
82 0
|
6月前
|
存储 机器学习/深度学习 分布式计算
Hadoop学习笔记(HDP)-Part.12 安装HDFS
01 关于HDP 02 核心组件原理 03 资源规划 04 基础环境配置 05 Yum源配置 06 安装OracleJDK 07 安装MySQL 08 部署Ambari集群 09 安装OpenLDAP 10 创建集群 11 安装Kerberos 12 安装HDFS 13 安装Ranger 14 安装YARN+MR 15 安装HIVE 16 安装HBase 17 安装Spark2 18 安装Flink 19 安装Kafka 20 安装Flume
176 0
Hadoop学习笔记(HDP)-Part.12 安装HDFS
|
6月前
|
存储 SQL 分布式计算
Hadoop(HDFS+MapReduce+Hive+数仓基础概念)学习笔记(自用)
Hadoop(HDFS+MapReduce+Hive+数仓基础概念)学习笔记(自用)
524 0
|
存储
HDFS 文件块的大小为什么不能设置太小、也不能设置太大?
HDFS 文件块的大小为什么不能设置太小、也不能设置太大?
261 0
|
SQL HIVE
Hdfs 导入Hive,时间相关的字段 导入后为NULL
Hdfs 导入Hive,时间相关的字段 导入后为NULL
102 0
|
存储 缓存 分布式计算
HDFS(二)|学习笔记
快速学习 HDFS(二)
155 0
HDFS(二)|学习笔记
|
SQL JSON 负载均衡
离线同步 mysql 数据到 HDFS2 | 学习笔记
快速学习离线同步 mysql 数据到 HDFS2
188 0
离线同步 mysql 数据到 HDFS2  |  学习笔记
|
SQL 消息中间件 JSON
离线同步 mysql 数据到 HDFS1 | 学习笔记
快速学习离线同步 mysql 数据到 HDFS1
157 0
离线同步 mysql 数据到 HDFS1  |  学习笔记
|
监控 开发工具 开发者
网站流量日志 Flume收集--hdfs--基于文件闲置策略滚动| 学习笔记
快速学习网站流量日志 Flume收集--hdfs--基于文件闲置策略滚动
网站流量日志 Flume收集--hdfs--基于文件闲置策略滚动| 学习笔记
下一篇
无影云桌面