HBase
 sql >> Database >  >> NoSQL >> HBase

Procedura:utilizzare l'interfaccia REST di Apache HBase, parte 3

Questo how-to è il terzo di una serie che esplora l'uso dell'interfaccia REST di Apache HBase. La parte 1 ha trattato i fondamenti di HBase REST, alcuni avvertimenti su Python e l'amministrazione delle tabelle. La parte 2 ti ha mostrato come inserire più righe contemporaneamente utilizzando XML e JSON. La parte 3 di seguito mostrerà come ottenere più righe utilizzando XML e JSON.

Ottenere righe con XML

Usando un GET verbo, puoi recuperare una singola riga o un gruppo di righe in base alle loro chiavi di riga. (Puoi leggere ulteriori informazioni sul formato URL con valori multipli qui.) Qui useremo il carattere jolly semplice o l'asterisco (*) per ottenere tutte le righe che iniziano con una stringa specifica. In questo esempio, possiamo caricare ogni riga delle commedie di Shakespeare con "shakespeare-comdies-*". Ciò richiede anche che le nostre chiavi di riga siano disposte da "AUTHOR-WORK-LINENUMBER".

Ecco il codice per ottenere e lavorare con l'output 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'))

Iniziamo il codice con un get richiesta. Questo get restituirà tutti i versi nelle commedie di Shakespeare. Queste righe torneranno come XML a causa della modifica a Accept intestazione.

Quindi prendiamo l'XML restituito dalla richiesta e lo trasformiamo in un DOM XML. Ogni riga di HBase si trova in un elemento riga separato. Useremo un for loop per scorrere ogni riga.

Ogni cella nella riga è un elemento XML separato. Useremo un altro for ciclo per passare attraverso tutte queste celle. (Questo blocco di codice potrebbe essere semplificato utilizzando XPath per trovare gli elementi corretti.) Quando ogni colonna viene trovata, il valore viene salvato in una variabile. (Il metodo di decodifica è discusso nella Parte 1 di questa serie.) Tutti i valori che ritornano in XML sono codificati in base64 e devono essere decodificati prima di usarli.

Infine, la chiave di riga viene recuperata e decodificata.

Una volta trovati e decodificati tutti i dati, puoi iniziare a usarli. Il tuo codice inizierebbe dopo aver decodificato la riga. Tieni presente che alcune di queste variabili non hanno bisogno di essere decodificate:le sto facendo tutte qui per completezza.

Ottenere righe con JSON

Lavorare con JSON è proprio come lavorare con XML:usare un get  verbo, puoi recuperare una singola riga o un gruppo di righe in base alla loro chiave di riga.

Ecco il codice per ottenere e lavorare con l'output 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'])

Iniziamo il codice con un get richiesta che restituirà tutti i versi nelle commedie di Shakespeare. Queste righe torneranno come JSON a causa della modifica a Accept intestazione.

Quindi prendiamo il JSON restituito dalla richiesta e lo trasformiamo in un oggetto JSON. Ogni riga di HBase si trova in un indice separato nell'array di righe. Useremo un for loop per scorrere ogni riga.

Ogni cella nella riga è un indice di matrice separato. Useremo un altro for ciclo per passare attraverso tutte queste celle. Quando ogni colonna viene trovata, il valore viene salvato in una variabile. Tutti i valori che ritornano in JSON sono codificati in base64 e devono essere decodificati prima di usarli. (Anche in questo caso, il metodo di decodifica è discusso nella Parte 1 di questa serie.) Tieni presente che i valori tornano nella voce del simbolo del dollaro ($).

Infine, la chiave di riga viene recuperata e decodificata.

Una volta trovati e decodificati tutti i dati, puoi iniziare a utilizzarli.

Uso dell'arricciatura

Come mostrato nella documentazione dell'interfaccia REST, puoi usare curl per generare XML o JSON direttamente nella console. Ad esempio, potresti ottenere lo stesso risultato che abbiamo appena fatto usando curl. Il comando è:

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

Quel comando ti darebbe l'output XML. Per ottenere l'output JSON, il comando è:

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

Con comandi come questi, puoi vedere rapidamente cosa sta tornando o come appaiono i dati. Puoi usare curl per vedere il codice di stato di una chiamata 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

Conclusione

L'interfaccia HBase REST è un buon modo per utilizzare HBase se non si desidera utilizzare Java. Ti offre un'interfaccia REST familiare integrata in molte lingue e un formato dati familiare.

Si spera che gli esempi di codice e le spiegazioni di questa serie ti facciano risparmiare un sacco di ricerche su Google quando inizi il tuo progetto RESTful HBase.

Jesse Anderson è un istruttore presso la Cloudera University.