Cómo realizar el dimensionamiento de nuestra infraestructura para la creación de un lago de datos utilizando Hadoop

En Agnostic muchas veces los clientes nos preguntan cómo pueden calcular la cantidad de recursos de infraestructura físicos y/o virtuales que van a necesitar para armar un clúster de Hadoop en un entorno productivo siguiendo las mejores prácticas del mercado y los vendors.

cmo-realizar-el-dimensionamiento-de-nuestra-infraestructura-para-la-creacin-de-un-lago-de-datos-utilizando-hadoop

En Agnostic muchas veces los clientes nos preguntan cómo pueden calcular la cantidad de recursos de infraestructura físicos y/o virtuales que van a necesitar para armar un clúster de Hadoop en un entorno productivo siguiendo las mejores prácticas del mercado y los vendors.
A continuación, les dejamos una fórmula de cómo calcular el tamaño de almacenamiento y sugerencias de cuanta memoria RAM se necesitará para construir un nuevo clúster de Hadoop.


H = C * R * S / (1-i) * 120%


Explicación detallada:
  • C = relación de compresión, dependerá del tipo de compresión utilizada (LZOP, Snappy, etc.) y el tamaño de los datos. Cuando no se usa compresión C = 1
  • R = factor de replicación, por lo general es de 3 en un clúster de producción
  • S = El tamaño inicial de datos se pretende ingestar hacia Hadoop. Esto podría ser una combinación de datos históricos y datos incrementales. (asimismo debemos considerar la tasa de crecimiento de los datos iniciales, al menos para los próximos 3 a 6 meses, partiendo de una premisa de que actualmente tenemos 500 TB de datos, y sabemos que la tasa de crecimiento seria de 50 TB en los próximos tres meses, y los outputs generados por los Jobs de MapReduce pueden crear al menos el 10% de los datos iniciales, luego tenemos que considerar 600 TB como el tamaño de datos inicial)
  • i = factor de datos intermedios (por lo general es 1/3 o1/4), es el espacio de trabajo intermedio de Hadoop dedicado a almacenar los resultados intermedios de las tareas mapeo (Map Task), o cualquier almacenamiento temporal utilizando en Pig o Hive. Esta es una pauta común para muchas aplicaciones de producción, incluso Cloudera de quien somos partners ha recomendado un 25% para resultados intermedios
  • 120% — o 1.2 veces el tamaño total, esto se debe a que tenemos que dejar espacio para el sistema operativo que corre por debajo de HDFS. Para HDFS (se recomiendo usar ext4 por lo general, que se vuelve muy, muy infeliz a mucho más del 80% de relleno. Es decir. Por ejemplo, si tiene un tamaño total de clúster de 1200 TB, pero se recomienda usar solo hasta 1000 TB

Para que no quedarnos solamente en la teoría a continuación realizamos un ejercicio más tangible:
Si no utilizamos ningún tipo de compresión, consideramos simplemente 

C = 1, un factor de replicación de 3 y un factor intermedio de 0,25 = ¼
H = 1 * 3 * S / (1–1 / 4) = 3 * S / (3/4) = 4 * S


Basándonos en las suposiciones anteriores, se estima que el almacenamiento de Hadoop es 4 veces el tamaño del tamaño de datos inicial. Utilizando la siguiente fórmula para calcular el número de nodos de datos:


Número de nodos de datos (n):

n = H / d = c * r * S / (1-i) / d


Donde d = espacio en disco disponible por nodo, no nos olvidemos que para realizar una implementación exitosa a parte de tener la memoria RAM necesaria, no nos podemos olvidar el ancho de banda de IOPS (benchmarking), la topología, velocidad, latencia de red y las configuraciones de CPU de cada nodo.


Y la memoria RAM, ¿cómo la calculamos?


Sabemos que necesitamos tener suficiente memoria RAM para que nuestros jobs se ejecuten de una manera eficiente, así como con espacio en el búfer para transferir datos a través del MapReduce y Spark.


Una memoria pequeña significa que no podemos ejecutar muchos jobs en paralelo (mappers), ya que la falta de recursos volvería muy lento el procesamiento de los mismos. La cantidad de mappers y reducers se verá limitada por la cantidad de recursos I/O (disco) y memoria que dichos jobs consumen en cada nodos.


Un sugerencia de baseline sería arrancar con 64 GB RAM, pero definitivamente hay aplicaciones en las que 128 GB RAM mejorarían la velocidad de procesamiento. Moverse por encima de 128 GB es poco probable que veamos una mejora en la velocidad y la performance para la mayoría de los equipos.


Por último, la velocidad de la red es moderadamente importante durante las operaciones normales (la latencia entre nodos debe ser menor a 5 ms).