<ul>
<li>Since versions 2.6 (Apache Hadoop) <strong>Yarn handles docker containers</strong>. Basically it distributes the requested amount of containers on a Hadoop cluster, restart failed containers and so on.</li>
<li><strong>Kubernetes</strong> seemed to do the <strong>same</strong>.</li>
</ul>

<p>Where are the major differences?</p>

<p>Kubernetes is developed almost from a clean slate for extending Docker container kernel to become a platform.  Kubernetes development has taken bottom up approach.  It has good optimization on specifying per container/pod resource requirements, but it lacks a effective global scheduler that can partition resources into logical grouping.  Kubernetes design allows multiple schedulers to run in the cluster.  Each scheduler manages resources within its own pods.  However, Kubernetes cluster can suffer from instability when application demands more resources than physical systems can handle.  It work best in infrastructure capacity exceeding application demands.  Kubernetes scheduler will attempt to fill up the idle nodes with incoming application requests
and terminate low priority and starvation containers to improve resource utilization.  Kubernetes containers can integrate with external storage system like S3 to provide resilience to data.  Kubernetes framework uses etcd to store cluster data.  Etcd cluster nodes and Hadoop Namenode are both single point of failures in Kubernetes or Hadoop platform.  Etcd can have more replica than Namenode, hence, from reliability point of view seems to favor Kubernetes in theory.  However, Kubernetes security is default open, unless RBAC are defined with fine-grained role binding.  Security context is set correctly for pods.  If omitted, primary group of the pod will default to root, which can be problematic for system administrators trying to secure the infrastructure. </p>

<p>Apache Hadoop YARN was developed to run isolated java processes to process big data workload then improved to support Docker containers.  YARN provides global level resource management like capacity queues for partitioning physical resources into logical units.  Each business unit can be assigned with percentage of the cluster resources.  Capacity resource sharing system is designed in favor of guarentee resource 
availability for Enterprise priority instead of squeezing every available physical resources.  YARN does score more points in security.  There are more
security featuers in Kerberos, access control for privileged/non-privileged containers, trusted docker images, and placement policy constraints.  Most docker
related security are default to close, and system admin needs to manually turn on flags to grant more power to containers.  Large enterprises tend to run Hadoop more 
than Kubernetes because securing the system cost less.  There are more distributed SQL engines built on top of YARN, including Hive, Impala, SparkSQL and IBM BigSQL.
Database options make YARN an attrative option because the ability to run online transaction processing in containers, and online analytical processing using batch workload.  Hadoop Developer toolchains can be overwhelming.  Mapreduce, Hive, Pig, Spark and etc, each have its own style of development.  The user experience is inconsistent and take a while to learn them all.  Kubernetes feels less obstructive by comparison because it only deploys docker containers.  With introduction of YARN services to run
Docker container workload, YARN can feel less wordy than Kubernetes.  </p>

<p>If your plan is to out source IT operations to public cloud, pick Kubernetes.  If your plan is to build private/hybrid/multi-clouds, pick Apache YARN.</p>
