Sqoop fetchsize失效

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介:

前几天线上Sqoop的一个Job(从MySQL抽取数据到Hadoop)突然报了OOME,后重跑并做java trace发现内存占用都是byte[],同时cpu top 3的方法都是com.mysql.jdbc.ByteArraryBuffer.getBytes即内存都是被数据消耗掉了;很奇怪,为什么在option里指定了fetch-size=100怎么会OOME呢(平均记录长度不到1kb);

再看昨天成功的发现100W条记录,发现占用了860MB内存,明显是fetch-size没有生效

+---------+---------+------------+----------+-------------+--------------+

|type | status | host | cpusec | mrinput_rec |memory_mb |

+---------+---------+------------+----------+-------------+--------------+

|CLEANUP | SUCCESS | A | 0.3400 | NULL | 191.84765625 |

|MAP | SUCCESS | A | 335.6400 | 1006942 | 862.39843750 |

|SETUP | SUCCESS | B | 0.2000 | NULL | 179.34765625 |

+---------+---------+------------+----------+-------------+--------------+

没办法,把sqoop源码翻出来终于发现RC了:fetchsize被忽略掉了

protectedvoidinitOptionDefaults() {

if(options.getFetchSize() == null) {

LOG.info("Preparing to use a MySQL streaming resultset.");

options.setFetchSize(Integer.MIN_VALUE);

elseif(

!options.getFetchSize().equals(Integer.MIN_VALUE)

&&!options.getFetchSize().equals(0)) {

LOG.info("Argument '--fetch-size "+ options.getFetchSize()

"' will probably get ignored by MySQL JDBC driver.");

}

}

究其原因是MySQL提供的API只支持row-by-rowall模式:

By default,ResultSets are completely retrieved and stored in memory. In most cases this isthe most efficient way to operate, and due to the design of the MySQL networkprotocol is easier to implement. If you are working with ResultSets that have alarge number of rows or large values, and cannot allocate heap space in yourJVM for the memory required, you can tell the driver to stream the results backone row at a time.

http://dev.mysql.com/doc/refman/5.5/en/connector-j-reference-implementation-notes.html

最后把fetchsize给去掉了,Job执行成功,700W行占用内存400MB

+---------+---------+------------+----------+-------------+--------------+

| type | status | host | cpusec | mrinput_rec | memory_mb |

+---------+---------+------------+----------+-------------+--------------+

| CLEANUP | SUCCESS | A | 0.4200 | NULL | 183.49218750 |

| MAP | FAILED | B | NULL | NULL | NULL |

| MAP | SUCCESS | A | 377.1200 | 7195560 | 408.08593750 |

| SETUP | SUCCESS | C | 0.2900| NULL | 188.64843750 |

+---------+---------+------------+----------+-------------+--------------+



本文转自MIKE老毕 51CTO博客,原文链接:http://blog.51cto.com/boylook/1298634,如需转载请自行联系原作者


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
SpringCloudAlibaba NoSQL 安全
SpringCloudAlibaba篇(九)SpringCloudGateWay整合Oauth2+Jwt实现认证中心
SpringCloudAlibaba篇(九)SpringCloudGateWay整合Oauth2+Jwt实现认证中心
2860 0
SpringCloudAlibaba篇(九)SpringCloudGateWay整合Oauth2+Jwt实现认证中心
|
缓存 安全 NoSQL
Spring Cloud实战 | 第六篇:Spring Cloud Gateway+ Spring Security OAuth2 + JWT实现微服务统一认证鉴权
Spring Cloud实战 | 第六篇:Spring Cloud Gateway+ Spring Security OAuth2 + JWT实现微服务统一认证鉴权
Spring Cloud实战 | 第六篇:Spring Cloud Gateway+ Spring Security OAuth2 + JWT实现微服务统一认证鉴权
|
Linux Shell API
ollama 大模型部署 工具 | AIGC
Ollama是一个集成了多种大型语言模型的工具,它支持模型的部署、运行以及API的整合和调用。Ollama为不同操作系统的用户提供了便捷的安装方式,并具备丰富的命令行界面(CLI)和API接口,使得用户可以轻松地管理和运行大型模型。【10月更文挑战第1天】
2263 1
|
9月前
|
JSON 数据格式
本地部署的qwen3-8b模型和百炼上的qwen3-8b模型效果不一致
我在使用Function Call时发现,百炼平台上的Qwen3-8B模型与本地部署的Qwen3-8B模型效果存在差异,主要体现在函数参数生成上,本地模型常出现漏参或JSON格式错误,而百炼模型表现正常。想确认百炼平台的Qwen3-8B是否为更高版本?
1651 1
|
XML 前端开发 Java
怎样将MultipartFile和File互转
该文介绍了如何在Java开发中优雅地转换MultipartFile和File。MultipartFile是Spring框架用于接收上传文件的类,而File是操作系统文件的代表。文章提供了三种将MultipartFile转换为File的方法:使用`transferTo`方法、FileOutputStream和Java NIO。另外,还介绍了在测试场景下将File转换为MultipartFile,通过MockMultipartFile实现。
1816 1
使用LabVIEW时遇到VISA属性错误 -1073807331的解决方案
使用LabVIEW时遇到VISA属性错误 -1073807331的解决方案
638 1
|
搜索推荐 算法 安全
程序化广告系列之一---名词解释
这篇文章是关于程序化广告中各种专业术语的详细解释,包括DSP、SSP、RTB等,以及它们在广告交易流程中的作用和关系。
2250 2
程序化广告系列之一---名词解释
|
消息中间件 API 调度
TAG:BladeLLM 的纯异步推理架构
近期,大模型推理社区(vLLM,SGLang 等)普遍开始关注框架运行时开销,提出了多步调度、异步输出处理、独立 API Server 进程等工作,来分摊或掩盖部分开销。 在我们的实际业务场景中,也观察到高额的框架开销严重限制了系统吞吐,特别是在高并发(>1k)场景下,运行时开销已经接近或高于 GPU 运行时间,导致资源严重浪费和性能下降。为此,BladeLLM 设计并实现了基于 Python 的纯异步 LLM 推理架构 -- TAG (Totally Asynchronous Generator) ,以最大程度提高 GPU 利用率,提升引擎性能。
|
关系型数据库 MySQL Linux
性能分析之解决 jbd2 引起 IO 高问题
【8月更文挑战第19天】性能分析之解决 jbd2 引起 IO 高问题
1615 0