2015-02-11 121 views
1
def hbasePopulate(self,table="abc",MachineIP="xx.xx.xx.xx"): 

    connection=happybase.Connection(MachineIP,autoconnect=True) 
    tablename=Reptype.lower()+'rep' 
    print "Connecting to table " 
    print tablename 
    try: 
     table=connection.table(tablename) 
     for key,data in table.scan(): 
      print key,data 
     print table 
    #except IOError as e: 
    except: 
     print "Table does not exists,creating" 
     self.createTable(table=table,machineIP=machineIP) 

    with table.batch() as b: 
     with open('xxx.csv','r') as queryFile: 

      for lines in queryFile: 

       lines=lines.strip("\n") 
       splitRecord=lines.split(",") 
       key=splitRecord[0] 
       key=key.replace("'","") 
       val=",".join(splitRecord[1:]) 
       val=ast.literal_eval(val) 
       table.put(splitRecord[0],val) 

    for key,data in table.scan(): 
     print key,data 

def createTable(self,table="abc",MachineIP=""): 
    connection=happybase.Connection(MachineIP,autoconnect=True) 
    print "Connection Handle",connection 
    tname=table.lower() 
    tablename=str(tname) 
    print "Creating table : "+table+", On Hbase machine : "+MachineIP 
    families={"cf":{} ,} #using default column family 
    connection.create_table(table,families=families) 
    print "Creating table done " 

每次運行這個腳本時,它都會將數據填充到hbase表中,但它會保持連接處於打開狀態。當我使用netstat -an進行檢查時,發現連接計數已經增加,即使在腳本完成後,連接計數仍然存在。使用python中的happybase關閉與hbase數據庫的連接

我錯過了什麼嗎?我們是否需要明確關閉連接?

感謝您的幫助。

+0

得到了解決方案。發現這是 – MultipleCrashes 2015-02-21 18:45:04

+0

面臨類似的問題,如果我們在REST模型中使用它似乎有Happybase中的錯誤。 – 2017-09-06 11:46:20

回答

1

得到了解決.Turns出成爲本

try: 
     connection.close() 
    except Exception as e: 
      print "Unable to close connection to hbase " 
      print e 
+0

程序退出時,所有打開的套接字都會自動關閉。 – 2015-05-03 12:55:19

+0

但是,如果你在一個循環內打開一個新的連接,這是一個問題 – 2016-08-19 15:38:37

0

如果程序退出,任何網絡連接被自動關閉。您可能看到的是已關閉連接的TIME_WAIT狀態。