如何使用 mlcp 加载许多 (100K+) XML 文档而不会遇到 "argument list too long" 错误?

How can I load many (100K+) XML documents using mlcp without encountering "argument list too long" error?

当我尝试在 MacOS 10.10.4 上使用 mlcp 将 160,000 XML 文档加载到 MarkLogic 8.0-2 时,抛出 mlcp-Hadoop2-1.3-1/bin/mlcp.sh: line 16: /usr/bin/java: Argument list too long 错误。

我发出的命令:

mlcp import -database FO -username sss4r -password ******* -host localhost -port 8003 -mode local -input_file_pattern '*\.xml' -output_uri_replace "/Users/sss4r/Documents/FOPOC,''" -input_file_path .

我意识到这可能是一个 Unix shell 问题,mlcp 正在使用文件系统工具返回名称列表。一个命令可以处理多少个文件名存在基于系统的限制。

MarkLogician 推荐的解决此问题的最佳实践是什么?尝试批量加载较小的块?尝试修改系统的限制?

谢谢。

MLCP 不依赖于 shell 扩展来加载文件。恐怕 shell 扩展是在 mlcp.sh 内部发生的,但只是无意的。如果您删除输入文件模式参数,您可能会看到它将加载所有文件。一个快速的解决方法是将文件放在子目录中,不要使用文件模式,只需将子目录指向 input_file_path.

Rob S. 正在提供另一种解决方案来防止这种情况发生。将您的参数放在一个文件中,每个参数单独一行,并在命令行中使用 -options_file 参数指向它。这也可以避免引号和其他特殊字符无意中被 shell 环境解释的问题。

此处有更多详细信息:https://docs.marklogic.com/guide/ingestion/content-pump#id_36150

HTH!

PS:我已提交错误以改进 MLCP (#33670)

首先,如果您在命令行参数值可能被 shell 插入的情况下使用选项文件,您会省去很多麻烦。否则,您最终会与 shell 的引用作斗争。 Geert 已经为该语法提供了 link,因此我不再重复。

其次,-input_file_pattern 需要一个 Java 正则表达式。 *\.xml 可能不是您想要的。您可能是指 .*\.xml。对于 mlcp 使用的模式语言 link,请参阅:

https://docs.marklogic.com/guide/ingestion/content-pump#id_10243