MarkLogic-使用mlcp导入时出现Java堆空间错误

问题描述 投票:1回答:3

Marklogic版本:9.0-6.2mlcp版本:9.0.6

我正在尝试使用下面代码中的MLCP uisng将XML文件导入marklogic。

#!/bin/bash
mlcp.sh import -ssl \
-host localhost \
-port 8010 \
-username uname \
-password pword \
-mode local \
-input_file_path /data/testsource/*.XML \
-input_file_type documents \
-aggregate_record_namespace "http://new.webservice.namespace" \
-output_collections testcol \
-output_uri_prefix /testuri/ \
-transform_module /ext/ingesttransform.sjs

该代码使用小文件成功运行,但是当使用大文件(450 MB)运行时给出“ java堆空间”错误。

ERROR contentpump.MultithreadedMapper: Error closing writer: Java heap space

我们如何解决此错误?

marklogic marklogic-9 mlcp
3个回答
2
投票

您可以使用典型的JVM_OPTS环境变量将Java堆设置传递给MLCP。运行java -X以查看所有可用选项的列表。我通常使用这些:

    -Xms<size>        set initial Java heap size
    -Xmx<size>        set maximum Java heap size
    -Xss<size>        set java thread stack size

您可以像这样调用脚本或MLCP:

JVM_OPTS="-Xmx1g" mlcp.sh ...

HTH!


1
投票

mlcp作业旨在将整个输入文件作为一个大小为500 MB的单个文档(-input_file_type文档)发送到转换模块中。转换模块具有为每个集合元素吐出uri和值(content.uri和content.value)的逻辑。即使服务器上可用的堆空间约为3.4 GB,也会导致Java堆空间错误。

我尝试了两种有效的设计。

  1. 在mlcp中添加聚合(-input_file_type聚合,-aggregate_record_element CustId)以吐出多个文档。这将在登台数据库中创建多个文档
  2. 将-input_file_type保留为文档并删除-transform_module,因此该文件将作为一个文档加载到暂存中。

这两种方法都可以,但是第二种方法可以创建大小为500 MB的文档(我相信大小限制为512 MB)。因此,我选择使用第一种方法(而且,我需要比mlcp创建的默认值更好的uri)。


0
投票

要澄清有关加载单个大型文档还是多个文档的问题-这取决于您的输入。如果您的输入文件是一个大文档,除非您指定要分割的XML或JSON元素/属性,否则它将不分割地加载。例如,具有100,000个条目的phoneBook.xml或大型电话:[] JSON数组应拆分。

但是,如果您的文档已经被拆分为许多记录(通常为CSV或其他文本格式),则无需指定拆分方式,因为该格式使用换行符来分隔记录,而mlcp知道这一点。

© www.soinside.com 2019 - 2024. All rights reserved.