我正在运行一个map reduce作业,现在我想在hbase中输入值。我将map reduce作业中的值流放到stdin上,并使用python脚本在happybase上插入(放置)行。
我遇到了各种各样的问题,从python中执行put。据我所知,最近的问题似乎与库兼容性问题有关。错误日志显示iteritems的问题。happybase manual引用了排序查询所需的其他python库,这些库从python 2.7版(我运行的是2.7.6版)开始是不必要的。
有人遇到过类似的问题吗?它们能很容易修复吗?还是建议使用不同的接口?
更多细节
我已经安装了hadoop(2.6.0)和hbase(0.98.10-2/5/2015),并以独立配置运行。它们已经启动了。我可以通过shell与hbase接口,创建表,输入值,然后扫描它们。
我可以在happybase上扫描和打印python中的表,这至少表明连接工作正常。但是put总是失败的。这个简短的示例说明了问题:
为了这个例子,我的表被称为test(在hbase shell中创建)。它有一列f1。hbase(main)> create 't1','f1'
hbase(main)> put 't1','1','f1','hello'
现在是python:>>> 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
hduser@box> hbase -version
java版本“1.8.0_31”
Java(TM)SE运行时环境(构建1.8.0_31-b13)
Java HotSpot(TM)64位服务器虚拟机(内部版本25.31-b07,混合模式)
错误日志:---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
in ()
----> 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'