Apache Mesos is a two-level scheduler . The purpose of the framework is to provide high-level planning intelligence. Marathon provides the ability to schedule a task in a cluster, queue this task for scheduling and re-queuing tasks that fail. This works great when running processes for a long time. This is similar to the data center init . Thus, it is commonly used to support other frameworks such as Kubernetes-Mesos or Jenkins .
There are many applications for which this level of planning is insufficient. A marathon can and is often used to run things like Apache Kafka , however this is often not suitable in many failure modes. In addition, Marathon does not care if the task is executed several times on the same node, however, running multiple Kafka nodes on the same slave is a bad idea. Using Hadoop as another example (as you mentioned it), HDFS has several types of nodes that need to be managed; NameNode, DataNode, and JournalNode. The marathon does not know the order to start them, or if they can be placed on the same node or not. He does not know how to scale this application. The HDFS frame controls this intelligence.
Regarding the effectiveness of planning, I'm not sure if this is the goal. Apache Mesos is a two-level scheduler for some reason. This is a highly efficient two-level scheduler. The significance of two-level planning is to abstract the type of problems that I described above for a higher-level scheduler (called Mesos as a framework). A marathon is still a great way to plan and provide high availability for other infrastructures.
source share