Tento návod je třetí v řadě, která zkoumá použití rozhraní Apache HBase REST. Část 1 se zabývala základy HBase REST, některými výhradami Pythonu a správou tabulek. Část 2 ukázala, jak vložit více řádků současně pomocí XML a JSON. Část 3 níže ukáže, jak získat více řádků pomocí XML a JSON.
Získání řádků pomocí XML
Pomocí GET
sloveso, můžete načíst jeden řádek nebo skupinu řádků na základě jejich klíčů řádků. (Další informace o formátu adresy URL s více hodnotami si můžete přečíst zde.) Zde použijeme jednoduchý zástupný znak nebo hvězdičku (*), abychom získali všechny řádky, které začínají konkrétním řetězcem. V tomto příkladu můžeme načíst každý řádek Shakespearových komedií „shakespearovské komedie-*“. To také vyžaduje, aby naše klíče řádku byly uspořádány podle „AUTHOR-WORK-LINENUMBER“.
Zde je kód pro získání a práci s výstupem 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'))
Začneme kódem get
žádost. Toto get
vrátí všechny řádky v Shakespearových komediích. Tyto řádky se vrátí jako XML kvůli změně na Accept
záhlaví.
Poté vezmeme XML vrácené požadavkem a přeměníme jej na XML DOM. Každý řádek z HBase je v samostatném prvku řádku. Použijeme for
smyčka pro procházení každého řádku.
Každá buňka v řádku je samostatný prvek XML. Použijeme jiný for
smyčka, která projde všemi těmito buňkami. (Tento blok kódu lze zjednodušit pomocí XPath k nalezení správných prvků.) Jakmile je nalezen každý sloupec, hodnota se uloží do proměnné. (Metoda dekódování je popsána v 1. části této série.) Všechny hodnoty vracené v XML jsou zakódovány v base64 a je třeba je před použitím dekódovat.
Nakonec je načten a dekódován klíč řádku.
Jakmile jsou všechna data nalezena a dekódována, můžete je začít používat. Váš kód by začal po dekódování řádku. Mějte na paměti, že některé z těchto proměnných není nutné dekódovat – všechny je zde uvádím pro úplnost.
Získávání řádků pomocí JSON
Práce s JSON je stejná jako práce s XML:pomocí get
sloveso, můžete načíst jeden řádek nebo skupinu řádků na základě jejich klíče řádku.
Zde je kód pro získání a práci s výstupem 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'])
Začneme kódem get
žádost, která vrátí všechny řádky v Shakespearových komediích. Tyto řádky se vrátí jako JSON kvůli změně na Accept
záhlaví.
Poté vezmeme JSON vrácený požadavkem a přeměníme jej na objekt JSON. Každý řádek z HBase je v samostatném indexu v poli řádků. Použijeme for
smyčka pro procházení každého řádku.
Každá buňka v řádku je samostatný index pole. Použijeme jiný for
smyčka, která projde všemi těmito buňkami. Jakmile je každý sloupec nalezen, hodnota se uloží do proměnné. Všechny hodnoty, které se vracejí do JSON, jsou zakódovány v base64 a je třeba je před použitím dekódovat. (Metoda dekódování je opět popsána v 1. části této série.) Všimněte si, že hodnoty se vracejí ve znaku dolaru ($).
Nakonec je načten a dekódován klíč řádku.
Jakmile jsou všechna data nalezena a dekódována, můžete je začít používat.
Použití curl
Jak je uvedeno v dokumentaci rozhraní REST, můžete použít curl pro výstup XML nebo JSON přímo do konzoly. Můžete například udělat totéž, co jsme právě udělali pomocí curl. Příkaz je:
curl -H "Accept: text/xml" http://localhost:8070/tablename/shakespeare-comedies-*
Tento příkaz vám poskytne výstup XML. Chcete-li získat výstup JSON, příkaz je:
curl -H "Accept: application/json" http://localhost:8070/tablename/shakespeare-comedies-*
Pomocí příkazů, jako jsou tyto, můžete rychle vidět, co se vrací nebo jak data vypadají. Pomocí curl můžete zobrazit stavový kód volání REST s:
[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
Závěr
Rozhraní HBase REST je dobrý způsob, jak používat HBase, pokud nechcete používat Javu. Nabízí vám známé rozhraní REST, které je integrováno do mnoha jazyků, a také známý formát dat.
Doufejme, že ukázky kódu a vysvětlení v této sérii vám ušetří spoustu googlování, když se pustíte do vašeho projektu RESTful HBase.
Jesse Anderson je instruktorem na Cloudera University.