2012-04-03 7 views
5

Estoy usando el controlador Hive JDBC para realizar una consulta similar a sql en mi almacén de datos HDFS. He estado tratando de usar c3p0 para manejar la agrupación de conexiones. No estoy tan seguro de que sea el enfoque correcto ya que la consulta de Hive puede llevar bastante tiempo, lo que significa que la conexión se mantendrá durante bastante tiempo y no se devolverá al grupo, estoy luchando por encontrar un número de configuración correcto para el número máximo de conexiones en configuración c3p0 también.cuál es la mejor práctica para agrupar las conexiones Hive JDBC

¿Existe alguna mejor práctica para agrupar la conexión jdbc de la colmena? c3p0? DBCP?

¿Qué hay de MAX_POOL_SIZE? ¿Debería ser más grande que la configuración normal para RDB?

Respuesta

4

Oh genial, entonces la pregunta en el hilo que mencionas fue realmente hecha por mí hace mucho tiempo :) Sería interesante ver cómo usar eso en tu caso de uso.

Pero déjame decirte que Hive lanza trabajos de Hadoop cuando sea necesario dependiendo de tu consulta. Por lo tanto, si desea ejecutar varias consultas, que creo que es lo que quiere hacer aquí, debe usar un programador de tareas que pueda ejecutar varios trabajos al mismo tiempo. Hadoop usa de manera predeterminada el planificador de primero en entrar, primero en salir (FIFO), extrayendo trabajos de una cola de trabajos. Por lo tanto, me gustaría cambiar a Programador justo o Programador de capacidad.

La idea central detrás del planificador de reparto equitativo era asignar recursos a puestos de trabajo de modo que, en promedio, con el tiempo, cada trabajo obtenga una parte igual de los recursos disponibles.

El planificador de capacidad comparte algunos de los principios del programador justo pero también tiene diferencias claras. Primero, la programación de capacidad se definió para grandes clusters, que pueden tener múltiples consumidores independientes y aplicaciones de destino. En la programación de capacidad, en lugar de pools, se crean varias colas, cada una con un número configurable de mapas y ranuras de reducción. A cada cola también se le asigna una capacidad garantizada (donde la capacidad total del clúster es la suma de la capacidad de cada cola). En segundo lugar, la capacidad de priorizar trabajos dentro de una cola. Por último, es la presencia de controles de acceso estrictos en las colas.

+0

Gracias por la información. Todavía estoy un poco confundido aquí, si estoy agrupando 10 conexiones JDBC con Hive, ¿significa eso que abrí 10 trabajos de colmenas en paralelo? ¿Qué le sucede una vez que el trabajo está hecho? esa conexión jdbc se libera de nuevo a la agrupación? ¿La próxima vez una nueva consulta tomará una conexión jdbc y tendrá un nuevo trabajo de colmena? ¿Qué beneficio obtengo luego usando la agrupación de conexiones jdbc aquí, solo la creación/eliminación de las conexiones jdbc? – Shengjie

+0

Lo que he entendido hasta ahora es que puede abrir múltiples conexiones a MySql o cualquier DBMS utilizado por Hive como metastore pero, al final, cuando lanza consultas complejas, colmena creará a su vez trabajos MapReduce para recuperar el resultado del almacén de Hive, que en su caso está en HDFS. –

+0

Continuando ... La agrupación que utilicé fue como hilos. Reservé una conexión de 10 hilos para colgar un servidor, dependiendo de la capacidad de mi clúster. Una consulta dice, 'seleccionar nombre del empleado' consumiría un hilo. Otra consulta de este tipo, diría, ocupa un hilo más y así sucesivamente. Cuando finaliza una consulta, devuelve (checkin) el hilo, asociado con esa consulta, al grupo de hilos. –

Cuestiones relacionadas