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

安装完成后,你可以检查 python3pip3 是否已经安装:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/347423.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从零到一建设数据中台(番外篇)- 数据中台UI欣赏

番外篇 - 数据中台 UI 欣赏 话不多说&#xff0c;直接上图。 数据目录的重要性&#xff1a; 数据目录是一种关键的信息管理工具&#xff0c;它为组织提供了一个全面的、集中化的数据资产视图。 它不仅记录了数据的存储位置&#xff0c;还详细描述了数据的结构、内容、来源、使…

细说ARM MCU的串口接收数据的实现过程

目录 一、硬件及工程 1、硬件 2、软件目的 3、创建.ioc工程 二、 代码修改 1、串口初始化函数MX_USART2_UART_Init() &#xff08;1&#xff09;MX_USART2_UART_Init()串口参数初始化函数 &#xff08;2&#xff09;HAL_UART_MspInit()串口功能模块初始化函数 2、串口…

批量申请SSL证书如何做到既方便成本又最低

假如您手头拥有1千个域名&#xff0c;并且打算为每一个域名搭建网站&#xff0c;那么在当前的网络环境下&#xff0c;您必须确保这些网站通过https的方式提供服务。这意味着&#xff0c;您将为每一个域名申请SSL证书&#xff0c;以确保网站数据传输的安全性和可信度。那么&…

面试-NLP八股文

机器学习 交叉熵损失&#xff1a; L − ( y l o g ( y ^ ) ( 1 − y ) l o g ( 1 − ( y ^ ) ) L-(ylog(\hat{y}) (1-y)log(1-(\hat{y})) L−(ylog(y^​)(1−y)log(1−(y^​))均方误差&#xff1a; L 1 n ∑ i 1 n ( y i − y ^ i ) 2 L \frac{1}{n}\sum\limits_{i1}^{n}…

【ai】openai-quickstart 配置pycharm工程

之前都是本地执行脚本【AI】指定python3.10安装Jupyter Lab环境为:C:\Users\zhangbin\AppData\Local\Programs\Python\Python310 参考之前创建的python工程 使用的是局部的私有的虚拟环境 pycharm给出的解释器 直接使用现有的,不new了 可以选择3.10 :可以选虚拟的:

Rust-02-变量与可变性

在Rust中&#xff0c;变量和可变性是两个重要的概念。 变量&#xff1a;变量是用于存储数据的标识符。在Rust中&#xff0c;变量需要声明其类型&#xff0c;例如&#xff1a; let x: i32 5; // 声明一个名为x的变量&#xff0c;类型为i32&#xff08;整数&#xff09;&#…

SpringCloud 前端-网关-微服务-微服务间实现信息共享传递

目录 1 网关获取用户校验信息并保存至请求头&#xff08;前端-网关&#xff09; 2 微服务获取网关中的用户校验信息&#xff08;网关-微服务&#xff09; 2.1 一般的做法是在公共的module中添加&#xff0c;此处示例为common 公共配置module中添加 2.2 定义拦截器 2.3 定义…

简单通用的系统安装、备份、还原方法,支持 ARM 系统【Ventory+FirePE+DiskGenius】

文章目录 0. 简介1. 制作 Ventory 启动盘1.1. 下载 Ventory1.2. 制作 Ventory 启动盘 2. 添加 FirePE 等系统镜像到启动盘2.1. 下载 FirePE2.2. 导出 .iso 系统镜像文件2.3. .iso 系统镜像文件添加至启动盘 3. 启动 FirePE 等系统镜像3.1. 在 bios 中选择启动盘启动3.2. 启动系…

# RocketMQ 实战:模拟电商网站场景综合案例(八)

RocketMQ 实战&#xff1a;模拟电商网站场景综合案例&#xff08;八&#xff09; 一、RocketMQ 实战&#xff1a;模拟电商网站场景综合案例–下单异常问题演示 1.png 1、如果订单在扣减库存、扣减优惠券、扣减余额后&#xff0c;在 未 确认订单 前&#xff0c;出现了异常&am…

vue+element el-select动态加减框数量及验证下拉框选项动态置灰(选中行的下拉框换个值后,原值没办法监控这个问题也解决了)

1效果: 2部分主要(HTML): 1:这个位置主要就是看看方法什么的吧,还有大概的结构 2:change"sort_Change(item,tablelists.orderbyList)这两个参数(都有大用): (1)item:代表每次你操作的这个数据 (2)tablelists.orderbyList:代表你这一共有几行数据(上边这个例子就会得到一个…

LCD电子广告牌课程设计

概述 1.1课程设计简介 亮丽实用的广告牌可以给我们的生活添加光彩、可以给店铺招揽生意。传统的广告牌都是固定的汉字&#xff0c;并且时间长了会掉色&#xff0c;使汉字模糊难认&#xff0c;这就给我的生活带来很多的不便。尤其到了晚上传统广告牌就会失去其该有的作用。所以在…

2024年安全现状报告

2024 年安全现状报告有些矛盾。尽管安全专业人员的道路困难重重&#xff0c;比如说严格的合规要求、不断升级的地缘政治紧张局势和更复杂的威胁环境&#xff0c;但整个行业还是在取得进展。 许多组织表示&#xff0c;与前几年相比&#xff0c;网络安全变得更容易管理。组织之间…

AI赋能银行国际结算审单:合合信息抽取技术的实践与应用

官.网地址&#xff1a;合合TextIn - 合合信息旗下OCR云服务产品 时下&#xff0c;银行国际业务是金融体系的重要组成部分&#xff0c;涵盖了外汇交易、国际结算、贸易融资、跨境投资等领域&#xff0c;这些业务对于国际贸易和全球经济发展具有重要作用。国际业务部门单据、凭证…

OpenGL系列(五)纹理贴图

概述 OpenGL纹理是一种在三维图形中应用纹理映射的技术。纹理是一张图像&#xff0c;可以应用到三维模型的表面上&#xff0c;从而使得模型看起来更加真实和具有细节。通过纹理映射&#xff0c;可以将图像的像素值与三维模型的顶点进行匹配&#xff0c;从而为模型的表面增加细节…

验证码识别接口、多种样式验证码识别接口、中英文验证码识别接口

验证码识别接口、多种样式验证码识别接口、中英文验证码识别接口 本文提供一个基于OCR和机器学习的验证码识别接口&#xff0c;能够识别较复杂的中文、英文验证码&#xff0c;在OCR的基础上针对验证码进行算法优化。本接口是收费的&#xff08;最低0.5分1次调用&#xff0c;试…

23种设计模式之代理模式

代理模式 1、概念 代理模式&#xff1a;给某一个对象提供一个代理或占位符&#xff0c;并由代理对象来控制对原对象的访问 代理模式是常用的结构型设计模式之一&#xff0c;在Java RMI、Web Service、Spring AOP等技术和框架中都使用了代理模式 2、代理模式结构 Subject&a…

解析 Spring 框架中的三种 BeanName 生成策略

在 Spring 框架中&#xff0c;定义 Bean 时不一定需要指定名称&#xff0c;Spring 会智能生成默认名称。本文将介绍 Spring 的三种 BeanName 生成器&#xff0c;包括在 XML 配置、Java 注解和组件扫描中使用的情况&#xff0c;并解释它们如何自动创建和管理 Bean 名称。 1. Be…

Nodejs 第七十七章(MQ高级)

MQ介绍和基本使用在75章介绍过了&#xff0c;不再重复 MQ高级用法-延时消息 什么是延时消息? Producer 将消息发送到 MQ 服务端&#xff0c;但并不期望这条消息立马投递&#xff0c;而是延迟一定时间后才投递到 Consumer 进行消费&#xff0c;该消息即延时消息 插件安装 R…

业务安全蓝军测评标准解读—业务安全体系化

目录 1.前言 2.业务蓝军测评标准 2.1 业务安全脆弱性评分(ISVS) 2.2 ISVS评分的参考意义 2.3 纵向对比 2.4 横向对比 3.业务蓝军测评案例 3.1 APP虚假安装案例 3.1.1 定义测评对象和攻击目标 3.1.2 制定攻击方案 3.1.3 执行攻击并评估 3.2 人脸识别绕过案例 3.2.…

STM32硬件接口I2C应用(基于MP6050)

目录 概述 1 STM32Cube控制配置I2C 1.1 I2C参数配置 1.2 使用STM32Cube产生工程 2 HAL库函数介绍 2.1 初始化函数 2.2 写数据函数 2.3 读数据函数 3 认识MP6050 3.1 MP6050功能介绍 3.2 加速计测量寄存器 ​编辑3.3 温度计量寄存器 3.4 陀螺仪测量寄存器 4 MP60…