sql >> Base de Datos >  >> NoSQL >> HBase

Procedimiento:utilizar la interfaz REST de Apache HBase, parte 3

Este tutorial es el tercero de una serie que explora el uso de la interfaz Apache HBase REST. La parte 1 cubrió los fundamentos de HBase REST, algunas advertencias de Python y la administración de tablas. La Parte 2 le mostró cómo insertar varias filas simultáneamente usando XML y JSON. La Parte 3 a continuación mostrará cómo obtener varias filas usando XML y JSON.

Obtención de filas con XML

Usando un GET verbo, puede recuperar una sola fila o un grupo de filas en función de sus claves de fila. (Puede leer más sobre el formato de URL de valor múltiple aquí). Aquí vamos a usar el carácter comodín simple o el asterisco (*) para obtener todas las filas que comienzan con una cadena específica. En este ejemplo, podemos cargar cada línea de las comedias de Shakespeare con "shakespeare-comedias-*". Esto también requiere que nuestras claves de fila estén distribuidas por "AUTHOR-WORK-LINENUMBER".

Aquí está el código para obtener y trabajar con la salida XML:

request = requests.get(baseurl + "/" + tablename + "/shakespeare-comedies-*", headers={"Accept" : "text/xml"})

root = fromstring(request.text)

# Go through every row passed back
for row in root:
     message = ''
     linenumber = 0
     username = ''
    
     # Go through every cell in the row
     for cell in row:
          columnname = base64.b64decode(cell.get('column'))

          if cell.text == None:
               continue
    
          if columnname == cfname + ":" + messagecolumn:
               message = base64.b64decode(cell.text)
          elif columnname == cfname + ":" + linenumbercolumn:
               linenumber = decode(cell.text)
          elif columnname == cfname + ":" + usernamecolumn:
               username = base64.b64decode(cell.text)

     rowKey = base64.b64decode(row.get('key'))

Comenzamos el código con un get petición. Este get devolverá todas las líneas en las comedias de Shakespeare. Estas filas volverán a ser XML debido al cambio en Accept encabezado.

Luego tomamos el XML devuelto por la solicitud y lo convertimos en un DOM XML. Cada fila de HBase está en un elemento de fila separado. Usaremos un for bucle para pasar por cada fila.

Cada celda de la fila es un elemento XML independiente. Usaremos otro for bucle para pasar por todas estas celdas. (Este bloque de código podría simplificarse usando XPath para encontrar los elementos correctos). A medida que se encuentra cada columna, el valor se guarda en una variable. (El método de decodificación se analiza en la Parte 1 de esta serie). Todos los valores que regresan en XML están codificados en base64 y deben decodificarse antes de usarlos.

Finalmente, la clave de la fila se recupera y se decodifica.

Una vez que se encuentran y decodifican todos los datos, puede comenzar a usarlos. Su código comenzaría después de decodificar la fila. Tenga en cuenta que algunas de estas variables no necesitan ser decodificadas; las estoy descifrando todas aquí para completarlas.

Obtención de filas con JSON

Trabajar con JSON es como trabajar con XML:usar un get  verbo, puede recuperar una sola fila o un grupo de filas en función de su clave de fila.

Aquí está el código para obtener y trabajar con la salida JSON:

request = requests.get(baseurl + "/" + tablename + "/shakespeare-comedies-*", headers={"Accept" : "application/json"})

bleats = json.loads(request.text)

for row in bleats['Row']:
     message = ''
     lineNumber = 0
     username = ''

     for cell in row['Cell']:
          columnname = base64.b64decode(cell['column'])
          value = cell['$']
         
          if value == None:
               continue

          if columnname == cfname + ":" + messagecolumn:
               message = base64.b64decode(value)
          elif columnname == cfname + ":" + linenumbercolumn:
               lineNumber = decode(str(value))
          elif columnname == cfname + ":" + usernamecolumn:
               username = base64.b64decode(value)

     rowKey = base64.b64decode(row['key'])

Comenzamos el código con un get solicitud que devolverá todas las líneas en las comedias de Shakespeare. Estas filas volverán como JSON debido al cambio en Accept encabezado.

Luego tomamos el JSON devuelto por la solicitud y lo convertimos en un objeto JSON. Cada fila de HBase está en un índice separado en la matriz de filas. Usaremos un for bucle para pasar por cada fila.

Cada celda de la fila es un índice de matriz independiente. Usaremos otro for bucle para pasar por todas estas celdas. A medida que se encuentra cada columna, el valor se guarda en una variable. Todos los valores que regresan en JSON están codificados en base64 y deben decodificarse antes de usarlos. (Nuevamente, el método de decodificación se analiza en la Parte 1 de esta serie). Tenga en cuenta que los valores regresan en la entrada del signo de dólar ($).

Finalmente, la clave de la fila se recupera y se decodifica.

Una vez que se encuentran y decodifican todos los datos, puede comenzar a usarlos.

Usando rizo

Como se muestra en la documentación de la interfaz REST, puede usar curl para enviar XML o JSON directamente a la consola. Por ejemplo, podría hacer lo mismo que acabamos de hacer usando curl. El comando es:

curl -H "Accept: text/xml" http://localhost:8070/tablename/shakespeare-comedies-*

Ese comando le daría la salida XML. Para obtener la salida JSON, el comando es:

curl -H "Accept: application/json" http://localhost:8070/tablename/shakespeare-comedies-*

Con comandos como estos, puede ver rápidamente lo que regresa o cómo se ven los datos. Puede usar curl para ver el código de estado de una llamada REST con:

[user@localhost HBaseREST]$ curl -I -H "Accept: text/xml" http://localhost:8070/messagestable/shakespeare-comedies-*
HTTP/1.1 200 OK
Content-Length: 0
Content-Type: text/xml

Conclusión

La interfaz HBase REST es una buena manera de usar HBase si no desea usar Java. Le ofrece una interfaz REST familiar que está integrada en muchos idiomas, así como un formato de datos familiar.

Con suerte, los ejemplos de código y las explicaciones de esta serie le ahorrarán mucho buscar en Google cuando se embarque en su proyecto RESTful HBase.

Jesse Anderson es instructor en la Universidad de Cloudera.