Trident (Storm)

23 views
Skip to first unread message

Pere Ferrera

unread,
Jan 25, 2013, 8:14:05 AM1/25/13
to spain-scala...@googlegroups.com
Hola,

Hacía tiempo que quería probar Trident, una API de alto nivel por encima de Storm... y de paso hemos hecho un post en el blog sobre una "arquitectura lambda" ejemplo - de lo que ya hemos hablado a veces en el foro: http://www.datasalt.es/2013/01/un-ejemplo-de-arquitectura-lambda-para-el-analisis-en-tiempo-real-de-hashtags-usando-trident-hadoop-y-splout-sql/

La verdad que Trident está muy bien, ya que ofrece las mismas ventajas que Cascading sobre Hadoop: una abstracción fácil de entender y de usar, para prototipar tolopogías de proceso en tiempo real de forma sencilla.
Hay funciones each(), groupBy(), aggregate() y project(). En el ejemplo vereis cómo las usamos para contar las menciones de un hashtag en tweets en tiempo real.

Por otro lado, un tema muy interesante que tiene Trident es un conjunto de primitivas para poder guardar estado en una topología Storm.

Normalmente están orientadas a guardar un estado key -> value en memoria, o bien en Memcached (tienen un conector hecho). Pero puedes programar cualquier conector, de hecho nosotros hemos programado en el ejemplo un conector para Splout SQL.

Lo bueno es que te dan la posibilidad de persistir contadores incrementales de forma totalmente segura (exactly-one semantics). Normalmente las cosas pueden fallar, una tupla de Storm puede ser re-intentanda si ha fallado antes y no puedes saber si ya has contado eso o no... por eso los contadores en tiempo real tienen el problema que a veces se pueden descuadrar. 

Lo que hacen en Trident es agrupar unas cuantas tuplas Storm en "mini batches" y asignarles un "transaction id" incremental. Éstos mini-batches y éste transaction id se pueden usar de varias maneras, dependiendo de cómo quieras implementar tu estado. Si tu origen de datos es transaccional, puedes elegir que tu topología sea plenamente transaccional, entonces como el "transaction id" es siempre incremental, se puede guardar dentro del value en tu key/value y consultarlo antes de hacer un update, para saber si esa tupla ya se ha procesado antes o no. ¡Pero es que incluso eso ya está encapsulado por Trident! Os recomiendo que si os interesa éste tema echeis un vistazo a esta página: https://github.com/nathanmarz/storm/wiki/Trident-state

Un saludo,

Pere.


Reply all
Reply to author
Forward
0 new messages