2015-02-11 4 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, я вижу, что количество подключений увеличилось, что сохраняется даже после завершения скрипта.Закрытие соединения с базой данных hbase с помощью happybase в python

Я что-то не хватает? Нужно ли явно закрывать соединение?

Спасибо за помощь.

+0

У вас есть решение. Выходит, что это – MultipleCrashes

+0

, столкнувшись с подобной проблемой, кажется, что в HappyBase есть ошибка, если мы используем модель REST. –

ответ

1

Полученный раствор .Turns, чтобы быть в этом

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

Когда программа завершается, все открытые сокеты автоматически закрываются. –

+0

Но это проблема, если вы открываете новое соединение внутри цикла –

0

Если программа вышла, все сетевые соединения автоматически закрываются. Вероятно, вы видите состояние TIME_WAIT для уже закрытых соединений.