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 关系型数据库 MySQL
Sqoop【付诸实践 01】Sqoop1最新版 MySQL与HDFS\Hive\HBase 核心导入导出案例分享+多个WRAN及Exception问题处理(一篇即可学会在日常工作中使用Sqoop)
【2月更文挑战第9天】Sqoop【付诸实践 01】Sqoop1最新版 MySQL与HDFS\Hive\HBase 核心导入导出案例分享+多个WRAN及Exception问题处理(一篇即可学会在日常工作中使用Sqoop)
190 7
|
3月前
|
SQL 关系型数据库 MySQL
基于Hive的天气情况大数据分析系统(通过hive进行大数据分析将分析的数据通过sqoop导入到mysql,通过Django基于mysql的数据做可视化)
基于Hive的天气情况大数据分析系统(通过hive进行大数据分析将分析的数据通过sqoop导入到mysql,通过Django基于mysql的数据做可视化)
|
4月前
|
SQL 分布式计算 关系型数据库
使用 Spark 抽取 MySQL 数据到 Hive 时某列字段值出现异常(字段错位)
在 MySQL 的 `order_info` 表中,包含 `order_id` 等5个字段,主要存储订单信息。执行按 `create_time` 降序的查询,显示了部分结果。在 Hive 中复制此表结构时,所有字段除 `order_id` 外设为 `string` 类型,并添加了 `etl_date` 分区字段。然而,由于使用逗号作为字段分隔符,当 `address` 字段含逗号时,数据写入 Hive 出现错位,导致 `create_time` 值变为中文字符串。问题解决方法包括更换字段分隔符或使用 Hive 默认分隔符 `\u0001`。此案例提醒在建表时需谨慎选择字段分隔符。
|
3月前
|
SQL 关系型数据库 HIVE
sqoop笔记——一次从Hive到PostgreSql的数据迁移
sqoop笔记——一次从Hive到PostgreSql的数据迁移
182 0
|
4月前
|
SQL 分布式计算 关系型数据库
Sqoop数据导入到Hive表的最佳实践
Sqoop数据导入到Hive表的最佳实践
|
4月前
|
SQL 数据可视化 数据挖掘
将Sqoop与Hive集成无缝的数据分析
将Sqoop与Hive集成无缝的数据分析
|
SQL 分布式计算 分布式数据库
大数据Sqoop借助Hive将Mysql数据导入至Hbase
大数据Sqoop借助Hive将Mysql数据导入至Hbase
216 0
|
SQL 分布式计算 运维
【大数据开发运维解决方案】Sqoop增量同步mysql/oracle数据到hive(merge-key/append)测试文档
上一篇文章介绍了sqoop全量同步数据到hive, 本片文章将通过实验详细介绍如何增量同步数据到hive,以及sqoop job与crontab定时结合无密码登录的增量同步实现方法。
【大数据开发运维解决方案】Sqoop增量同步mysql/oracle数据到hive(merge-key/append)测试文档
|
SQL 运维 分布式计算
【大数据开发运维解决方案】Sqoop全量同步mysql/Oracle数据到hive
前面文章写了如何部署一套伪分布式的handoop+hive+hbase+kylin环境,也介绍了如何在这个搭建好的伪分布式环境安装配置sqoop工具以及安装完成功后简单的使用过程中出现的错误及解决办法, 接下来本篇文章详细介绍一下使用sqoop全量同步oracle/mysql数据到hive,这里实验采用oracle数据库为例,
【大数据开发运维解决方案】Sqoop全量同步mysql/Oracle数据到hive
|
SQL 分布式计算 运维
【大数据开发运维解决方案】sqoop增量导入oracle/mysql数据到hive时时间字段为null处理
前面几篇文章详细介绍了sqoop全量增量导入数据到hive,大家可以看到我导入的数据如果有时间字段的话我都是在hive指定成了string类型,虽然这样可以处理掉时间字段在hive为空的问题,但是在kylin创建增量cube时需要指定一个时间字段来做增量,所以上面那种方式不行,这里的处理方式为把string改成timestamp类型,看实验:
【大数据开发运维解决方案】sqoop增量导入oracle/mysql数据到hive时时间字段为null处理