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