从python(happybase)写入hbase表

disho6za  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(500)

我正在运行map reduce作业,现在我想在hbase中输入值。我将map reduce作业中的值流到stdin上,并有一个python脚本在happybase上插入(放置)行。
我在做python的put时遇到了各种各样的问题。据我所知,最近的问题似乎与库兼容性问题有关。错误日志显示iteritems的问题。happybase手册提到了排序查询所需的其他python库,从pythonversion2.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\u 31”java(tm)se运行时环境(build 1.8.0\u 31-b13)java hotspot(tm)64位服务器虚拟机(build 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'
tgabmvqs

tgabmvqs1#

尝试:

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

如果f1有col1、col2这样的子列,也可以指定特定的子列

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

更多信息请参见:
https://happybase.readthedocs.io/en/happybase-0.4/tutorial.html

beq87vna

beq87vna2#

祝你快乐。
代码中的此行包含错误:

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

这个 {'f1', 'hey'} 是一个集合文本,而您应该传递dict。我想你是这个意思吧?

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

相关问题