mongoimport上的错误处理

时间:2016-06-18 15:38:48

标签: json bash mongodb shell mongoimport

我有一个大约45,000个json文件的目录。目前总大小约为12.8 GB。这是来自kissmetrics的网站数据,其结构为detailed here

数据: 每个文件都是由换行符分隔的多个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中的错误的任何建议吗?

1 个答案:

答案 0 :(得分:0)

通常,给定的命令会在失败时返回错误代码(希望在命令的man页面上记录)。

所以如果你想做一些hacky并且只重试一次,

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