利用jupyter notebook连接数据库

Python3.7连接mysql,presto,hive

  • 一、Python3.7连接mysql
  • 二、Python3.7连接presto
  • 三、Python3.7使用impyla连接hive
      • 坑1:安装包时候遇到的一堆坑
      • 坑2:Kerberos认证
      • 坑3:认证成功后连接hive
  • 四、参考链接

       初入职场,公司数据都是利用FreeIPA部署的Hadoop集群,第一天入职,运维大哥就给讲了一堆FreeIPA,主从,Hadoop什么的一堆,一脸懵逼(菜是原罪)。今天主要分享下利用jupyter notebook(python3.7)连接数据库遇到的一些坑。

一、Python3.7连接mysql

连接mysql比较顺利,没遇到任何坑,代码如下:

import pymysql
import pandas as pd
# 连接mysql
conn = pymysql.connect(host='你的主机名', user='用户名',password='密码',
                       database='数据库名称',charset="utf8")
sql_1 = "select * from table_name limit 10"
#利用pandas直接获取数据
data = pd.read_sql(sql_1, conn)
conn.close()

二、Python3.7连接presto

       连接presto同样很顺利,没有遇到什么坑,代码如下:

from pyhive import presto
conn = presto.connect('xxx.com', port=端口号).cursor()
conn.execute("select * from tabele_name limit 10")
for result in conn.fetchall():
    print(result)

三、Python3.7使用impyla连接hive

       presto其实查询还是挺快的,但是公司资源有限,改用hive连接了,这里有个细节就是from pyhive import hive会报错,参考大神们的博客得知需要pip install pyhive[hive] 。本来以为连接hive一样会很顺利,但是连接过程中遇到一些坑,连接的核心代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# hive util with hive server2namenode02.xxx.co
from impala.dbapi import connect
class HiveClient:
    def __init__(self, db_host, port, authMechanism, user, password, database, kbservice):
        self.conn = connect(host=db_host,
                            port=port,
                            auth_mechanism=authMechanism,
                            user=user,
                            password=password,
                            database=database,
                            kerberos_service_name=kbservice
                            )

    def query(self, sql):
        with self.conn.cursor() as cursor:
            cursor.execute(sql)
            return cursor.fetchall()

    def query_one(self, sql):
        with self.conn.cursor() as cursor:
            cursor.execute(sql)
            return cursor.fetchone()

    def execute(self, sql):
        with self.conn.cursor() as cursor:
            cursor.execute(sql)

    def cursor(self):
        return self.conn.cursor

    def close(self):
        self.conn.close()


def get_hive_client():
    return HiveClient(db_host='主机名', 
    port=10000, 
    authMechanism='GSSAPI',
    user='用户名', password='密码',
    database='数据库名', kbservice='hive')

       核心代码看着很简单也很容易理解,但是一运行坑就出来了,下来一一介绍遇到的坑:

坑1:安装包时候遇到的一堆坑

       from impala.dbapi import connect提示找不到模块
       安装包的时候参考Win7平台Python3使用impyla连接Hive遇到的坑,特别要注意安装包的顺序和对应的版本。

坑2:Kerberos认证

       Kerberos认证参考Windows本地安装配置Kerberos客户端,这里有个坑就是本地安装Kerbos需要把配置文件放在三个目录下,

·目录一:C:\ProgramData\MIT\Kerberos5\krb5.ini

·目录二:C:\Windows\krb5.ini

·目录三:C:\Program Files\MIT\Kerberos\krb5.ini

       另外本地进行认证需要把获取的krb5.ini文件中部分内容注释掉,如下所示:

# udp_preference_limit = 0
# default_ccache_name = FILE://tmp/krb5cc_%{uid}

坑3:认证成功后连接hive

       一般都是利用jupyter notebook的web页面访问hive,这时候需要在服务器上进行kerberos认证,notebook的创建新文件的new选项下面就有Terminal选项,就可以进入服务器进行kerberos认证。其实连接时输入的用户名跟密码是可以省略的,因为主要是利用生成的keytab来建立连接。

四、参考链接

       第一次利用python3.7使用impyla连接hive,参考了许多大神的博客,在这里就不一一列举了,欢迎各位大佬发现并指正博客中的错误。

       FreeIPA主从+HDP3.0.0安装配置
       Win7平台Python3使用impyla连接Hive遇到的坑
       Windows本地安装配置Kerberos客户端

你可能感兴趣的:(利用jupyter notebook连接数据库)