我正在尝试使用 MLCP 将大量数据从一个数据库复制到另一个数据库,但我遇到以下异常。
2019-08-30 11:53:54.847 SEVERE [15] (StreamingResultSequence.next): IOException instantiating ResultItem 130891: Error parsing HTTP headers: Premature EOF, partial header line read: 'X-URI: /integration/test%2BItem%2BBarcode%2BCross%2BR'
java.io.IOException: Error parsing HTTP headers: Premature EOF, partial header line read: 'X-URI: /integration/test%2BItem%2BBarcode%2BCross%2BR'
com.marklogic.http.HttpHeaders.parsePlainHeaders(HttpHeaders.java:317)
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:518)
com.marklogic.contentpump.LocalJobRunner$TrackingRecordReader.nextKeyValue(LocalJobRunner.java:498)
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:78)
com.marklogic.contentpump.LocalJobRunner$LocalMapTask.call(LocalJobRunner.java:411)
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 命令 -
mlcp copy -mode local -input_host 192.168.1.46 -input_port 9000 -input_username admin -input_password admin -input_database test -output_host localhost -output_port 8000 -output_username admin -output_password admin -output_database test
听起来您可能遇到了一些超时条件。有一篇 MarkLogic 知识库文章描述了可能发生这种情况的常见情况以及一些尝试帮助避免它们的方法。
https://help.marklogic.com/Knowledgebase/Article/View/75/0/explaining-and-preventing-premature-eof-errors-when-loading-content-via-xcc
过早的 EOF 异常通常发生在 XCC 驱动程序正在读取结果集的过程中与特定应用程序服务器连接的连接丢失的情况下。这可能发生在几种可能的情况下:
- 由于硬件问题、段错误或类似问题,主机不可用;
- 查询超时已过期(尽管这更有可能产生带有"超出时间限制"消息的 XDMP-EXTIME 异常(;
- 网络中断 - 网络可靠性问题的可能指标,例如配置错误的负载平衡器或其他某些网络硬件中的故障。
配置/代码:首次看到此消息时要尝试的操作
此类错误的可能原因可能是由于 JVM 启动垃圾回收,并且此过程花费的时间足以超过服务器超时设置。如果是这种情况,请尝试添加 -XX:+UseConcMarkSweepGC java 选项
将受影响的 XDBC 应用程序服务器的"保持活动状态"值设置为零将禁用套接字池,并可能有助于防止出现这种情况;将保持活动状态设置为零时,套接字将不会重复使用。使用这种方法,可以理解禁用保持活动状态不应对性能产生重大负面影响,尽管仍建议进行彻底测试。