3

当我尝试在 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 推荐的解决此问题的最佳实践是什么?尝试以较小的块批量加载?尝试修改系统的限制?

谢谢。

4

2 回答 2

4

首先,如果在有命令行参数值可能会被 shell 插入时使用选项文件,您会省去很多麻烦。否则,你最终会与 shell 的引用作斗争。Geert 已经提供了该语法的链接,所以我不会重复它。

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

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

于 2015-05-14T19:49:46.483 回答
3

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

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

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

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

于 2015-05-13T07:20:22.500 回答