sqoop to hive GC overhead limit exceeded 大表抽取到hive中发生异常

简介: 如果你已经试过了别的博客提供的修改内存的方法,但是美效果的话,不妨看看我的解决办法。为什么Sqoop Import抛出这个异常?

如果你已经试过了别的博客提供的修改内存的方法,但是美效果的话,不妨看看我的解决办法。

为什么Sqoop Import抛出这个异常?


22/04/08 16:22:35 INFO mapreduce.Job: Task Id : attempt_1649398255409_0017_m_000000_0, Status : FAILED
Exception from container-launch.
Container id: container_1649398255409_0017_01_000002
Exit code: 255
Stack trace: ExitCodeException exitCode=255:
  at org.apache.hadoop.util.Shell.runCommand(Shell.java:585)
  at org.apache.hadoop.util.Shell.run(Shell.java:482)
  at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:776)
  at org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor.launchContainer(DefaultContainerExecutor.java:212)
  at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:302)
  at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:82)
  at java.util.concurrent.FutureTask.run(FutureTask.java:266)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
  at java.lang.Thread.run(Thread.java:748)
Container exited with a non-zero exit code 255

也有可能是这样

Container exited with a non-zero exit code 255
22/04/08 16:23:16 INFO mapreduce.Job: Task Id : attempt_1649398255409_0017_m_000000_2, Status : FAILED
Error: GC overhead limit exceeded
Container killed by the ApplicationMaster.
Container killed on request. Exit code is 143
Container exited with a non-zero exit code 143

总结

1.为什么只有map的原始任务生成的小文件太多?


原表的生成脚本是从一个小分区很多的大表中筛选一部分数据出来,所以原表的数据就很分散,如果原表不执行小文件合并则会导致map出很多小文件,所以在生成原表时就要注意控制文件数量。


2.怎么判断 GC overhead limit exceeded 的缘由?


内存溢出有很多情况,如果像上面遇到的情况一样,无法开始正常的MR任务,无法显示启动了多少个map reduce,则可能是因为启动资源过大造成的内存溢出,这时候就要看表原始的数据,数据量是不是有问题;如果是map和reduce执行了一段时间显示内存溢出的问题,很有可能是脚本设计不合理或者原始数据倾斜,则需要通过set参数来进行调整,最常见的就是group by,或者map,reduce处理的数据量不均匀导致


是-在这个过程中,


RDBMS数据库(不是SQOOP)一次性获取所有的行

并试图将所有的行加载到内存中

这会导致内存溢出并抛出错误

为了克服这个问题,需要告诉RDBMS数据库批量返回数据

以下参数“?”

dontTrackOpenResources=true

& defaultfetchsize =10000

& usecursorfetch =true "


跟随jdbc连接字符串告诉数据库每批获取10000行。


这里逻辑是

sqoop import \
--connect jdbc:mysql://192.168.23.45:3306/shtd_store?useSSL=false\&dontTrackOpenResources=true\&defaultFetchSize=10000\&useCursorFetch=true \
--driver com.mysql.jdbc.Driver \
--username root \
--password 123456 \
--table PARTSUPP \
--hive-import \
--hive-table ods.PARTSUPP \
--hive-overwrite \
--hive-partition-key etldate \
--hive-partition-value '20220407' \
--fields-terminated-by '|' \
--m 1

注意!

这里jdbc连接的分割符号要用\&

重点!!!

dontTrackOpenResources=true & defaultfetchsize =10000 & usecursorfetch =true " 跟随jdbc连接字符串告诉数据库每批获取10000行。也可以自己根据实际数据量调整参数,欢迎讨论这个性能问题

\&dontTrackOpenResources=true\&defaultFetchSize=10000\&useCursorFetch=true 


目录
相关文章
|
4月前
|
SQL 分布式计算 关系型数据库
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
140 3
|
4月前
|
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
164 0
|
9月前
|
SQL 关系型数据库 MySQL
Sqoop【付诸实践 01】Sqoop1最新版 MySQL与HDFS\Hive\HBase 核心导入导出案例分享+多个WRAN及Exception问题处理(一篇即可学会在日常工作中使用Sqoop)
【2月更文挑战第9天】Sqoop【付诸实践 01】Sqoop1最新版 MySQL与HDFS\Hive\HBase 核心导入导出案例分享+多个WRAN及Exception问题处理(一篇即可学会在日常工作中使用Sqoop)
350 7
|
8月前
|
SQL 关系型数据库 MySQL
基于Hive的天气情况大数据分析系统(通过hive进行大数据分析将分析的数据通过sqoop导入到mysql,通过Django基于mysql的数据做可视化)
基于Hive的天气情况大数据分析系统(通过hive进行大数据分析将分析的数据通过sqoop导入到mysql,通过Django基于mysql的数据做可视化)
375 0
|
9月前
|
SQL 分布式计算 关系型数据库
使用 Spark 抽取 MySQL 数据到 Hive 时某列字段值出现异常(字段错位)
在 MySQL 的 `order_info` 表中,包含 `order_id` 等5个字段,主要存储订单信息。执行按 `create_time` 降序的查询,显示了部分结果。在 Hive 中复制此表结构时,所有字段除 `order_id` 外设为 `string` 类型,并添加了 `etl_date` 分区字段。然而,由于使用逗号作为字段分隔符,当 `address` 字段含逗号时,数据写入 Hive 出现错位,导致 `create_time` 值变为中文字符串。问题解决方法包括更换字段分隔符或使用 Hive 默认分隔符 `\u0001`。此案例提醒在建表时需谨慎选择字段分隔符。
185 6
|
8月前
|
SQL 关系型数据库 HIVE
sqoop笔记——一次从Hive到PostgreSql的数据迁移
sqoop笔记——一次从Hive到PostgreSql的数据迁移
325 0
|
9月前
|
SQL 分布式计算 关系型数据库
Sqoop数据导入到Hive表的最佳实践
Sqoop数据导入到Hive表的最佳实践
|
9月前
|
SQL 数据可视化 数据挖掘
将Sqoop与Hive集成无缝的数据分析
将Sqoop与Hive集成无缝的数据分析
|
SQL 分布式计算 分布式数据库
大数据Sqoop借助Hive将Mysql数据导入至Hbase
大数据Sqoop借助Hive将Mysql数据导入至Hbase
280 0
|
SQL 分布式计算 运维
【大数据开发运维解决方案】Sqoop增量同步mysql/oracle数据到hive(merge-key/append)测试文档
上一篇文章介绍了sqoop全量同步数据到hive, 本片文章将通过实验详细介绍如何增量同步数据到hive,以及sqoop job与crontab定时结合无密码登录的增量同步实现方法。
【大数据开发运维解决方案】Sqoop增量同步mysql/oracle数据到hive(merge-key/append)测试文档

热门文章

最新文章