sql >> データベース >  >> NoSQL >> HBase

ハウツー:Apache HBase RESTインターフェースを使用する、パート3

    このハウツーは、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大学のインストラクターです。


    1. MongoDBプロジェクションで文字列を数値に変換する

    2. MongoDBでプロパティが表示される順序を変更します

    3. MongoDBレプリカセットのAppArmorを構成する方法は?

    4. Redisに保存されている値を参照/表示するにはどうすればよいですか?