sql >> Databasteknik >  >> NoSQL >> HBase

Så här gör du:Använd Apache HBase REST-gränssnitt, del 3

Den här instruktionen är den tredje i en serie som utforskar användningen av Apache HBase REST-gränssnittet. Del 1 täckte HBase REST-grunderna, några Python-förbehåll och tabelladministration. Del 2 visade dig hur du infogar flera rader samtidigt med XML och JSON. Del 3 nedan visar hur man får flera rader med XML och JSON.

Hämta rader med XML

Använda en GET verb, kan du hämta en enstaka rad eller en grupp rader baserat på deras radnycklar. (Du kan läsa mer om URL-formatet med flera värden här.) Här kommer vi att använda det enkla jokertecken eller asterisk (*) för att få alla rader som börjar med en specifik sträng. I det här exemplet kan vi ladda varje rad av Shakespeares komedier med "shakespeare-komedier-*". Detta kräver också att våra radnycklar läggs ut efter "AUTHOR-WORK-LINENUMBER".

Här är koden för att hämta och arbeta med XML-utdata:

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 börjar koden med en get begäran. Denna get kommer att returnera alla rader i Shakespeares komedier. Dessa rader kommer tillbaka som XML på grund av ändringen av Accept rubrik.

Sedan tar vi den XML som returneras av begäran och gör om den till en XML DOM. Varje rad från HBase finns i ett separat radelement. Vi använder en for slinga för att gå igenom varje rad.

Varje cell i raden är ett separat XML-element. Vi använder en annan for loop för att gå igenom alla dessa celler. (Detta kodblock kan göras enklare genom att använda XPath för att hitta rätt element.) När varje kolumn hittas sparas värdet till en variabel. (Avkodningsmetoden diskuteras i del 1 denna serie.) Alla värden som kommer tillbaka i XML är base64-kodade och måste avkodas innan de används.

Slutligen hämtas och avkodas radnyckeln.

När all data har hittats och avkodats kan du börja använda den. Din kod skulle starta efter avkodning av raden. Tänk på att vissa av dessa variabler inte behöver avkodas – jag gör alla här för fullständighetens skull.

Hämta rader med JSON

Att arbeta med JSON är precis som att arbeta med XML:Att använda en get  verb, kan du hämta en enstaka rad eller en grupp rader baserat på deras radnyckel.

Här är koden för att hämta och arbeta med JSON-utgången:

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 börjar koden med en get begäran som kommer att returnera alla rader i Shakespeares komedier. Dessa rader kommer tillbaka som JSON på grund av ändringen av Accept rubrik.

Sedan tar vi JSON som returneras av begäran och omvandlar den till ett JSON-objekt. Varje rad från HBase finns i ett separat index i radmatrisen. Vi använder en for slinga för att gå igenom varje rad.

Varje cell i raden är ett separat arrayindex. Vi använder en annan for loop för att gå igenom alla dessa celler. När varje kolumn hittas sparas värdet till en variabel. Alla värden som kommer tillbaka i JSON är base64-kodade och måste avkodas innan de används. (Återigen, avkodningsmetoden diskuteras i del 1 den här serien.) Observera att värdena kommer tillbaka i posten för dollartecken ($).

Slutligen hämtas och avkodas radnyckeln.

När all data har hittats och avkodats kan du börja använda den.

Använda curl

Som visas i REST-gränssnittsdokumentationen kan du använda curl för att mata ut XML eller JSON direkt till konsolen. Du kan till exempel göra samma sak som vi precis gjorde med curl. Kommandot är:

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

Det kommandot skulle ge dig XML-utdata. För att få JSON-utdata är kommandot:

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

Med kommandon som dessa kan du snabbt se vad som kommer tillbaka eller hur data ser ut. Du kan använda curl för att se statuskoden för ett REST-samtal 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

Slutsats

HBase REST-gränssnittet är ett bra sätt att använda HBase om du inte vill använda Java. Den erbjuder dig ett välbekant REST-gränssnitt som är inbyggt i många språk samt ett välbekant dataformat.

Förhoppningsvis kommer kodexemplen och förklaringarna i den här serien att spara dig mycket googling när du påbörjar ditt RESTful HBase-projekt.

Jesse Anderson är instruktör vid Cloudera University.


  1. Hur skulle Redis få veta om det måste returnera cachad data eller färsk data från DB

  2. redis slav synkroniseras inte med master

  3. mongodb count antal distinkta värden per fält/nyckel

  4. Geografiskt distribuerade MongoDB Replica Sets för 100 % drifttid