Stopping a job may not be easily controllable, unless perhaps you are running the job in a FairScheduler pool and you deallocate all resources out of that pool (the config change can be done in dynamic fashion). This would also stop all other jobs in that pool, however.
Killing a job from within a Map Task is possible, if only in insecure environments. You can use the JobClient API and call its killJob method. Since this call relies on authentication, it may not work right out in a kerberos secured runtime cluster.