2012-04-04 61 views
2

我正在使用curl通過REST訪問Hbase。我在將數據插入到Hbase時遇到問題。我遵循Stargate文檔,但是當我遵循相同的語法時,它會給我400/405錯誤的錯誤請求和方法不允許的錯誤。我已經粘貼了下面的命令。請告訴我我哪裏錯了。使用Stargate Rest將數據插入到Hbase

星際文件說

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.I讀取要從文件傳遞給星際之門服務器的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

這是一個非常簡單的錯誤。 Hbase期望base64編碼中的每個值。 Tha鍵以及columnfamily:列在進入xml之前必須進行base64編碼。

0

使用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']}) 

修改表的模式:

添加列col3col4

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

刪除列

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

顯示錶列

table.columns() 

顯示全部表格

connection.tables()