当我尝试在 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

哼!

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

关于marklogic - 如何使用 mlcp 加载许多(100K+)XML 文档而不会遇到 "argument list too long"错误?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30201396/

10-12 16:45