2023-02-23
需要 self
Python是一个非常优秀的编程语言,使用的群体非常的多,第三方的库也非常的多。其中有一个库叫做:PyHive,作用就是:连接到Hive,使用Python语言来操作Hive的数据!
PyHive是通过HiveServer2服务连接到原数据库的,因此需要启动HiveServer2服务!
启动HiveServer2服务
# 直接开启HiveServer2的服务,但是需要注意这个进程是一个前台进程
hive --service hiveserver2
# 启动HiveServer2的服务,并将其设为后台进程,但是依然会在控制台输出一些日志信息
hive --service hiveserver2 &
# 启动HiveServer2的服务,并将其设为后台进程,将日志输出在指定的文件中
hive --service hiveserver2 > /tmp/my_hive_logs/hiveserver2.log 2>&1 &
需要注意:
HiveServer2服务的完全启动需要一定的时间,追踪日志文件会发现最后在启动SESSION_ID,当启动到4个SESSION_ID的时候,服务才算完全启动,此时才可以使用beeline或者PyHive连接到Hive的元数据。这个过程需要1分钟左右。
安装依赖
我们需要使用Python代码来操作Hive,就需要安装好对应的库文件。直接使用pip命令来安装即可。那么安装在什么位置呢?主机还是虚拟机呢?
在哪里执行代码,就在哪里安装!
●你的Python代码需要在windows本地运行,那就需要在windows上安装;
●你的Python代码需要在macOS本地运行,那就需要在macOS上安装;
●你的Python代码需要在CentOS虚拟机中运行,那就需要在CentOS虚拟机上安装
# 使用pip3安装第三方库文件
pip3 install pyhive sasl thrift thrift-sasl
注意事项:
在CentOS中,安装sasl的时候可能会失败,是因为缺少依赖文件,直接使用yum安装即可。
yum install gcc gcc-c++ cyrus-sasl-devel
基本的访问代码
# @Author : 大数据章鱼哥
# @Company : 北京千锋互联科技有限公司
# 导入第三方模块
from pyhive import hive
# 创建程序与Hive的连接对象
hive_connection = hive.Connection(
host="192.168.10.101", # 开启了HiveServer2服务的节点IP地址或者主机名
port=10000, # 连接到HiveServer2服务的端口,默认是10000端口
username="root", # 连接到HiveServer2服务的用户名
database="mydb" # 连接到Hive的数据库名字
)
# 创建游标对象
hive_cursor = hive_connection.cursor()
# 执行HQL语句
hive_cursor.execute("select * from emp")
# 获取所有的执行结果
result = hive_cursor.fetchall()
for row in result:
print(row)
# 释放资源
hive_cursor.close()
hive_connection.close()
使用PyHive操作Hive的过程,其实与Python操作MySQL数据库非常的类似!
当然,在上述的代码执行过程中,有可能会因为中间的代码出现异常,导致最终的资源无法释放的问题,因此我们可以这样优化代码
# @Author : 大数据章鱼哥
# @Company : 北京千锋互联科技有限公司
# 导入第三方模块
from pyhive import hive
# 创建程序与Hive的连接对象
hive_connection = hive.Connection(
host="192.168.10.101", # 开启了HiveServer2服务的节点IP地址或者主机名(如果设置为主机名,需要保证已经做好映射)
port=10000, # 连接到HiveServer2服务的端口,默认是10000端口
username="root", # 连接到HiveServer2服务的用户名
database="mydb" # 连接到Hive的数据库名字
)
# 创建游标对象,同时使用with代码段,完成资源的自动释放
with hive_connection, hive_connection.cursor() as hive_cursor:
# 执行HQL语句
hive_cursor.execute("select * from mydb")
# 输出查询到的所有结果
rows = hive_cursor.fetchall()
for row in rows:
print(row)
功能封装
我们可以封装一个类,专门用来做与Hive的交互操作。我们在使用的时候,只需要将需要执行的HQL语句告诉这个类的对象即可。
# @Author : 大数据章鱼哥
# @Company : 北京千锋互联科技有限公司
from pyhive import hive
class HiveClient:
__slots__ = ('db', 'cur')
def __init__(self, *, host='192.168.10.101', port=10000, username='root', database='mydb'):
"""
构造函数,提供默认的连接配置
:param host: 连接到的服务器地址,默认 192.168.10.101
:param port: 连接到的服务器端口,默认 10000
:param username: 连接到的服务器用户,默认 root
:param database: 连接到的数据库,默认 mydb
"""
self.db = hive.Connection(host=host, port=port, username=username, database=database)
self.cur = self.db.cursor()
def __del__(self):
"""
析构函数,用于释放连接对象
:return:
"""
self.cur.close()
self.db.close()
def execute(self, sql, params=None):
"""
执行DDL、DML的操作
:param sql: 需要执行的SQL语句
:param params: 执行SQL语句时候的参数
:return:
"""
try:
self.cur.execute(sql, params)
self.db.commit()
print("execute: ", sql, params)
except Exception as e:
print(e)
self.db.rollback()
def query_all(self, sql):
"""
执行指定的查询语句,并返回所有的查询结果
:param sql: 需要执行的查询操作
:return: 查询到的所有结果
"""
self.cur.execute(sql)
return self.cur.fetchall()
封装完成之后,后面再使用到Python来操作Hive的时候将会非常的方便
# 实例化连接到操作Hive的对象
client = HiveClient()
# 加载数据,如果要使用local的路径,需要注意的是这里指的是连接到的hiveserver2所在节点的文件系统
# client.execute("load data local inpath '/root/example_01_data' into table example_01")
# 克隆表
# client.execute("create table example_01_copy as select * from example_01")
# 删除表
# client.execute("drop table example_01_copy")
# print(client.query_all("select * from example_01"))
上一篇:大数据在学习过程中会遇到的问题
开班时间:2021-04-12(深圳)
开班盛况开班时间:2021-05-17(北京)
开班盛况开班时间:2021-03-22(杭州)
开班盛况开班时间:2021-04-26(北京)
开班盛况开班时间:2021-05-10(北京)
开班盛况开班时间:2021-02-22(北京)
开班盛况开班时间:2021-07-12(北京)
预约报名开班时间:2020-09-21(上海)
开班盛况开班时间:2021-07-12(北京)
预约报名开班时间:2019-07-22(北京)
开班盛况Copyright 2011-2023 北京千锋互联科技有限公司 .All Right 京ICP备12003911号-5 京公网安备 11010802035720号