gpt4 book ai didi

python - 使用Happybase扫描远程hbase表时,出现 'Tsocket read 0 bytes Error'

转载 作者:太空宇宙 更新时间:2023-11-04 11:55:13 24 4
gpt4 key购买 nike

我正在尝试扫描超过 1,000,000,000 行的远程 HBASE 表。扫描后,使用扫描的行,尝试在 hdfs 中使用 csv 文件。

我尝试了将近 3 周的时间来解决它,但我做不到。

In this way i scan data and make csv file

Error Message

source of /host/anaconda3/lib/python3.6/site-packages/thriftpy/transport/socket.py

source of /host/anaconda3/lib/python3.6/site-packages/thriftpy/transport/socket.py

==> 我试过兼容协议(protocol),增加网络 tcp 内存缓冲区,增加超时配置,在扫描参数中设置 1 到 10000 批大小等。

但是差不多30分钟还好好的,但是突然报错。几乎 1/50 倍它完成得很好。(运行良好,没有任何错误)请帮助我。我试图找出错误的原因。但我无法得到它。

有人知道怎么解决吗?

这是我的代码

import sys
print ("--sys.version--")
print (sys.version)
from pyhive import hive
import csv
import os
import happybase
import time
import subprocess
import datetime
import chardet
import logging
logging.basicConfig(level=logging.DEBUG)


csv_list=[]

col=[]
def conn_base():
print('conn_base starts')


#SETTING CONNECTION AND CONFIGURATION
conn=happybase.Connection('13.xxx.xxx.xxx',port=9090)
table=conn.table(b'TEMP_TABLE')

#ITERATE DATA AND MAKE CSV FILE PER 100,000 RECORD. AND TAKE A TIME TO SLEEP PER 500000
tmp=[]
print('LET\'S MAKE CSV FILE FROM HBASE')
index=0
st=0
global csv_list
for row_key, data in table.scan():
try:
if (st%1000000==0):
time.sleep(30)
print("COUNT: ",st)
if (st%500000==0):

print("CHANGE CSV _FILE")
index+=1
ta_na='TEMP_TABLE'+str(index)+'_version.csv'
csv_list.append(ta_na)

st+=1
with open('/home/host01/csv_dir/TEMP_TABLE/'+csv_list[index-1] ,'a') as f:
tmp=[]
tmp.append(data[b'CF1:XXXXX'].decode())
tmp.append(data[b'CF1:YYYYY'].decode())
tmp.append(data[b'CF1:DDDDD'].decode())
tmp.append(data[b'CF1:SSSSS'].decode())
tmp.append(data[b'CF1:GGGGG'].decode())
tmp.append(data[b'CF1:HHHHH'].decode())
tmp.append(data[b'CF1:QQQQQ'].decode())
tmp.append(data[b'CF1:WWWWWW'].decode())
tmp.append(data[b'CF1:EEEEE'].decode())
tmp.append(data[b'CF1:RRRRR'].decode())


f.write(",".join(tmp)+'\n')
tmp=[]

except:
pass


#PUT CSV FILES TO HDFS.
st=1
for i in range(len(csv_list)):
try:
st+=1
cmd="hdfs dfs -put /home/host01/csv_dir/TEMP_TABLE"+str(csv_list[i])+" /user/hive/warehouse/TEMP_TABLE/"
subprocess.call(cmd,shell=True)
if (st%50==0):
time.sleep(5)


except:
pass
cmd="hdfs dfs -put /home/host01/csv_dir/TEMP_TABLE/*.csv /user/hive/warehouse/TEMP_TABLE/"
subprocess.call(cmd,shell=True)

print("PUT ALL CSV FILES TO HDFS")
conn.close()

最佳答案

首先确保 HBase Thrift 服务器已启动并正在运行。您可以使用以下命令运行 thrift 服务器:

hbase-daemon.sh start thrift [ -p 9090 ]

如果要指定端口号,请使用-p。默认端口为 9090

关于python - 使用Happybase扫描远程hbase表时,出现 'Tsocket read 0 bytes Error',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54618626/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com