python \ hive 连接 那些踩过的坑

场景:

python 操作hive 数据库,总是连接失败
经过多次努力,封装了类,方便大家使用


代码描述:

首先hive 里面,认证KERBEROS

from pyhive import hive

simplefilter(action='ignore', category=FutureWarning)


class HiveFetcher:
    """构造连接hive并提取数据的类:
        host = 对应服务器的IP号;
        port = 对应服务器的端口号
        user,pwd,db根据实际需求设置db使用数据库
    """

    def __init__(self, host='slave65', port=10000, user=None, auth="KERBEROS", kerberos_service_name="hive",
                 pwd=None, db='xxxxxx'):
        self.host = host
        self.port = port
        self.user = user
        self.pwd = pwd
        self.auth = auth
        self.kerberos_service_name = kerberos_service_name
        self.db = db
        self.conn = None
        self.cur = None

    # 连接数据库
    def connectDatabase(self):
        try:
            self.conn = hive.connect(host=self.host, port=self.port, username=self.user,
                                     password=self.pwd, database=self.db, auth=self.auth,
                                     kerberos_service_name=self.kerberos_service_name)
        except:
            print("connect hive Database failed")
            return False
        self.cur = self.conn.cursor()
        return True

    # 关闭数据库
    def close(self):
        # 如果数据打开,则关闭;否则没有操作
        if self.conn and self.cur:
            self.cur.close()
            self.conn.close()
        return True

    # 执行数据库的sq语句,主要用来做插入操作
    def execute(self, sql, params=None):
        # 连接数据库
        self.connectDatabase()
        try:
            if self.conn and self.cur:
                # 正常逻辑,执行sql,提交操作
                self.cur.execute(sql, params)
                self.conn.commit()
        except:
            print("execute failed: " + sql)
            self.close()
            return False
        return True

    # 用来查询表数据
    def fetchall(self, sql, params=None):
        self.execute(sql, params)
        return self.cur.fetchall()


def orgindata_fetch(connect_type):
    sql_search = ' 需要执行的 SQL'
    # 从数据库中查询相关数据
    print(sql_search)
    try:
        search_data = connect_type.fetchall(sql=sql_search)
    except Exception as e:
        logging.error('连接hive数据库,执行提取原始数据操作出现故障:{}'.format(e), exc_info=True)
    search_data = pd.DataFrame(list(search_data))
    return search_data


print('开始读取数据...')

# --------------------训练自身数据时,只需修改如下两行文件的定位--------------------#
hive_conns = HiveFetcher()
ori_data = orgindata_fetch(hive_conns)


更多交流加Q群 :787800875
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值