MarkLogic -Java堆空间错误在使用MLCP导入时



标记版本: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 Heap Space"错误。

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

我们如何解决此错误?

您可以使用典型的JVM_OPTS环境变量通过Java Heap设置到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!

MLCP作业旨在将整个输入文件发送为一个单个文档(-input_file_type Documents),尺寸为500 MB,将其发送到转换模块中。转换模块具有每个聚合元素的介绍uris和值(content.uri and content.value)的逻辑。即使服务器上可用的堆空间约为3.4 GB。

,这导致Java堆空间错误。

我尝试了两个正在使用的不同设计。

  1. 在MLCP中添加聚合(-input_file_type聚合,-Aggregate_record_element CustId)以吐到多个文档中。这创建了在登台DB
  2. 时创建多个文档
  3. keep -input_file_type作为文档并删除-transform_module,因此将文件作为一个文档加载到阶段中。

两种方法都在起作用,但是第二种方法可能会创建大小为500 MB的文档(我相信尺寸限制为512 MB)。因此,我选择使用第一种方法(也需要比MLCP创建的默认值更好的URI)。

澄清有关加载单个大型文档与许多文档的澄清 - 这取决于您的输入。如果您的输入文件是一个大文档,则除非指定XML或JSON元素/属性,否则它将被加载而无需分配。例如,一个带有100,000个条目或大电话的电话簿。xml:[] json阵列应分开。

但是,如果您的文档已经分为许多记录(通常是CSV或其他文本格式),则您无需指定如何将其拆分,因为格式使用Newlines来分开记录,并且MLCP知道这一点。<<<<<<<<<<<<<<

相关内容

  • 没有找到相关文章