1. 程式人生 > >HBase: Thrift寫資料報錯——socket.error: [Errno 32] Broken pip

HBase: Thrift寫資料報錯——socket.error: [Errno 32] Broken pip

博主用的是python來讀寫hbase

需要安裝 pip install thrift 和 pip install hbase-thrift

hbase客戶端建立:

from thrift import Thrift
from thrift.transport import TSocket, TTransport
from thrift.protocol import TBinaryProtocol
from hbase import Hbase
 
#server端地址和埠,web是HMaster也就是thriftServer主機名,9090是thriftServer預設埠
transport = TSocket.TSocket('hadoop4’, 9090)
#可以設定超時
transport.setTimeout(5000)
#設定傳輸方式(TFramedTransport或TBufferedTransport)
trans = TTransport.TBufferedTransport(transport)
#設定傳輸協議
protocol = TBinaryProtocol.TBinaryProtocol(trans)
#確定客戶端
client = Hbase.Client(protocol)
#開啟連線
transport.open()  

如果,在讀寫hbase過程中報錯:socket.error: [Errno 32] Broken pip,原因大致是因為,資料還沒有讀寫進去,socket已經關閉了,解決辦法就是在建立客戶端設定超時時間。

#可以設定超時
transport.setTimeout(5000)

或者直接在配置檔案conf/hbase-site.xml中新增如下配置(每個節點都新增):

 

<property>
         <name>hbase.thrift.server.socket.read.timeout</name>
         <value>6000000</value>
         <description>eg:milisecond</description>
</property>

即設定超時時間為60s。