2017-07-28 54 views
5

Bu konuyla ilgili bir kaç yayın daha görmüştüm ve hiçbiri benim yaşadığım problemle aynı değildi. . Ama burada gider:

Ben

cores <- detectCores() cl <- makeCluster(8L,outfile="output.txt") registerDoParallel(cl) x <- foreach(i = 1:length(y), .combine='list',.packages=c('httr','jsonlite'), .multicombine=TRUE,.verbose=F,.inorder=F) %dopar% {function(y[i])}

Bu genellikle iyi çalışır, ama şimdi hata atıyor kullanarak paralel bir işlev çalıştırıyorum: çıktı incelenmesinin ardından

Error in serialize(data, node$con) : error writing to connection

.txt dosyası görüyorum:

starting worker pid=11112 on localhost:11828 at 12:38:32.867 
starting worker pid=10468 on localhost:11828 at 12:38:33.389 
starting worker pid=4996 on localhost:11828 at 12:38:33.912 
starting worker pid=3300 on localhost:11828 at 12:38:34.422 
starting worker pid=10808 on localhost:11828 at 12:38:34.937 
starting worker pid=5840 on localhost:11828 at 12:38:35.435 
starting worker pid=8764 on localhost:11828 at 12:38:35.940 
starting worker pid=7384 on localhost:11828 at 12:38:36.448 
Error in unserialize(node$con) : embedded nul in string: '\0\0\0\006SYMBOL\0\004\0\t\0\0\0\003')'\0\004\0\t\0\0\0\004expr\0\004\0\t\0\0\0\004expr\0\004\0\t\0\0\0\003','\0\004\0\t\0\0\0\024SYMBOL_FUN' 
Calls: <Anonymous> ... doTryCatch -> recvData -> recvData.SOCKnode - 
unserialize 
Execution halted 

Bu hata ben aralıklı. Bellek bol (32GB) ve bellekte başka büyük R nesneleri yok. Paralel koddaki işlev, bir dizi küçük json veri nesnesini buluttan alır ve bir R nesnesine yerleştirir - bu nedenle büyük veri dosyaları yoktur. Neden ara sıra gömülü bir nul olduğunu ve durduğunu bilmiyorum.

Csv dosyalarını da buluttan çeken bir işlevle benzer bir sorunum var. Her iki işlev de şimdiye kadar R 3.3.0 ve R 3.4.0 altında iyi çalıştı.

Windows'ta R 3.4.1 ve RStudio 1.0.143 kullanıyorum.

Error in unserialize(node$con) : ReadItem: unknown type 100, perhaps written by later version of R

gömülü nul hatası kayboldu gibi görünüyor:

İşte benim sessionInfo

sessionInfo() 
R version 3.4.1 (2017-06-30) 
Platform: x86_64-w64-mingw32/x64 (64-bit) 
Running under: Windows 7 x64 (build 7601) Service Pack 1 

Matrix products: default 

locale: 
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United 
States.1252 LC_MONETARY=English_United States.1252 
[4] LC_NUMERIC=C       LC_TIME=English_United States.1252  

attached base packages: 
[1] parallel stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] RJSONIO_1.3-0  RcppBDT_0.2.3  zoo_1.8-0   data.table_1.10.4 
doParallel_1.0.10 iterators_1.0.8 
[7] RQuantLib_0.4.2 foreach_1.4.3  httr_1.2.1  

loaded via a namespace (and not attached): 
[1] Rcpp_0.12.12  lattice_0.20-35 codetools_0.2-15 grid_3.4.1  
R6_2.2.2   jsonlite_1.5  tools_3.4.1  
[8] compiler_3.4.1 

GÜNCELLEME

Şimdi başka benzer hata alıyorum bu. Ayrıca, .Rhistory ve .Rdata'yı silmeyi ve paketler alt klasörümü silmeyi ve tüm pacakları yeniden yüklemeyi denedim. En azından bu yeni hata tutarlı görünüyor. "Bilinmeyen tip 100" ne olduğunu bulamıyorum.

+0

Belki de ortamınızda kümelere ihraç edilen büyük nesneleriniz var mı? Bu foreach çağrısını kendi işlevine sokmayı deneyin. –

+0

Bu sorun gibi görünmüyor - aslında ortamda tüm yabancı nesneleri sildim. – user2642948

+0

Sorunu, bize verebileceğiniz '' 'işleviyle yeniden üretebiliyor musunuz? –

cevap

4

Benzer bir hata alıyorum ... bir önceki betiklerimden çıkıldığında veya daha sonra durduğumda, genellikle bir sonraki komut dosyası çalıştırılır. Bu, bahsettiğiniz kısım olabilir: "Bazen neden gömülü bir nul olduğunu ve durduğunu bilmiyorum", bu hata olabilir.

Bu, özellikle düzenli pencere işlemlerinin çalışması için 1 çekirdekten emin olmak için bazı iyi bilgilere sahiptir. Ayrıca, "Bu işlevlerden herhangi birinden bir hata alırsanız, genellikle işçilerin en az birinin öldüğü anlamına gelir" diyerek hatadan sonra çökme ile ilgili teorimimi destekleyebilir.

doParallel error in R: Error in serialize(data, node$con) : error writing to connection

Şimdiye kadar, benim çözüm yine bu çalıştırarak paralel arka uç yeniden başlatmak için olmuştur:

registerDoParallel(cl) 

Genellikle sonradan çalışır ama önceki çok çekirdekli oturumları fark yok Görev yöneticimimde bile şu adrese git:

stopCluster(cl) 

Bu yüzden bazen R'yi yeniden başlatırım.

+0

Evet, ayrıca durma bile çekirdek sorunu yaşamadım stopCluster (cl) 'dan sonra. Arka ucunu yeniden başlatmaya çalışacağım. Normal pencere işlemleri için çekirdek sayısını 1 azaltmaya çalıştım, ancak bu yardımcı olmadı. – user2642948

+0

Sadece kodu tekrar denedim ve çalıştı - ama bu son 15 denemede ilk kez. Çıkış dosyası bu sefer yanlış bir şey belirtmiyor. Ama neredeyse bir güven oluşturucu ..... – user2642948

+1

Üç tane daha fazla deneme başarısızlıkla sonuçlandı. R'nin yeniden başlatılması, çekirdeklerin azaltılması ve paralel arka ucun yeniden başlatılması yardımcı olmaz. – user2642948

2

Ayrıca çok çekirdekli oturumların görev yöneticisinden uzaklaşmadığını da fark ettim.

kullanarak geçiş: stopCluster(cl) benim için çalıştı stopImplicitCluster() için. Benim okuma itibaren, bu

cl<-makeCluster(x) 
registerDoParallel(cl) 

Benim "hislerime" vs "tek satır" registerDoParallel(cores=x) kullanırken kullanılacak, Windows kümelerini nasıl işleyeceğini stopImplicitCluster gerektirir, ancak deneyiminizi değişebilir olmasıdır gerekiyordu.

Yorum yaptık ama bu (cue bandı) MY FIRST STACKOVERFLOW POST !!!