このハウツーは、ApacheHBaseRESTインターフェースの使用法を探るシリーズの3番目です。パート1では、HBase RESTの基本、Pythonに関するいくつかの警告、およびテーブル管理について説明しました。パート2では、XMLとJSONを使用して複数の行を同時に挿入する方法を示しました。以下のパート3では、XMLとJSONを使用して複数の行を取得する方法を示します。
XMLを使用した行の取得
GET
を使用する 動詞では、行キーに基づいて単一の行または行のグループを取得できます。 (複数値のURL形式の詳細については、こちらをご覧ください。)ここでは、単純なワイルドカード文字またはアスタリスク(*)を使用して、特定の文字列で始まるすべての行を取得します。この例では、シェイクスピアのコメディのすべての行に「シェイクスピア-コメディ-*」を読み込むことができます。これには、行キーが「AUTHOR-WORK-LINENUMBER」によってレイアウトされている必要もあります。
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'))
get
でコードを開始します リクエスト。このget
シェイクスピアのコメディのすべての行を返します。 Accept
が変更されたため、これらの行はXMLとして返されます。 ヘッダー。
次に、リクエストによって返されたXMLを取得し、それをXMLDOMに変換します。 HBaseの各行は、個別の行要素にあります。 for
を使用します ループしてすべての行を通過します。
行の各セルは個別のXML要素です。別のfor
を使用します これらすべてのセルを通過するためにループします。 (このコードブロックは、XPathを使用して正しい要素を見つけることで簡単にできます。)各列が見つかると、値が変数に保存されます。 (デコード方法については、このシリーズのパート1で説明します。)XMLで返されるすべての値は、base64でエンコードされているため、使用する前にデコードする必要があります。
最後に、行キーが取得され、デコードされます。
すべてのデータが見つかり、デコードされたら、それを使い始めることができます。行をデコードした後、コードが開始されます。これらの変数の一部はデコードする必要がないことに注意してください。完全を期すために、ここではすべてを実行しています。
JSONで行を取得する
JSONの操作は、XMLの操作と同じです。get
を使用します。 動詞では、行キーに基づいて単一の行または行のグループを取得できます。
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'])
get
でコードを開始します シェイクスピアのコメディのすべての行を返すリクエスト。 Accept
が変更されたため、これらの行はJSONとして返されます。 ヘッダー。
次に、リクエストによって返されたJSONを取得し、それをJSONオブジェクトに変換します。 HBaseの各行は、行配列の個別のインデックスにあります。 for
を使用します ループしてすべての行を通過します。
行の各セルは、個別の配列インデックスです。別のfor
を使用します これらすべてのセルを通過するためにループします。各列が見つかると、値が変数に保存されます。 JSONで返されるすべての値は、base64でエンコードされているため、使用する前にデコードする必要があります。 (ここでも、デコード方法については、このシリーズのパート1で説明します。)値はドル記号($)エントリで返されることに注意してください。
最後に、行キーが取得され、デコードされます。
すべてのデータが見つかり、デコードされたら、それを使い始めることができます。
curlの使用
RESTインターフェースのドキュメントに示されているように、curlを使用してXMLまたはJSONをコンソールに直接出力できます。たとえば、curlを使用した場合と同じgetを実行できます。コマンドは次のとおりです。
curl -H "Accept: text/xml" http://localhost:8070/tablename/shakespeare-comedies-*
そのコマンドはあなたにXML出力を与えるでしょう。 JSON出力を取得するためのコマンドは、次のとおりです。
curl -H "Accept: application/json" http://localhost:8070/tablename/shakespeare-comedies-*
このようなコマンドを使用すると、何が戻ってくるのか、データがどのように見えるのかをすばやく確認できます。 curlを使用して、REST呼び出しのステータスコードを次のように確認できます。
[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
結論
Javaを使用したくない場合は、HBaseRESTインターフェースがHBaseを使用するための良い方法です。多くの言語に組み込まれている使い慣れたRESTインターフェースと、使い慣れたデータ形式を提供します。
うまくいけば、このシリーズのコードサンプルと説明により、RESTfulHBaseプロジェクトに着手する際のグーグルを大幅に節約できます。
ジェシーアンダーソンはCloudera大学のインストラクターです。