HBase
 sql >> Baza danych >  >> NoSQL >> HBase

Instrukcje:korzystanie z interfejsu Apache HBase REST, część 3

Ten poradnik jest trzecim z serii, która bada użycie interfejsu Apache HBase REST. Część 1 obejmowała podstawy HBase REST, niektóre zastrzeżenia Pythona i administrację tabelami. W części 2 pokazano, jak wstawić wiele wierszy jednocześnie przy użyciu XML i JSON. Część 3 poniżej pokaże, jak uzyskać wiele wierszy za pomocą XML i JSON.

Pobieranie wierszy za pomocą XML

Korzystanie z GET czasownik, możesz pobrać pojedynczy wiersz lub grupę wierszy na podstawie ich kluczy wierszy. (Więcej informacji o formacie adresu URL z wieloma wartościami znajdziesz tutaj). W tym miejscu użyjemy prostego symbolu wieloznacznego lub gwiazdki (*), aby uzyskać wszystkie wiersze rozpoczynające się określonym ciągiem. W tym przykładzie możemy załadować każdą linijkę komedii Szekspira słowem „komedia-szekspirowska-*”. Wymaga to również, aby nasze klucze wierszy były ułożone według „AUTHOR-WORK-LINENUMBER”.

Oto kod do pobierania i pracy z danymi wyjściowymi 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'))

Kod zaczynamy od get  wniosek. Ten get  zwróci wszystkie linijki w komediach Szekspira. Te wiersze zostaną zwrócone jako XML z powodu zmiany Accept nagłówek.

Następnie pobieramy XML zwrócony przez żądanie i przekształcamy go w XML DOM. Każdy wiersz z HBase znajduje się w osobnym elemencie wiersza. Użyjemy for pętla, aby przejść przez każdy wiersz.

Każda komórka w wierszu jest osobnym elementem XML. Użyjemy innego for pętla, aby przejść przez wszystkie te komórki. (Ten blok kodu można uprościć, używając XPath do znalezienia poprawnych elementów). Po znalezieniu każdej kolumny wartość jest zapisywana w zmiennej. (Metoda dekodowania została omówiona w części 1 tej serii.) Wszystkie wartości powracające w XML są zakodowane w base64 i muszą zostać zdekodowane przed ich użyciem.

Na koniec klucz wiersza jest pobierany i dekodowany.

Po znalezieniu i zdekodowaniu wszystkich danych możesz zacząć z nich korzystać. Twój kod rozpocznie się po zdekodowaniu wiersza. Pamiętaj, że niektóre z tych zmiennych nie muszą być dekodowane — robię je wszystkie tutaj ze względu na kompletność.

Pobieranie wierszy za pomocą JSON

Praca z JSON jest jak praca z XML:używanie get  czasownik, możesz pobrać pojedynczy wiersz lub grupę wierszy na podstawie ich klucza wiersza.

Oto kod do pobierania i pracy z danymi wyjściowymi 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'])

Kod zaczynamy od get  żądanie, które zwróci wszystkie linijki w komediach Szekspira. Te wiersze powrócą jako JSON z powodu zmiany Accept nagłówek.

Następnie pobieramy JSON zwrócony przez żądanie i przekształcamy go w obiekt JSON. Każdy wiersz z HBase znajduje się w osobnym indeksie w tablicy wierszy. Użyjemy for pętla, aby przejść przez każdy wiersz.

Każda komórka w wierszu jest osobnym indeksem tablicy. Użyjemy innego for pętla, aby przejść przez wszystkie te komórki. Po znalezieniu każdej kolumny wartość jest zapisywana w zmiennej. Wszystkie wartości powracające w formacie JSON są zakodowane w base64 i muszą zostać zdekodowane przed ich użyciem. (Ponownie metoda dekodowania została omówiona w części 1 tej serii). Zwróć uwagę, że wartości powracają we wpisie ze znakiem dolara ($).

Na koniec klucz wiersza jest pobierany i dekodowany.

Po znalezieniu i zdekodowaniu wszystkich danych możesz zacząć z nich korzystać.

Korzystanie z curl

Jak pokazano w dokumentacji interfejsu REST, można użyć curl do wyprowadzenia XML lub JSON bezpośrednio do konsoli. Na przykład możesz zrobić to samo, co właśnie zrobiliśmy za pomocą curl. Polecenie to:

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

To polecenie dałoby wynik XML. Aby uzyskać dane wyjściowe JSON, polecenie to:

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

Dzięki takim poleceniom możesz szybko zobaczyć, co wraca lub jak wyglądają dane. Możesz użyć curl, aby zobaczyć kod stanu wywołania REST za pomocą:

[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

Wniosek

Interfejs HBase REST to dobry sposób na korzystanie z HBase, jeśli nie chcesz używać Javy. Oferuje znajomy interfejs REST, który jest wbudowany w wiele języków, a także znany format danych.

Mamy nadzieję, że przykłady kodu i objaśnienia w tej serii pozwolą Ci zaoszczędzić dużo googlowania podczas rozpoczynania projektu RESTful HBase.

Jesse Anderson jest instruktorem na Uniwersytecie Cloudera.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. 20 Znacząca różnica między Hadoop 2.x a Hadoop 3.x

  2. How-to:Użyj HBase Bulk Loading i dlaczego

  3. Regiony HBase łączą się

  4. Architektura Apache Hadoop — HDFS, YARN i MapReduce

  5. Instrukcje:indeksowanie danych z S3 za pomocą centrum danych CDP