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.