Hi again, One important correction of my first message: I misinterpreted the output. Actually in that R session 2 input files were processed one after the other in a loop. The first (with 88 parts went fine). The second (with 85 parts) produced the sendMaster errors and failed. If (in a new session via Rscript) I only process the second input file it will work. The other observations on R vs Rscript, NFS share etc. still hold.
Sorry for this! Regards, Andreas 2019-11-27 12:10 GMT+01:00 Andreas Kersting<r-de...@akersting.de>: > Hi, > > I am facing a very weird problem with parallel::mclapply. I have a script > which does some data wrangling on an input dataset in parallel and then > writes the results to disk. I have been using this script daily for more than > one year always on an EC2 instance launched from the same AMI (no updates > installed after launch) and processed thousands of different input data sets > successfully. I now have an input dataset for which I face the following bug: > > The basic outline of the problematic section of the script: > > # parts is a data.table with 88 rows > mc_ret <- parallel::mclapply(sample.int(nrow(parts)), function(i) { > # do some data wrangling and write the result to a file > # ... > > print(paste0("part ", i, " written successfully.")) > return(TRUE) > }, mc.preschedule = FALSE, mc.cores = 2L) > > str(mc_ret) > > > Expected output: "part i written successfully." is printed 88 times, once for > each value of i. mc_ret is a list of length 88, each element being TRUE. Its > structure is printed once. All outputs are created successfully. > > Actual output (see end of the message): "part i written successfully." is > printed 88 times, once for each value of i. mc_ret is a list of length 88, > each element being TRUE. Its structure is printed. All outputs are created > successfully. So far so good. > > But then "part i written successfully." it is printed another X times, for > values of i for which it was already printed. This output is intermingled > with X-1 times the following error message: > > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > > and Y times the message "Execution halted". mc_ret is printed again, now > being a list of length 85, with the first element being TRUE and all other > elements being NULL. X and Y vary from run to run. > > > Now to the main problem: I tried very hard to create a reproducible example, > but I failed. What I observed: > - The output is (and has always been) written to path which is on an NFS > share. If I instead write to a path on a local disk it will work. > - The script is invoked using Rscript. If I instead source it from an > interactive R session it works. There are at least two more people who have > observed this: > https://stackoverflow.com/questions/51986674/mclapply-sendmaster-error-only-with-rscript > - Before the call to mclapply the code acquires an exclusive file lock on a > dedicated lock file, not written to but also on the NFS share. If I remove > the code acquiring the lock, the whole script will also work if called using > Rscript. > - The problem also occurs for mc.preschedule = TRUE. > - There is no error if I set mc.cores to 1. > - And stressing again: the code works without any changes from Rscript for > thousands of other data sets. > > > Rscript -e "sessionInfo()": > R version 3.5.2 (2018-12-20) > Platform: x86_64-pc-linux-gnu (64-bit) > Running under: Ubuntu 18.04.2 LTS > > Matrix products: default > BLAS: /usr/lib/x86_64-linux-gnu/openblas/libblas.so.3 > LAPACK: /usr/lib/x86_64-linux-gnu/libopenblasp-r0.2.20.so > > locale: > [1] LC_CTYPE=C.UTF-8 LC_NUMERIC=C LC_TIME=C.UTF-8 > [4] LC_COLLATE=C.UTF-8 LC_MONETARY=C.UTF-8 LC_MESSAGES=C.UTF-8 > [7] LC_PAPER=C.UTF-8 LC_NAME=C LC_ADDRESS=C > [10] LC_TELEPHONE=C LC_MEASUREMENT=C.UTF-8 LC_IDENTIFICATION=C > > attached base packages: > [1] stats graphics grDevices utils datasets methods base > > loaded via a namespace (and not attached): > [1] compiler_3.5.2 > > > I know this is a fairly old R version. I have not been able to reproduce the > bug with a more recent version, but since it is so difficult to trigger, this > does not mean much, I guess. I have looked through the changes made to the > code of mclapply since that version and could not find something directly > related. I am not even sure if it is a problem in the parallel package or > some other (memory) bug. What strikes me is that others have observed a very > similar error when using Rscript but not when using an interactive R session, > just like I do. > > I am not expecting a fix based on the information I provide, but maybe > someone has some thoughts on this!? > > Regards, > Andreas > > > > > Actual output: > > [1] "part 51 written successfully." > [1] "part 30 written successfully." > [1] "part 32 written successfully." > [1] "part 48 written successfully." > [1] "part 63 written successfully." > [1] "part 5 written successfully." > [1][1] "part 14 written successfully." "part 18 written successfully." > > [1] "part 38 written successfully." > [1] "part 11 written successfully." > [1] "part 68 written successfully." > [1] "part 45 written successfully." > [1] "part 88 written successfully." > [1] "part 36 written successfully." > [1] "part 44 written successfully." > [1] "part 55 written successfully." > [1] "part 26 written successfully." > [1] "part 37 written successfully." > [1] "part 22 written successfully." > [1] "part 13 written successfully." > [1] "part 67 written successfully." > [1] "part 10 written successfully." > [1] "part 24 written successfully." > [1] "part 20 written successfully." > [1] "part 74 written successfully." > [1] "part 50 written successfully." > [1] "part 2 written successfully." > [1] "part 17 written successfully." > [1] "part 66 written successfully." > [1] "part 61 written successfully." > [1][1] "part 7 written successfully." "part 31 written successfully." > > [1] "part 70 written successfully." > [1] "part 71 written successfully." > [1][1] "part 76 written successfully." > "part 42 written successfully." > [1][1] "part 72 written successfully." "part 12 written successfully." > > [1] "part 39 written successfully." > [1] "part 58 written successfully." > [1] "part 87 written successfully." > [1] "part 81 written successfully." > [1] "part 3 written successfully." > [1] "part 29 written successfully." > [1] "part 82 written successfully." > [1] "part 54 written successfully." > [1] "part 23 written successfully." > [1] "part 56 written successfully." > [1] "part 73 written successfully." > [1] "part 27 written successfully." > [1] "part 64 written successfully." > [1] "part 46 written successfully." > [1] "part 80 written successfully." > [1] "part 53 written successfully." > [1] "part 43 written successfully." > [1] "part 47 written successfully." > [1] "part 57 written successfully." > [1] "part 75 written successfully." > [1] "part 84 written successfully." > [1] "part 85 written successfully." > [1][1] "part 86 written successfully." > "part 19 written successfully." > [1][1] "part 33 written successfully." "part 34 written successfully." > > [1] "part 21 written successfully." > [1] "part 40 written successfully." > [1][1] "part 4 written successfully." > "part 28 written successfully." > [1] "part 62 written successfully." > [1] "part 16 written successfully." > [1] "part 79 written successfully." > [1] "part 6 written successfully." > [1] "part 77 written successfully." > [1] "part 65 written successfully." > [1] "part 60 written successfully." > [1] "part 78 written successfully." > [1] "part 1 written successfully." > [1] "part 83 written successfully." > [1] "part 9 written successfully." > [1] "part 15 written successfully." > [1][1] "part 41 written successfully." > "part 35 written successfully." > [1][1] "part 8 written successfully." "part 69 written successfully." > > [1] "part 59 written successfully." > [1] "part 25 written successfully." > [1] "part 49 written successfully." > [1] "part 52 written successfully." > List of 88 > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > $ : logi TRUE > [1] "part 31 written successfully." > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> lapply -> FUN -> mcparallel -> sendMaster > [1] "part 71 written successfully." > [1] "part 35 written successfully." > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > [1] "part 42 written successfully." > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > Execution halted > [1] "part 4 written successfully." > Execution halted > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > [1][1] "part 30 written successfully." "part 40 written successfully." > > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > Execution halted > [1] "part 41 written successfully." > [1] "part 80 written successfully." > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > [1] "part 45 written successfully." > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > Execution halted > [1] "part 82 written successfully." > [1] "part 54 written successfully." > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > [1] "part 59 written successfully." > Execution halted > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > [1] "part 27 written successfully." > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > Execution halted > [1] "part 36 written successfully." > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > Execution halted > [1] "part 44 written successfully." > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > Execution halted > Execution halted > [1] "part 83 written successfully." > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > [1] "part 61 written successfully." > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > [1] "part 70 written successfully." > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > [1] "part 66 written successfully." > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > [1] "part 10 written successfully." > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > Execution halted > Execution halted > [1] "part 53 written successfully." > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > [1] "part 55 written successfully." > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > [1] "part 15 written successfully." > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > [1] "part 50 written successfully." > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > [1] "part 5 written successfully." > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > Execution halted > Execution halted > [1] "part 48 written successfully." > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > [1] "part 32 written successfully." > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > [1] "part 69 written successfully." > Execution halted > [1] "part 52 written successfully." > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > [1] "part 77 written successfully." > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > Execution halted > Execution halted > [1] "part 24 written successfully." > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > [1] "part 56 written successfully." > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > [1] "part 6 written successfully." > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > [1] "part 62 written successfully." > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > [1] "part 33 written successfully." > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > Execution halted > [1] "part 16 written successfully." > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > [1] "part 34 written successfully." > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > [1] "part 74 written successfully." > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > Execution halted > [1] "part 2 written successfully." > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > [1] "part 19 written successfully." > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > Execution halted > [1] "part 9 written successfully." > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > [1] "part 11 written successfully." > [1] "part 28 written successfully." > [1] "part 29 written successfully." > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > [1] "part 17 written successfully." > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > [1] "part 65 written successfully." > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > Execution halted > Execution halted > [1] "part 68 written successfully." > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > [1] "part 43 written successfully." > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > [1] "part 38 written successfully." > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > [1] "part 1 written successfully." > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > [1] "part 57 written successfully." > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > [1] "part 8 written successfully." > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > [1] "part 25 written successfully." > Error in sendMaster(try(eval(expr, env), silent = TRUE)) : > write error, closing pipe to the master > Calls: lapply ... <Anonymous> -> <Anonymous> -> mcparallel -> sendMaster > [1]List of 85 > $ : logi TRUE > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > $ : NULL > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel