Hive query is received from UI or from thrift server or CLI and it is received by driver. So the driver contacts the compiler to validate the hive query. So, the compiler interns contact the metastore to check the schema or syntactic validation of the query, then metastore response to the compiler, compiler sends the response back to the driver. Driver then takes the plan generated by compiler and sends it to the execution engine. Execution engine validates the plan, Plan contains direct acyclic graph of MapReduce jobs or tasks that has to be executed on the cluster for getting response or results to the query. So execution engine sends the DAG to Hadoop cluster, where its actually gets executed and the results again sends back to the execution engine. Those results, execution engines sends back to the driver and driver finally sends back to the client program. This is how Hive communication happens.