0

我已经在 Google Colab 中安装了 Hadoop、Hbase 并尝试创建表,然后在那里读取并插入记录。
HBase shell 命令正在工作并使用它我创建了一个名为“cars2”的小表,并且可以在那里读取数据。

!echo "create 'cars2', 'make','model','year'" | hbase shell -n
!hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator=','  -Dimporttsv.columns="HBASE_ROW_KEY,make,model,year" cars2 /tmp/cars2.csv
!echo "scan 'cars2'" | hbase shell -n
ROW                   COLUMN+CELL                                               
 Ford                 column=make:, timestamp=2021-11-25T00:26:09.956, value=Eco
                      sport                                                     
 Ford                 column=model:, timestamp=2021-11-25T00:26:09.956, value=20
                      19                                                        
 Hyundai              column=make:, timestamp=2021-11-25T00:26:09.956, value=i20
 Hyundai              column=model:, timestamp=2021-11-25T00:26:09.956, value=20
                      15                                                        
 Maruti               column=make:, timestamp=2021-11-25T00:26:09.956, value=Omn
                      i                                                         
 Maruti               column=model:, timestamp=2021-11-25T00:26:09.956, value=20
                      07                                                        
3 row(s)
Took 0.8416 seconds  

但是我想从 Python 访问 HBase 并安装了 HappyBase

!stop-hbase.sh
!pip install happybase
import happybase
!hbase-daemon.sh start thrift
running thrift, logging to /content/hbase-2.4.8//logs/hbase--thrift-a918f5e989eb.out
!start-hbase.sh
running master, logging to /content/hbase-2.4.8//logs/hbase--master-a918f5e989eb.out
!jps
3042 ThriftServer
3416 HMaster
3838 Jps

然后我尝试访问数据

connection = happybase.Connection('localhost',9090)
connection.tables()
[b'cars2']
myCars = connection.table('cars2')
Ford_row = myCars.row(b'Ford')
print(Ford_row)
{b'make:': b'Ecosport', b'model:': b'2019'}
for key, data in myCars.rows([b'Ford', b'Maruti',b'Hyundai']):
    print(key, data)  # prints row key and data for each row
b'Ford' {b'make:': b'Ecosport', b'model:': b'2019'}
b'Maruti' {b'make:': b'Omni', b'model:': b'2007'}
b'Hyundai' {b'make:': b'i20', b'model:': b'2015'}

到目前为止,一切都很好。问题从下一个命令开始,给出错误

myCars.put(b'Hindustan',{b'make': b'Ambassador', b'model': b'1963'})
---------------------------------------------------------------------------
TTransportException                       Traceback (most recent call last)
<ipython-input-34-cf092b872f29> in <module>()
----> 1 myCars.put(b'Hindustan',{b'make': b'Ambassador', b'model': b'1963'})

10 frames
/usr/local/lib/python3.7/dist-packages/thriftpy2/transport/socket.py in read(self, sz)
    130         if len(buff) == 0:
    131             raise TTransportException(type=TTransportException.END_OF_FILE,
--> 132                                       message='TSocket read 0 bytes')
    133         return buff
    134 

TTransportException: TTransportException(type=4, message='TSocket read 0 bytes')

我应该如何解决这个错误?
但有时我在同一个命令上得到一个不同的错误

---------------------------------------------------------------------------
TApplicationException                     Traceback (most recent call last)
/usr/local/lib/python3.7/dist-packages/IPython/core/interactiveshell.py in run_code(self, code_obj, result)
   2881                 #rprint('Running code', repr(code_obj)) # dbg
-> 2882                 exec(code_obj, self.user_global_ns, self.user_ns)
   2883             finally:

9 frames
<class 'str'>: (<class 'TypeError'>, TypeError('__str__ returned non-string (type bytes)'))

During handling of the above exception, another exception occurred:

TypeError                                 Traceback (most recent call last)
/usr/local/lib/python3.7/dist-packages/ipython_genutils/py3compat.py in safe_unicode(e)
     63     """
     64     try:
---> 65         return unicode_type(e)
     66     except UnicodeError:
     67         pass

TypeError: __str__ returned non-string (type bytes)

将非常感谢有关如何解决此问题的一些建议。实际的笔记本可以在这里找到

4

1 回答 1

0

我必须在 colname 名称后加一个冒号!
之后查看注释的原始代码和正确的代码

#myCars.put(b'Hindustan',{b'make': b'Ambassador', b'model': b'1963'})
myCars.put('Hindustan',{'make:': 'Ambassador', 'model:': '1963'})
于 2021-11-25T04:03:11.087 回答