使用MLCP复制1.5TB数据库时遭遇异常,请求技术支持
MLCP复制1.5TB MarkLogic数据库时的异常排查方案
场景概述
尝试使用MLCP将1.5TB的MarkLogic数据库从一个实例复制到另一个实例,实例规格为r5.4xlarge,复制过程中出现异常。
执行的MLCP命令
mlcp.bat copy -mode local -input_host localhost -input_port 8003 -input_username admin -input_password xxxx -output_host xx.xx.xx.xxx -output_port 8003 -output_username admin -output_password xxxx
异常信息
异常1:文档缓冲失败
23/09/14 00:01:14 ERROR contentpump.DatabaseContentReader: 读取/mla/searchCopy/expanded/BIB5211557.xml时发生RuntimeException:java.lang.RuntimeException: 无法将值缓冲为字符串 23/09/14 00:01:14 INFO contentpump.DatabaseContentReader: 主机名: localhost 23/09/14 00:01:15 INFO contentpump.DatabaseContentReader: 正在重试连接
异常2:HTTP头解析失败
2023-09-13 23:23:22.792 SEVERE [34] (StreamingResultSequence.next): 实例化ResultItem 6688时发生IOException:解析HTTP头出错: 提前EOF,读取到不完整的头行:'X-URI: /validati' java.io.IOException: 解析HTTP头出错:提前EOF, 读取到不完整的头行:'X-URI: /validati' com.marklogic.http.HttpHeaders.parsePlainHeaders(HttpHeaders.java:321) com.marklogic.http.MultipartBuffer.next(MultipartBuffer.java:103) com.marklogic.xcc.impl.AbstractResultSequence.instantiateResultItem(AbstractResultSequence.java:132) com.marklogic.xcc.impl.StreamingResultSequence.next(StreamingResultSequence.java:147) com.marklogic.xcc.impl.StreamingResultSequence.next(StreamingResultSequence.java:166) com.marklogic.contentpump.DatabaseContentReader.nextKeyValue(DatabaseContentReader.java:520) com.marklogic.contentpump.LocalJobRunner$TrackingRecordReader.nextKeyValue(LocalJobRunner.java:431) org.apache.hadoop.mapreduce.task.MapContextImpl.nextKeyValue(MapContextImpl.java:80) org.apache.hadoop.mapreduce.lib.map.WrappedMapper$Context.nextKeyValue(WrappedMapper.java:91) com.marklogic.contentpump.BaseMapper.run(BaseMapper.java:66) com.marklogic.contentpump.LocalJobRunner$LocalMapTask.call(LocalJobRunner.java:343) java.util.concurrent.FutureTask.run(Unknown Source) java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) java.lang.Thread.run(Unknown Source)
解决方向
- 调整MLCP内存配置:针对1.5TB的大数据量,默认内存不足会导致缓冲失败。执行命令前设置
MLCP_OPTS="-Xmx32G -Xms32G"(根据r5.4xlarge的128G内存,可分配32-64G)。 - 优化连接与批量参数:
- 添加
-input_connection_timeout 300和-output_connection_timeout 300(单位秒),延长连接超时时间,避免大文件传输时提前断开。 - 减小
-input_batch_size和-output_batch_size的值,降低单次传输的文档数量,减轻网络和实例负载。
- 添加
- 验证源文档完整性:单独检查异常中提到的
BIB5211557.xml,确认该文档在源实例中可正常读取,无损坏或体积异常情况。 - 拆分复制流程:放弃直接跨实例复制,先将源数据库导出到本地文件,再将文件导入目标实例,降低实时传输的稳定性风险。
- 排查网络问题:目标实例通过公网IP访问,需确认带宽充足、无丢包;若条件允许,建立源与目标实例的私有网络连接,提升传输稳定性。
内容的提问来源于stack exchange,提问作者Arunjay
相关产品推荐
相关产品推荐

