In the fair scheduler, containers are chosen for preemption in the following way:
All containers for all apps that are in queues that are over their fair share are put in a list.
The list is sorted in order of the priority that the container was requested in.
This means that an application can shield itself from preemption by requesting it's containers at higher priorities, which doesn't really make sense.
Also, an application that is not over its fair share, but that is in a queue that is over it's fair share is just as likely to have containers preempted as an application that is over its fair share.