2015-02-11 106 views
2

我正在運行map-reduce作業,現在我想將值輸入到hbase中。我將map-reduce作業的值通過stdin進行流式處理,並且有一個python腳本,用於插入(放入)happybase以上的行。從python(happybase)寫入hbase表格

我遇到了各種各樣的問題,從python做放。據我所知,最近的問題似乎與庫兼容性問題有關。錯誤日誌顯示iteritems的問題。 happybase manual引用了排序查詢所需的附加python庫,從python版本2.7(我正在運行2.7.6)開始並不是必需的。

有沒有人遇到過類似的問題?他們可以很容易地修復或你會推薦使用不同的界面?

更多細節

我的Hadoop(2.6.0)和HBase的(0.98.10 - 2015年2月5日)安裝和單機的配置中運行。他們啓動了。我可以通過shell與hbase進行交互,創建表格,輸入值並掃描它們。

我可以通過python掃描並打印表格,其中至少顯示連接的工作原理。但總是失敗。這個簡短的例子顯示了這個問題:

爲了這個例子,我的表被稱爲test(在hbase shell中創建)。它有一列f1

hbase(main)> create 't1','f1' 
hbase(main)> put 't1','1','f1','hello' 

現在蟒蛇:

>>> import happybase 
>>> connection = happybase.Connection('localhost') 
>>> table = connection.table('t1') 
>>> print(table.row('1')) # {'f1:': 'hello'} 
>>> table.put('2',{'f1','hey'}) # fails, see log 

更詳細信息:

節儉運行。

# hbase thrift start -threadpool 


[email protected]> hbase -version 

Java版本 「1.8.0_31」 的Java(TM)SE運行時環境(建立1.8.0_31-B13) 爪哇熱點(TM)64位服務器VM(建立25.31-B07,混合模式)

錯誤日誌:

--------------------------------------------------------------------------- 
AttributeError       Traceback (most recent call last) 
<ipython-input-15-56dab4cd31ef> in <module>() 
----> 1 table.put('2',{'f1','hey'}) 

/usr/local/lib/python2.7/dist-packages/happybase/table.pyc in put(self, row, data, timestamp, wal) 
    437   """ 
    438   with self.batch(timestamp=timestamp, wal=wal) as batch: 
--> 439    batch.put(row, data) 
    440 
    441  def delete(self, row, columns=None, timestamp=None, wal=True): 

/usr/local/lib/python2.7/dist-packages/happybase/batch.pyc in put(self, row, data, wal) 
    81     value=value, 
    82     writeToWAL=wal) 
---> 83    for column, value in data.iteritems()) 
    84 
    85   self._mutation_count += len(data) 

AttributeError: 'set' object has no attribute 'iteritems' 
+0

什麼是「運行代碼片段」按鈕,我的意思是除了混亂文本? – JensG 2015-02-11 14:31:34

+0

對不起,他們擺脫了他們。 – BenjiMan 2015-02-11 16:52:16

回答

9

Happybase筆者在這裏。

這行代碼中包含一個錯誤:

>>> table.put('2',{'f1','hey'}) # fails, see log 

{'f1', 'hey'}是一個集文字,而你應該通過一個字典來代替。我假設你是這個意思?

>>> table.put('2',{'f1': 'hey'})