Sometimes my MR job complains that MyMapper class in not found.
And that i have to give job.setJarByClass(MyMapper.class); to tell it to load it from my jar file.
Yes, job.setJarByClass is necessary. So that hadoop will copy your jar to the task trackers. If you does not invoke job.setJarByClass, hadoop will think your jar is in the classpath of task trackers, so it does not copy your jar.