このハウツーは、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" https://localhost:8070/tablename/shakespeare-comedies-*
そのコマンドはあなたにXML出力を与えるでしょう。 JSON出力を取得するためのコマンドは、次のとおりです。
curl -H "Accept: application/json" https://localhost:8070/tablename/shakespeare-comedies-*
このようなコマンドを使用すると、何が戻ってくるのか、データがどのように見えるのかをすばやく確認できます。 curlを使用して、REST呼び出しのステータスコードを次のように確認できます。
[user@localhost HBaseREST]$ curl -I -H "Accept: text/xml" https://localhost:8070/messagestable/shakespeare-comedies-* HTTP/1.1 200 OK Content-Length: 0 Content-Type: text/xml
結論
Javaを使用したくない場合は、HBaseRESTインターフェースがHBaseを使用するための良い方法です。多くの言語に組み込まれている使い慣れたRESTインターフェースと、使い慣れたデータ形式を提供します。
うまくいけば、このシリーズのコードサンプルと説明により、RESTfulHBaseプロジェクトに着手する際のグーグルを大幅に節約できます。
ジェシーアンダーソンはCloudera大学のインストラクターです。