macbook本地部署 pyhive环境连接 hive用例
前言
公司的测试和生产环境中尚未提供基于Hive的客户端。若希望尝试操作Hive表,目前一个可行的方案是使用Python语言,通过借助pyhive库,您可以对Hive表进行各种操作。以下是一些示例记录供您参考。
一、pyhive是什么?
PyHive是一个Python库,用于与Apache Hive进行交互和查询。Apache Hive是建立在Hadoop平台上的数据仓库工具,旨在方便地执行SQL类型的查询以分析大型数据集。PyHive库允许Python开发人员通过编程语言来访问和操作Hive数据库,从而进行数据查询、分析和处理。
通过PyHive,可以使用Python编写Hive查询和命令,并从Python应用程序中直接访问和操作Hive中存储的数据。PyHive提供了与Hive数据库交互所需的API和功能,使得在Python环境中进行大规模数据处理变得更加简单和高效。
二、本地安装 pyhive库
1. 安装 pip 包管理工具
在Python环境中,通常会同时安装有pip和pip3这两个包管理工具,它们的主要区别在于所针对的Python版本。
pip:pip是用于Python 2.x版本的包管理工具。在Python 2.x环境下,pip通常是默认的包管理工具,用于安装、升级和管理Python包和依赖项。
pip3:pip3则是专为Python 3.x版本设计的包管理工具。在Python 3.x环境中,pip3用于安装、升级和管理Python 3.x的包和依赖项。需要注意的是,在某些情况下,pip3也可以用来代替pip,以确保在Python 2.x和Python 3.x环境中都能使用相同的包管理工具。
因此如果需要在Python 3环境下安装包时,应优先选择使用pip3来安装,以确保Python 3.x环境中的包管理工具正确安装和管理依赖项。如果您同时使用Python 2和Python 3环境,则需要注意使用不同的pip版本以避免混淆和冲突。
在 MacBook 上安装 pip 工具,可以按照以下步骤进行:
1. 安装 Homebrew(如果尚未安装)
Homebrew 是一个包管理工具,可以用来方便地安装和管理 macOS 上的软件包。
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
2. 安装 Python(包括 pip)
使用 Homebrew 安装 Python,pip 通常会随 Python 一起安装。
brew install python
安装完成后,你可以检查 python3
和 pip3
是否已经安装:
python3 --version
pip3 --version
3. 安装或升级 pip
如果你已经有 Python 安装,但没有 pip 或需要升级 pip,可以使用以下命令:
python3 -m ensurepip --upgrade
或者,如果你已经有 pip,可以通过以下命令升级它:
pip3 install --upgrade pip
4. 使用 pip 安装包
确认 pip 安装成功后,你可以使用 pip 安装 Python 包。例如,安装 requests
包(做个测试):
pip3 install requests
(myenv) ➜ ~ pip3 install requests
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Collecting requestsDownloading https://pypi.tuna.tsinghua.edu.cn/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl (64 kB)━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 64.9/64.9 kB 1.6 MB/s eta 0:00:00
Collecting charset-normalizer<4,>=2 (from requests)Downloading https://pypi.tuna.tsinghua.edu.cn/packages/2e/7d/2259318c202f3d17f3fe6438149b3b9e706d1070fe3fcbb28049730bb25c/charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl (122 kB)━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 122.2/122.2 kB 4.1 MB/s eta 0:00:00
Collecting idna<4,>=2.5 (from requests)Downloading https://pypi.tuna.tsinghua.edu.cn/packages/e5/3e/741d8c82801c347547f8a2a06aa57dbb1992be9e948df2ea0eda2c8b79e8/idna-3.7-py3-none-any.whl (66 kB)━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 66.8/66.8 kB 2.1 MB/s eta 0:00:00
Collecting urllib3<3,>=1.21.1 (from requests)Downloading https://pypi.tuna.tsinghua.edu.cn/packages/a2/73/a68704750a7679d0b6d3ad7aa8d4da8e14e151ae82e6fee774e6e0d05ec8/urllib3-2.2.1-py3-none-any.whl (121 kB)━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 121.1/121.1 kB 4.0 MB/s eta 0:00:00
Collecting certifi>=2017.4.17 (from requests)Downloading https://pypi.tuna.tsinghua.edu.cn/packages/5b/11/1e78951465b4a225519b8c3ad29769c49e0d8d157a070f681d5b6d64737f/certifi-2024.6.2-py3-none-any.whl (164 kB)━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 164.4/164.4 kB 4.1 MB/s eta 0:00:00
Installing collected packages: urllib3, idna, charset-normalizer, certifi, requests
Successfully installed certifi-2024.6.2 charset-normalizer-3.3.2 idna-3.7 requests-2.32.3 urllib3-2.2.1
额外步骤:安装虚拟环境(可选)
使用虚拟环境可以帮助你管理项目依赖:
pip3 install virtualenv
创建一个新的虚拟环境:
python3 -m venv myenv
激活虚拟环境:
source myenv/bin/activate
退出虚拟环境:
deactivate
如何安装的速度太慢可以考虑换下国内的镜像:
常见的国内镜像源
以下是几个常见的国内 PyPI 镜像源:
清华大学: https://pypi.tuna.tsinghua.edu.cn/simple
阿里云: https://mirrors.aliyun.com/pypi/simple/
豆瓣(douban): https://pypi.douban.com/simple/
中国科学技术大学: https://pypi.mirrors.ustc.edu.cn/simple/
华中理工大学: https://pypi.hustunique.com/
2. 实操演示
代码如下(示例):
# 新建虚拟环境
➜ ~ python3 -m venv myenv
# 激活环境
➜ ~ source myenv/bin/activate
(myenv) ➜ ~ python -m pip install pyhive
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Collecting pyhiveDownloading https://pypi.tuna.tsinghua.edu.cn/packages/f6/ec/5c658b3a4d99a6d9145030cc8e003c3f7efc668d866e88544812ab0af310/PyHive-0.7.0.tar.gz (46 kB)━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 46.5/46.5 kB 652.1 kB/s eta 0:00:00Installing build dependencies ... doneGetting requirements to build wheel ... doneInstalling backend dependencies ... donePreparing metadata (pyproject.toml) ... done
Collecting future (from pyhive)Downloading https://pypi.tuna.tsinghua.edu.cn/packages/da/71/ae30dadffc90b9006d77af76b393cb9dfbfc9629f339fc1574a1c52e6806/future-1.0.0-py3-none-any.whl (491 kB)━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 491.3/491.3 kB 3.1 MB/s eta 0:00:00
Collecting python-dateutil (from pyhive)Downloading https://pypi.tuna.tsinghua.edu.cn/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl (229 kB)━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 229.9/229.9 kB 5.7 MB/s eta 0:00:00
Collecting six>=1.5 (from python-dateutil->pyhive)Downloading https://pypi.tuna.tsinghua.edu.cn/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl (11 kB)
Building wheels for collected packages: pyhiveBuilding wheel for pyhive (pyproject.toml) ... doneCreated wheel for pyhive: filename=PyHive-0.7.0-py3-none-any.whl size=53872 sha256=da53a804b81ecb864a3cc38acb060e3b17bd93cf9c7d914ebdccdbd999964302Stored in directory: /Users/mac/Library/Caches/pip/wheels/99/bf/03/0562e50cb60a3bcb0e09602d7060ea2c6da7039f99bda3ec86
Successfully built pyhive
Installing collected packages: six, future, python-dateutil, pyhive
Successfully installed future-1.0.0 pyhive-0.7.0 python-dateutil-2.9.0.post0 six-1.16.0# 进入环境测试导入包无错误
➜ ~ source myenv/bin/activate
(myenv) ➜ ~ python
Python 3.12.3 (main, Apr 9 2024, 08:09:14) [Clang 15.0.0 (clang-1500.3.9.4)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from pyhive import hive
>>># 注意,如果还是报错可能还需要安装其他包(按照要求安装即可)
pip install pyhive
pip install thrift
pip install sasl
pip install thrift_sasl
3. 测试连接hive示例
3.1 hive连接 jdbc 命令行
(myenv) ➜ hive bin/beeline -u jdbc:hive2://localhost:10000 -n root -p root
Connected to: Apache Hive (version 3.1.3)
Driver: Hive JDBC (version 3.1.3)
Transaction isolation: TRANSACTION_REPEATABLE_READ
Beeline version 3.1.3 by Apache Hive
0: jdbc:hive2://localhost:10000> show databases;
INFO : Compiling command(queryId=mac_20240608144604_4395d68b-785d-4808-8c09-1732ad816350): show databases
INFO : Concurrency mode is disabled, not creating a lock manager
INFO : Semantic Analysis Completed (retrial = false)
INFO : Returning Hive schema: Schema(fieldSchemas:[FieldSchema(name:database_name, type:string, comment:from deserializer)], properties:null)
INFO : Completed compiling command(queryId=mac_20240608144604_4395d68b-785d-4808-8c09-1732ad816350); Time taken: 0.748 seconds
INFO : Concurrency mode is disabled, not creating a lock manager
INFO : Executing command(queryId=mac_20240608144604_4395d68b-785d-4808-8c09-1732ad816350): show databases
INFO : Starting task [Stage-0:DDL] in serial mode
INFO : Completed executing command(queryId=mac_20240608144604_4395d68b-785d-4808-8c09-1732ad816350); Time taken: 0.037 seconds
INFO : OK
INFO : Concurrency mode is disabled, not creating a lock manager
+----------------+
| database_name |
+----------------+
| default |
| test |
| tmp |
+----------------+
3 rows selected (1.113 seconds)
0: jdbc:hive2://localhost:10000>0: jdbc:hive2://localhost:10000> select * from test.login_data limit 3;
+----------------------+------------------------+------------------+----------------+
| login_data.logtime | login_data.account_id | login_data.ip | login_data.dt |
+----------------------+------------------------+------------------+----------------+
| 2019-07-15 00:00:00 | 102325 | 223.116.97.23 | 2019-07-15 |
| 2019-07-15 00:00:00 | 221977 | 223.104.247.162 | 2019-07-15 |
| 2019-07-15 00:00:00 | 223764 | 59.32.248.102 | 2019-07-15 |
+----------------------+------------------------+------------------+----------------+
3 rows selected (1.487 seconds)
3.2 pyhive连接获取数据示例
(myenv) ➜ ~ python
Python 3.12.3 (main, Apr 9 2024, 08:09:14) [Clang 15.0.0 (clang-1500.3.9.4)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from pyhive import hive
>>> conn = hive.Connection(host="localhost", port=10000, username="root")
>>> cursor = conn.cursor()
>>> cursor.execute('select * from test.login_data limit 3')
>>> for row in cursor.fetchall():
... print(row)
...
('2019-07-15 00:00:00', 102325, '223.116.97.23', '2019-07-15')
('2019-07-15 00:00:00', 221977, '223.104.247.162', '2019-07-15')
('2019-07-15 00:00:00', 223764, '59.32.248.102', '2019-07-15')
>>> cursor.close()
>>> conn.close()
完整示例:
from pyhive import hive
import logging# 配置日志记录
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)try:# 配置 Hive 连接参数host = 'localhost'port = 10000username = 'root'database = 'test'# 创建连接conn = hive.Connection(host=host, port=port, username=username, database=database)# 创建游标cursor = conn.cursor()# 执行查询query = 'select * from test.login_data limit 3'cursor.execute(query)# 获取查询结果results = cursor.fetchall()for row in results:print(row)except Exception as e:logger.error("Error occurred while connecting to Hive or executing query", exc_info=True)
finally:# 确保游标和连接在异常情况下也能正确关闭try:if cursor:cursor.close()except Exception as e:logger.error("Error occurred while closing cursor", exc_info=True)try:if conn:conn.close()except Exception as e:logger.error("Error occurred while closing connection", exc_info=True)
运行结果:
(myenv) ➜ tmp python test.py
INFO:pyhive.hive:USE `test`
INFO:pyhive.hive:select * from test.login_data limit 3
('2019-07-15 00:00:00', 102325, '223.116.97.23', '2019-07-15')
('2019-07-15 00:00:00', 221977, '223.104.247.162', '2019-07-15')
('2019-07-15 00:00:00', 223764, '59.32.248.102', '2019-07-15')
未解决问题
使用 Pycharm开发的时候提示如下报错:
这个应该是没有应用到我虚拟 myenv环境导致的,尝试新建一个新的解释器但是未成功,有么有知道怎么做的欢迎和我讨论。
参考
https://www.cnblogs.com/SunshineKimi/p/12969751.html
相关文章:

macbook本地部署 pyhive环境连接 hive用例
前言 公司的测试和生产环境中尚未提供基于Hive的客户端。若希望尝试操作Hive表,目前一个可行的方案是使用Python语言,通过借助pyhive库,您可以对Hive表进行各种操作。以下是一些示例记录供您参考。 一、pyhive是什么? PyHive是一…...

物理安全防护如何创新强化信息安全体系?
物理安全防护是信息安全体系的重要组成部分,它通过保护实体设施、设备和介质等,防止未授权访问、破坏、盗窃等行为,从而为信息系统提供基础的安全保障。要创新强化信息安全体系中的物理安全防护,可以从以下几个方面着手࿱…...

【JAVASE】日期与时间类(上)
一:概述 从JAVA SE 8开始提供了java.time包,该包中有专门处理日期和时间的类。 LocalDate LocalDateTime 和LocalTime 类的对象封装和日期、时间有关的数据,这三个类都是final类,而且不提供修改数据的方法,即这…...
如果需要精确的答案,请避免使用float和double
float和double主要为了科学计算和工程计算而设计,执行二进制浮点运算,这是为了在广泛的数值范围上提供较为精确的快速近似计算而精心设计的。然而,它们没有提供完全精确的结果,所以不适合用于需要精确结果的场合,尤其是…...

大模型,也在卷价格
“百模大战”已从算力战、规模战蔓延到了价格战。 5月15日,字节跳动宣布豆包主力模型(小于等于32K)在企业市场的定价只有0.0008元/千Tokens,0.8厘就能处理1500多个汉字,比行业便宜99.3%;5月21日࿰…...
开关电源中电感设计
开关电源设计中电感 只有充分理解电感在DC/DC电路中发挥的作用,才能更优的设计DC/DC电路。本文还包括对同步DC/DC及异步DC/DC概念的解释。 在开关电源的设计中电感的设计为工程师带来的许多的挑战。工程师不仅要选择电感值,还要考虑电感可承受的电流,绕线电阻,机械尺寸等…...

机器视觉——硬件常用基础知识
光源 机器视觉中光源的作用 1)强化特征,弱化背景 2)光源打得好,图好了,后期算法更简化 3)图好了,测试速度更高 各种光源的综合性能对比及为啥使用LED灯 光的颜色的选择 白色光:通常用…...
宝塔 php7.4 安装SQLserver扩展
一、加入微软源 curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssqlrelease.repo二、安装odbc驱动程序 yum install msodbcsql mssql-tools unixODBC-devel 三、安装php7.4对应的pdo_sqlsrv扩展包 # 下载 wget http://pecl.php.net/…...
C++中的常见I/O方式
目录 摘要 1. 标准输入输出(Standard I/O) 2. 文件输入输出(File I/O) 3. 字符串流(String Stream) 4. 低级文件I/O(Low-level File I/O) 5. 内存映射文件(Memory-Mapped File I/O) 6. 网络I/O(Network I/O) 服务器端 客户端 摘要 C++中的输入输出操作(…...

Java Web学习笔记23——Vue项目简介
Vue项目简介: Vue项目-创建: 命令行:vue create vue-project01 图形化界面:vue ui 在命令行中切换到项目文件夹中,然后执行vue ui命令。 只需要路由功能。这个路由功能,开始不是很理解。 创建项目部保存…...

[UE 虚幻引擎] DTLoadFbx 运行时加载FBX本地模型插件说明
本插件可以在打包后运行时动态加载FBX模型。 新建一个Actor 并添加一个 DT Runtime Fbx Component。 然后直接调用组件的函数 LoadFile 加载显示模型(注:不支持模型动画) FilePath : 加载模型的绝对路径。 Create Collision : 是否创建碰撞…...
mysql log_bin
MySQL 开启配置binlog以及通过binlog恢复数据 https://blog.csdn.net/weixin_44606481/article/details/133344235 CentoS7 安装篇十二:mysql主从搭建(xtrackbackup不停机搭建) https://blog.csdn.net/chengxuyuanjava123/article/details/1…...

数据整理操作及众所周知【数据分析】
各位大佬好 ,这里是阿川的博客,祝您变得更强 个人主页:在线OJ的阿川 大佬的支持和鼓励,将是我成长路上最大的动力 阿川水平有限,如有错误,欢迎大佬指正 Python 初阶 Python–语言基础与由来介绍 Python–…...
maven的install不报错但deploy到nexus报400错误
一.情况描述 mvn install工程正常构建完成,但我mvn deploy报400错误,局域网maven组件仓库nexus也是正常的,deploy的帐号密码都是对的。报错信息如下: [ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plu…...
WebSocket前端分页:技术深度、实践困境与未来展望
WebSocket前端分页:技术深度、实践困境与未来展望 在前端开发的广阔领域中,WebSocket前端分页技术以其独特的优势逐渐崭露头角。它不仅为开发者带来了全新的交互体验,也为用户带来了更加流畅和高效的信息获取方式。然而,这一技术…...

基于jeecgboot-vue3的Flowable流程-待办任务(一)
因为这个项目license问题无法开源,更多技术支持与服务请加入我的知识星球。 1、ToDo.data.ts的数据信息如下 import {BasicColumn} from //components/Table; import {FormSchema} from //components/Table; import { rules} from //utils/helper/validator; impor…...

计算机网络--传输层
计算机网络--计算机网络概念 计算机网络--物理层 计算机网络--数据链路层 计算机网络--网络层 计算机网络--传输层 计算机网络--应用层 1. 概述 1.1 传输层的意义 网络层可以把数据从一个主机传送到另一个主机,但是没有和进程建立联系。 传输层就是讲进程和…...

【Vue】普通组件的注册使用-局部注册
文章目录 一、组件注册的两种方式二、使用步骤三、练习 一、组件注册的两种方式 局部注册:只能在注册的组件内使用 ① 创建 .vue 文件 (三个组成部分) 以.vue结尾的组件,一般也叫做 单文件组件,即一个组件就是组件里的全部内容 ② 在使用的组…...

搞编程学习时是如何查找资料的?
刚开始学编程时,我通常用百度、360这样的搜索引擎去找资料。但后来我发现,根据想找的东西不同,用的搜索地方也得变。比如说,找编程学习的东西,我就不太用浏览器了,因为那儿广告太多,信息乱七八糟…...

2024年AI大模型训练数据白皮书作用
2024年AI大模型训练数据白皮书 在人工智能迅猛发展的今天,AI大模型的训练数据质量和管理成为影响其性能和应用效果的关键因素。《2024年AI大模型训练数据白皮书》为业内人士提供了一份详尽的指南,揭示了当前AI大模型训练数据的最新趋势、最佳实践以及未…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...

376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...

GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...

云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...