No, I have not tracked down which System.setProperty in Spark was responsible.

I thought of getProperties.clone(), but reading the javadocs it didn't explicitly say what would happen during concurrent modification, so I initially discounted it.

That said, looking at the Hashtable source, yes, clone is synchronized (which makes sense, given it's contract of being thread-safe).

So, sure, I can either use clone() or move the hadoopConf init up a few lines before the other threads are started. Do you have a preference?