如何使用mlcp加载许多(100K +)XML文档而不会遇到“参数列表太长”错误?

时间:2015-05-12 21:06:04

标签: marklogic mlcp

当我尝试在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建议的解决此问题的最佳做法是什么?尝试在较小的块中批量加载?尝试修改系统的限制?

感谢。

2 个答案:

答案 0 :(得分:4)

首先,当存在可能由shell进行插值的命令行参数值时,如果使用选项文件,则会给自己留下很多麻烦。否则,你最终会反对贝壳的引用。 Geert已经提供了该语法的链接,因此我不会重复它。

其次,-input_file_pattern需要Java正则表达式。 *\.xml可能不是你想要的。你可能意味着.*\.xml。有关mlcp使用的模式语言的链接,请参阅:

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

答案 1 :(得分:3)

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

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

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

HTH!

PS:我已经提交了一个改进MLCP的错误(#33670)