2

私はcurlを使用してRESTでHbaseにアクセスしています。Hbaseへのデータの挿入に問題があります。Stargateのドキュメントに従いましたが、同じ構文に従うと、不正な要求の400/405エラーと、許可されていないメソッドエラーが発生します。以下のコマンドを貼り付けました。どこが悪いのか教えてください。

スターゲートのドキュメントによると

POST /<table>/<row>/<column> (:qualifier)?/<timestamp>
curl -H "Content-Type: text/xml" --data '[...]' http://localhost:8000/test/testrow/test:testcolumn

私のcurlコマンドは次のとおりです。

curl -H "Content-Type: text/xml" --data '[<CellSet><Row key="111"><Cell column="f1">xyz</Cell></Row></CellSet>]' http://localhost:8080/mytable/row/fam

これを行う正しい方法は何ですか?これは私に悪い要求エラーを与えるからです。

また、Pythonクライアントで同じことを試しています。ColumnFamilyNotFoundExceptionが発生します。ファイルからスターゲートサーバーに渡されるXmlデータを読み取っています。コードは次のとおりです。

url = 'http://localhost:8080/mytable/row/fam' f = open('example.xml', 'r') xmlData = f.read() r = requests.post(url, data=xmlData, headers=headers)

example.xmlには次のものがあります。

<CellSet>
     <Row key="111">
   <Cell column="fam:column1">
             xyz
         </Cell>
     </Row>
 </CellSet>
4

2 に答える 2

4

それは非常に単純な間違いでした。Hbaseは、base64エンコーディングのすべての値を想定しています。キーとcolumnfamily:columnは、xmlに入力する前にbase64でエンコードする必要があります。

于 2012-04-09T06:16:51.950 に答える
0

スターベースを使用すると挿入が簡単です。

$ pip install starbase

table1col1と名前の付いたテーブルを作成し、col2

from starbase import Connection
connection = Connection()
table = connection.table('table1')
table.create('col1', 'col2')

に行を挿入しtable1ます。行キーはになりますrow1

table.insert(
    'row1', 
    {
        'col1': {'key1': 'val1', 'key2': 'val2'}, 
        'col2': {'key3': 'val3', 'key4': 'val4'}
    }
)

バッチで挿入することもできます。

dataコードを複製しないために、データが変数(dict)に格納されていると想定します。

data = {
    'col1': {'key1': 'val1', 'key2': 'val2'}, 
    'col2': {'key3': 'val3', 'key4': 'val4'}
}

batch = table.batch()
for i in range(100, 5000):
    batch.insert('row_%s' % i, data)
batch.commit(finalize=True)

更新はupdateメソッドを使用して行われ、同じようにinsert機能します。

行をフェッチするには、fetchメソッドを使用します。

行全体をフェッチします。

table.fetch('row1')

col1データのみを取得します。

table.fetch('row1', 'col1')

フェッチのみcol1col2データ:

table.fetch('row1', ['col1', 'col2'])

フェッチのみcol1:key1col2:key4データ:

table.fetch('row1', {'col1': ['key1'], 'col2': ['key4']})

テーブルスキーマの変更:

col3を追加し、col4

table.add_columns('col3', 'col4')

列を削除します

table.drop_columns('col1', 'col4')

テーブルの列を表示する

table.columns()

すべてのテーブルを表示

connection.tables()
于 2013-08-12T23:40:05.073 に答える