join dictionary hive bucket

join - Hive 0.13 mapa de acceso compartido



dictionary bucket (1)

Pude hacer que esto funcione eventualmente. Parece que tuvo algo que ver con hive.mapjoin.bucket.cache.size .

Intenta configurar esto en un número más alto que el predeterminado (10 o 100, creo). Mi trabajo funciona bien de la siguiente manera:

SET hive.optimize.bucketmapjoin=true; set hive.exec.reducers.max = 30000; set hive.mapjoin.bucket.cache.size=100000000; SELECT /*+MAPJOIN(EV)*/ EV.advertiser_id, EV.pixel_id, RDB.segment_id FROM tbl_a EV JOIN tbl_b RDB ON EV.mm_uuid = RDB.mm_uuid WHERE EV.days = 90 AND RDB.days = 90;

Nota: la sugerencia mapjoin es necesaria también.

¿Alguien de la historia ha realizado con éxito una combinación de mapas con divisiones en Hive 13? Existe documentación limitada sobre BMJ ( http://www.openkb.info/2014/11/understanding-hive-joins-in-explain.html#.VVuZZpNViko y https://cwiki.apache.org/confluence/download/ archivos adjuntos / 27362054 / Hive% 2BSummit% 2B2011-join.pdf ). Parecen maravillosos, pero no puedo hacer que funcionen.

Si entiendo correctamente, debo comenzar mi comando con los siguientes parámetros:

SET hive.optimize.bucketmapjoin=true;

Esto hará que Hive convierta automáticamente mi antigua y lenta combinación de perezoso, súper lento y regular en una combinación ágil (esbelta e incluso?) De rápido acabado y en el mapa. Tal vez me faltan algunos parámetros aquí?

Mis tablas están ambas incluidas en el mismo código. Ambos están incluidos en 1024 cubos (¿podrían ser demasiados?). La mesa pequeña tiene un tamaño de cuchara de alrededor de 15 MB y la mesa grande tiene un tamaño de cuchara promedio de aproximadamente 10 GB.

Así es como se ve mi comando:

SET hive.optimize.bucketmapjoin=true; SELECT EV.advertiser_id, EV.pixel_id, RDB.segment_id FROM rakuten_segment_index2_bucketed_event_logs_ddp EV JOIN rakuten_sir_bucketed_rdb RDB ON EV.mm_uuid = RDB.mm_uuid WHERE EV.days = 90 AND RDB.days = 90;

Este comando da como resultado una unión lenta y constante del reductor. Funciona bien, pero muy lentamente.

Una cosa a tener en cuenta es que estas tablas están divididas. Solo estoy interesado en unirme a estas tablas donde el valor de la partición (días) = ​​90. ¿Podría el hecho de que estas tablas estén particionadas arruinar la unión de mapa con bucket?

También intenté establecer una sugerencia de unión de mapa explícitamente con /*+MAPJOIN(EV)*/ . Esto fuerza un mapjoin normal, no un mapjoin con bucket. Hive intenta cargar toda la tabla pequeña (er) en un hashmap y rápidamente se queda sin memoria.