2008-09-07 20 views
19

Estoy trabajando en un proyecto con un amigo que utilizará Hbase para almacenar sus datos. ¿Hay algún buen ejemplo de consulta? Parece que estoy escribiendo una tonelada de código Java para iterar a través de listas de RowResult cuando, en SQL land, podía escribir una consulta simple. ¿Me estoy perdiendo de algo? ¿O Hbase está perdiendo algo?Hbase/Hadoop Query Help

Respuesta

20

Creo que usted, como muchos de nosotros, está cometiendo el error de tratar bigtable y HBase como cualquier otro RDBMS cuando en realidad es un modelo de almacenamiento orientado a columnas destinado a almacenar y recuperar grandes conjuntos de datos dispersos. Esto significa, idealmente, almacenar relaciones de muchos a uno dentro de una sola fila, por ejemplo. Sus consultas deben devolver muy pocas filas pero contienen (potencialmente) muchos puntos de datos.

Quizás si nos contó más sobre lo que estaba tratando de almacenar, podríamos ayudarle a diseñar su esquema para que coincida con la forma de hacer bigtable/HBase.

Para un buen resumen de lo que HBase hace de manera diferente a un RDBMS "tradicional", consulte este impresionante artículo: Matching Impedance: When to use HBase de Bryan Duxbury.

+2

El enlace de Duxbury está roto, pero no podría encontrarlo en otro lado. : - \ –

+0

Artículo de Mirror of Duxbury: http://blog.csdn.net/arthurbryant/article/details/6643933 (disponible a partir de febrero de 2014) –

1

Miré a Hadoop y Hbase y como Sean dijo, pronto me di cuenta de que no me daba lo que realmente quería, que era una base de datos en clúster compatible con JDBC.

Creo que podría estar mejor usando algo como C-JDBC o que parece más como lo que yo estaba buscando. (Personalmente, no he llegado más lejos con ninguno de estos que no sea la lectura de la documentación, así que no puedo decir cuál de ellos es bueno, si hay alguno.)

0

Gracias por la respuesta Sean, y perdón por mi retraso respuesta. A menudo cometo el error de tratar HBase como un RDBMS. ¡Tan a menudo de hecho que he tenido que volver a escribir el código debido a eso! Es tan difícil de desaprender.

Ahora tenemos solo 4 tablas. Que, en este caso, es muy poco teniendo en cuenta mi origen. Solo esperaba usar alguna funcionalidad de RDBMS mientras me pegaba principalmente al modelo de almacenamiento orientado a columnas.

1

Recomiendo echar un vistazo al proyecto Apache Hive, que es similar a HBase (en el sentido de que es una base de datos distribuida) que implementa un lenguaje SQL-esque.

0

¡Me alegra oír que ustedes están usando HBase! No soy un experto por ningún lado de la imaginación, pero aquí hay un par de cosas que podrían ayudar.

  • HBase se basa en/inspirado en BigTable, que pasa a ser expuesta por AppEngine como su API dB, por lo browsing their docs debería ser de gran ayuda si usted está trabajando en una aplicación web.

  • Si no está trabajando en una aplicación web, el tipo de iteración que está describiendo generalmente se maneja a través de map/reduce (no emita los valores que no desea). Saltarse valores usando iteradores garantiza virtualmente que su aplicación tendrá cuellos de botella con conjuntos de datos del tamaño de HBase. Si descubre que todavía está pensando en SQL, consulte el tutorial de cerdos de cloudera y el tutorial de colmenas.

  • Básicamente toda la diferencia mental de HBase/SQL (para no-webapps) se reduce a "Enviar el cálculo a los datos, no envíe los datos al cálculo" - si tiene esto en cuenta mientras 're codificación que va a hacer muy bien :-)

Saludos,

David

2

Si desea acceder a HBase utilizando un lenguaje de consulta y un controlador JDBC es posible. Paul Ambrose ha lanzado una biblioteca llamada HBQL en hbql.com que lo ayudará a hacer esto. Lo he usado para un par de proyectos y funciona bien. Obviamente no tendrá acceso a SQL completo, pero lo hace un poco más fácil de usar.