2016-06-18 17 views
1

我有大約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中的錯誤的任何建議?

回答

0

通常給定的命令將返回錯誤代碼失敗時(以及被希望記錄的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