错误处理上mongoimport
问题描述:
我有大约45000 JSON文件的目录。目前总大小约为12.8 GB。这是Kissmetrics的网站数据,其结果是detailed here。错误处理上mongoimport
数据: 每个文件是一个换行符 分隔的多个JSON文档将每12小时用新的附加文件
我想用mongoimport这个数据导入到MongoDB的更新。我试过这个shell脚本简化流程:
for filename in revisions/*;
do
echo $filename
mongoimport --host <HOSTNAME>:<PORT> --db <DBNAME> --collection <COLLECTIONNAME> \
--ssl --sslCAFile ~/mongodb.pem --username <USERNAME> --password <PASSWORD> \
--authenticationDatabase admin $filename
done
这将有误差
2016-06-18T00:31:10.781+0000 using 1 decoding workers
2016-06-18T00:31:10.781+0000 using 1 insert workers
2016-06-18T00:31:10.781+0000 filesize: 113 bytes
2016-06-18T00:31:10.781+0000 using fields:
2016-06-18T00:31:10.822+0000 connected to: <HOSTNAME>:<PORT>
2016-06-18T00:31:10.822+0000 ns: <DBNAME>.<COLLECTION>
2016-06-18T00:31:10.822+0000 connected to node type: standalone
2016-06-18T00:31:10.822+0000 standalone server: setting write concern w to 1
2016-06-18T00:31:10.822+0000 using write concern: w='1', j=false, fsync=false, wtimeout=0
2016-06-18T00:31:10.822+0000 standalone server: setting write concern w to 1
2016-06-18T00:31:10.822+0000 using write concern: w='1', j=false, fsync=false, wtimeout=0
2016-06-18T00:31:10.824+0000 Failed: error processing document #1: invalid character 'l' looking for beginning of value
2016-06-18T00:31:10.824+0000 imported 0 documents
我可能会遇到这个错误,并从我的检查是不是由于格式不正确的数据。
错误可能发生时间为进口。
我可以解析错误mongoimport重试相同的文件吗?我不知道,如果误差都会有这个相同的形式,所以我不知道如果我可以尝试处理它在bash。 如果提前终止,我可以跟踪bash中的进度并重新启动吗?有关导入此大小的大数据或处理shell中的错误的任何建议?
答
通常给定的命令将返回错误代码失败时(以及被希望记录的man
页上的命令)。
所以,如果你想要做的事哈克,只是重试一次,
cmd="mongoimport --foo --bar..."
$cmd
ret=$?
if [ $ret -ne 0 ]; then
echo "retrying..."
$cmd
if [ $? -ne 0 ]; then
"failed again. Sadness."
exit
fi
fi
或者,如果你真的需要什么mongoimport
输出,捕捉它像这样
results=`mongoimport --foo --bar...`
现在变量$results
将包含stdout
返回了什么。也可能必须重定向stderr
。