hive - ¿Cómo podemos decidir el total no? de cubos para una mesa de colmena
numbers formula (2)
Soy un poco nuevo para hadoop. Según mi conocimiento, los cubos son fijos no. de las particiones en la tabla de la colmena y la colmena utiliza el no. de reductores igual que el total no. de cubos definidos al crear la tabla. Entonces, ¿alguien puede decirme cómo calcular el total no. de cubos en una mesa de colmena. ¿Hay alguna fórmula para calcular la cantidad total de cubos?
Del enlace de documentación
En general, el número de intervalo está determinado por la expresión función_huso (división_función) mod num_buckets. (Hay un ''0x7FFFFFFF allí también, pero eso no es tan importante). La función hash_ depende del tipo de la columna de clasificación. Para un int, es fácil, hash_int (i) == i. Por ejemplo, si user_id fuera un int, y hubiera 10 buckets, esperaríamos que todos los user_id''s que terminan en 0 estén en el bucket 1, todos los user_id que terminan en un 1 estén en el bucket 2, etc. Para otros tipos de datos, es un poco complicado. En particular, el hash de BIGINT no es lo mismo que BIGINT. Y el hash de una cadena o un tipo de datos complejo será un número que se deriva del valor, pero no es algo humanamente reconocible. Por ejemplo, si user_id fuera STRING, entonces user_id''s en el segmento 1 probablemente no terminaría en 0. En general, distribuir filas basadas en el hash le dará una distribución uniforme en los segmentos.
Si desea saber cuántos cubos debe elegir en su cláusula CLUSTER BY
, creo que es bueno elegir un número que resulte en cubos que están en o justo debajo de su tamaño de bloque HDFS.
Esto debería ayudar a evitar que HDFS asigne memoria a archivos que en su mayoría están vacíos.
También elija un número que sea una potencia de dos.
Puede verificar su tamaño de bloque HDFS con :
hdfs getconf -confKey dfs.blocksize