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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 快速学习 导入 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
相关文章
|
2月前
|
SQL 分布式计算 Hadoop
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
51 4
|
2月前
|
SQL
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
41 2
|
2月前
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
96 0
|
2月前
|
SQL 分布式计算 关系型数据库
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
43 0
|
2月前
|
SQL 分布式计算 关系型数据库
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
56 0
|
4月前
|
SQL 存储 分布式计算
HDFS数据(跨集群)迁移
HDFS数据(跨集群)迁移
|
5月前
|
分布式计算 Hadoop
|
5月前
|
分布式计算 Hadoop 关系型数据库
实时计算 Flink版操作报错合集之Hadoop在将文件写入HDFS时,无法在所有指定的数据节点上进行复制,该如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
6月前
|
存储 分布式计算 Hadoop
Hadoop的HDFS数据均衡
【6月更文挑战第13天】
263 3
|
7月前
|
存储 分布式计算 Hadoop
hadoop节点HDFS数据分片过程
【5月更文挑战第18天】
86 1