Apache Tez

Publicado por

El objetivo con el que nace Tez es el de construir un framework que permita realizar el cambio entre tareas de procesamiento de datos mapreduce por un gráfico acíclico dirigido (DAG) de tareas. Actualmente está construido sobre YARN.

Las dos utilidades principales por las que se utiliza Tez son:

Capacitar a los usuarios finales:

  • API para la definición expresiva del flujo de datos
  • Agnóstico del tipo de dato
  • Simplificar los despliegues

Rendimiento de ejecución:

  • Mejora del rendimiento sobre trabajos MapReduce
  • Gestión optima de recursos
  • Planificar una reconfiguración en tiempo de ejecución
  • Decisiones dinámicas de flujo de datos físicos

Tez permitir que Hive o Pig puedan ejecutar DAGs de tareas, puede usarse para procesar datos que antes necesitaban de múltiples trabajos MapReduce y ahora pueden realizarse con uno solo.

Tez proporciona una API de desarrollo y un framework para escribir aplicaciones nativas para YARN que pueden hacer de puente entre cargas de trabajo interactivas y por lotes. Tez es extensible y embebible.

Tez ofrece un arquitectura de ejecución personalizable que permite a los usuarios expresar complejas operaciones computacionales como grafos de flujo de datos, permitiendo optimizaciones de rendimiento dinámica basados en información real sobre los datos y recursos necesarias para procesarlos.

Características

Tez modela el procesamiento de datos como un gráfico de flujo de datos, con los vértices del gráfico representando la lógica de la aplicación y las flechas representando el movimiento de datos. Una API enriquecida para los flujos de datos permite a los usuarios expresar intuitivamente lógicas complejas de consultas.  La API se adapta bien a los planes de consultas producidos por aplicaciones declarativas de nivel superior como Hive o Pig.

Tez modela la lógica de usuario que se ejecuta en cada vértice del gráfico del flujo de datos como un conjunto de tres módulos: Input, Processor y Output. El Input y el Output determinan el formato de los datos y como y donde son leídos y escritos. El Processor sostiene la lógica de transformación de datos. Tez no impone ningún formato de datos y solo requiere que los formatos del Input, Processor y Output sean compatibles entre si.

El procesamiento distribuido de datos es dinámico, y es difícil determinar los métodos óptimos de movimiento de datos a priori. Durante el tiempo de ejecución más información esta disponible, que puede ayudar a optimizar los planes de ejecución. Por eso Tez incluye soporte para módulos de administración de vértices para recopilar información en tiempo de ejecución y cambiar dinámicamente el gráfico de flujo de datos para optimizar el rendimiento y la utilización de recursos.

Tez sigue el modelo tradicional de Hadoop de dividir el trabajo en tareas individuales, que van a ser procesadas vía YARN. Este modelo viene con costes inherentes para la inicialización del proceso y para la asignación de cada contenedor a través del gestor de recursos YARN.

Tez en local

Utilizar Tez en modo local sirve como herramienta de desarrollo para probar trabajos en Tez sin necesidad de disponer de un clúster Hadoop. Para ejecutar Tez en modo local se cargar los tres componentes principales cuando se utiliza un clúster Hadoop, éstos son el AppMaster y el TaskRunner. Desde la perspectiva de herramienta de desarrollo ofrece varias ventajas:

  • Prototipado rápido con una configuración Hadoop, no existen coste de despliegue, etc
  • Unidad de pruebas de ejecución rápida ya que se elimina la sobrecarga de asignación de recursos, el lanzamiento de una JVM, etc
  • Fácil de depurar, solo existe una única JVM que ejecuta todo el código de usuario

Aunque la mayoría de los componentes son reutilizados en modo local, hay algunos que no:

  • Programación y reutilización de contenedores difieren
  • El manejo de los recursos locales de YARN. En modo local los jars que se necesitan van a ser cargados con el cliente cuando se ejecuta.
  • Contiene algunas mejoras de rendimiento como saltar es saltar las invocaciones RPC ya que todo se ejecuta dentro de la misma JVM.

Ejecutando un DAG en modo local:

  • La propiedad “tez.local.mode” debe ser puesta a true en la configuración de la instancia utilizada para crear el cliente tez (TezClient)
  • El FileSystem debe estar configurado para utilizar el sistema de ficheros local (“fs.default.name” debe ser del tipo file:///). Esto tiene que estar configurado en todas las instancias de configuración utilizadas para crear el DAG
  • Configurar los fetchers para que utilicen lecturas locales en lugar de buscar desde nodos remotos (“tez.runtime.optimize.local.fetch” debe ser true)
  • Mas allá de esta configuración, no se necesitan otros cambios para ejecutar trabajos en local, en vez de en clúster
  • En modo local, grandes cantidades de datos de entrada van a provocar un “out of memory” de la JVM, ya que todos los componentes están corriendo sobre una sola JVM. Hay que mantener los datos de entrada pequeños
  • Cuando se ejecutran trabajos en local hay que tener en cuenta que los opciones java y las variables de entorno no son cargadas, lo que puede generarnos algún que otro problema

 

Fuentes

Apache Tez

Hortoworks Tez

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s