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

简介: 快速学习 导入 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

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
SQL 分布式计算 Hadoop
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
248 4
|
SQL
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
204 2
|
SQL 存储 分布式计算
HDFS数据(跨集群)迁移
HDFS数据(跨集群)迁移
|
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
339 0
|
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
216 0
|
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
256 0
|
分布式计算 Hadoop
|
分布式计算 Hadoop 关系型数据库
实时计算 Flink版操作报错合集之Hadoop在将文件写入HDFS时,无法在所有指定的数据节点上进行复制,该如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
存储 分布式计算 Hadoop
Hadoop的HDFS数据均衡
【6月更文挑战第13天】
684 3
|
存储 分布式计算 Hadoop
hadoop节点HDFS数据分片过程
【5月更文挑战第18天】
328 1