1

Marklogic 版本:9.0-6.2 mlcp 版本: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

我们如何解决这个错误?

4

3 回答 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 ...

于 2019-02-14T08:10:38.923 回答
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)。

于 2019-02-18T22:15:16.420 回答
0

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

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

于 2019-09-23T13:21:44.323 回答