Denne vejledning er den tredje i en serie, der udforsker brugen af Apache HBase REST-grænsefladen. Del 1 dækkede HBase REST fundamentals, nogle Python advarsler og tabeladministration. Del 2 viste dig, hvordan du indsætter flere rækker samtidigt ved hjælp af XML og JSON. Del 3 nedenfor viser, hvordan man får flere rækker ved hjælp af XML og JSON.
Få rækker med XML
Brug af en GET
verbum, kan du hente en enkelt række eller en gruppe af rækker baseret på deres rækketaster. (Du kan læse mere om URL-formatet med flere værdier her.) Her skal vi bruge det simple jokertegn eller stjerne (*) til at få alle rækker, der starter med en bestemt streng. I dette eksempel kan vi indlæse hver linje af Shakespeares komedier med "shakespeare-komedier-*". Dette kræver også, at vores rækketast(er) er lagt ud efter "AUTHOR-WORK-LINENUMBER".
Her er koden til at få og arbejde med XML-outputtet:
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'))
Vi starter koden med en get
anmodning. Denne get
vil returnere alle linjer i Shakespeares komedier. Disse rækker kommer tilbage som XML på grund af ændringen af Accept
overskrift.
Så tager vi den XML, der returneres af anmodningen, og omdanner den til en XML DOM. Hver række fra HBase er i et separat rækkeelement. Vi bruger en for
løkke for at gå gennem hver række.
Hver celle i rækken er et separat XML-element. Vi bruger en anden for
løkke for at gå gennem alle disse celler. (Denne kodeblok kunne gøres enklere ved at bruge XPath til at finde de korrekte elementer.) Efterhånden som hver kolonne er fundet, gemmes værdien til en variabel. (Afkodningsmetoden er diskuteret i del 1 af denne serie.) Alle de værdier, der kommer tilbage i XML, er base64-kodede og skal afkodes, før de bruges.
Til sidst hentes og afkodes rækketasten.
Når alle data er fundet og afkodet, kan du begynde at bruge dem. Din kode vil starte efter afkodning af rækken. Husk, at nogle af disse variabler ikke behøver at blive afkodet – jeg laver dem alle her for fuldstændighedens skyld.
Få rækker med JSON
At arbejde med JSON er ligesom at arbejde med XML:Brug af en get
verbum, kan du hente en enkelt række eller en gruppe af rækker baseret på deres rækketast.
Her er koden til at få og arbejde med JSON-output:
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'])
Vi starter koden med en get
anmodning, der vil returnere alle linjer i Shakespeares komedier. Disse rækker kommer tilbage som JSON på grund af ændringen af Accept
overskrift.
Så tager vi den JSON, der returneres af anmodningen, og gør den til et JSON-objekt. Hver række fra HBase er i et separat indeks i rækkearrayet. Vi bruger en for
løkke for at gå gennem hver række.
Hver celle i rækken er et separat matrixindeks. Vi bruger en anden for
løkke for at gå gennem alle disse celler. Efterhånden som hver kolonne er fundet, gemmes værdien til en variabel. Alle de værdier, der kommer tilbage i JSON, er base64-kodede og skal afkodes, før de bruges. (Igen, afkodningsmetoden diskuteres i Del 1 denne serie.) Bemærk, at værdierne kommer tilbage i dollartegnet ($).
Til sidst hentes og afkodes rækketasten.
Når alle data er fundet og afkodet, kan du begynde at bruge dem.
Brug af curl
Som vist i REST-grænsefladedokumentationen kan du bruge curl til at udlæse XML eller JSON direkte til konsollen. For eksempel kan du gøre det samme som vi lige gjorde ved at bruge curl. Kommandoen er:
curl -H "Accept: text/xml" http://localhost:8070/tablename/shakespeare-comedies-*
Den kommando ville give dig XML-outputtet. For at få JSON-outputtet er kommandoen:
curl -H "Accept: application/json" http://localhost:8070/tablename/shakespeare-comedies-*
Med kommandoer som disse kan du hurtigt se, hvad der kommer tilbage, eller hvordan dataene ser ud. Du kan bruge curl til at se statuskoden for et REST-opkald med:
[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
Konklusion
HBase REST-grænsefladen er en god måde at bruge HBase på, hvis du ikke ønsker at bruge Java. Den tilbyder dig en velkendt REST-grænseflade, der er indbygget i mange sprog, samt et velkendt dataformat.
Forhåbentlig vil kodeeksemplerne og forklaringerne i denne serie spare dig for en masse Googling, når du går i gang med dit RESTful HBase-projekt.
Jesse Anderson er instruktør fra Cloudera University.