通过pyhive连接hive需要的Python包

本文介绍了在Windows上使用pyhive连接Hive时遇到的SASL启动失败问题,提供了编译sasl包和管理员权限下修改注册表的解决方案。解决步骤包括下载预编译包、执行注册表修改命令,以及清理隐藏文件。

1.通过pyhive连接hive需要的Python包:
3.1 pyhive
3.2 thrift
3.3 sasl
共需要三个包

2.连接Hive
from pyhive import hive
import pandas as pd
cnn=hive.Connection(host=‘localhost’, port=‘10000’, username=‘hive’)
cursor=cnn.cursor()
cursor.execute(“show databases”)
data=pd.DataFrame(cursor.fetchall())

其中sasl在Windows安装下安装需要编译环境,为了方便可直接从https://www.lfd.uci.edu/~gohlke/pythonlibs/#sasl下载编译好的包,直接进行安装,比如

C:>pip install sasl-0.2.1-cp37-cp37m-win_amd64.whl

安装完毕,执行代码会报以下错误

from pyhive import hive
conn = hive.Connection(host=‘172.100.0.11’,port=10000)
Traceback (most recent call last):
File “”, line 1, in
File “…\Python37\lib\site-packages\pyhive\hive.py”, line 192, in init
self.transport.open()
File "…\Python37\lib\site-packages\thrift_sasl_init
.py", line 79, in open
message=(“Could not start SASL: %s” % self.sasl.getError()))
thrift.transport.TTransport.TTransportException: Could not start SASL: b’Error in sasl_client_start (-12) SASL library is not initialized

【解决方案】
先直接贴出解决方案,后面再给出分析过程。在Windows中使用管理员权限打开控制台,在控制执行一段命令即可,操作如下。

C:\Windows\system32> FOR /F “usebackq delims=” %A IN (python -c "from importlib import util;import os;print(os.path.join(os.path.dirname(util.find_spec('sasl').origin),'sasl2'))") DO (
REG ADD “HKEY_LOCAL_MACHINE\SOFTWARE\Carnegie Mellon\Project Cyrus\SASL Library” /v SearchPath /t REG_SZ /d “%A”
)

datax 报错 File “datax.py”, line 114 print readerRef
解决方案:更换安装目录下bin的对应文件

datax.py, dxprof.y, perftrace.py

/home/datax/plugin/reader/._hdfsreader/plugin.json]不存在. 请检查您的配置文
解决:

但是并未在提示目录找到指定文件

需要通过命令行查看是否有._开头的文件

在datax/plugin目录下执行

find ./* -type f -name “._*er”

将查到的文件全部删除,可通过此命令执行

nd ./* -type f -name “._*er”|xargs rm -rf

再次运行命令即可正常执行 :)

### 使用 PyHive 连接 Hive 并将查询结果导出为 CSV 文件 以下是通过 `PyHive` 库连接 Hive 数据库并将查询结果保存为 CSV 文件的具体方法: #### 安装依赖库 在开始之前,需要确保已安装必要的 Python 库。可以通过以下命令安装所需的库: ```bash pip install pyhive[hive] csv pandas ``` #### 示例代码 下面是一个完整的代码示例,展示如何使用 `PyHive` 和标准库 `csv` 来实现这一功能。 ```python from pyhive import hive import csv # 创建 Hive 连接 conn = hive.Connection(host="localhost", port=10000, username="your_username") # 创建游标对象 cursor = conn.cursor() # 编写 SQL 查询语句 query = "SELECT column1, column2, column3 FROM your_table" # 执行查询 cursor.execute(query) # 获取字段名称作为 CSV 的头部信息 column_names = [desc[0] for desc in cursor.description] # 将查询结果写入 CSV 文件 with open('output.csv', 'w', newline='', encoding='utf-8') as csvfile: writer = csv.writer(csvfile) # 写入列名 writer.writerow(column_names) # 遍历查询结果并逐行写入文件 for row in cursor.fetchall(): writer.writerow(row) # 关闭游标和连接 cursor.close() conn.close() ``` 此代码实现了以下几个主要步骤: 1. **建立连接**:通过 `pyhive.hive.Connection` 方法创建与 Hive连接[^1]。 2. **执行查询**:利用游标的 `execute()` 方法运行指定的 SQL 查询[^2]。 3. **获取元数据**:从游标的描述属性中提取字段名用于构建 CSV 头部信息[^2]。 4. **写入 CSV 文件**:借助 Python 自带的 `csv` 模块完成数据存储操作[^3]。 5. **资源清理**:关闭游标以及数据库连接以释放资源[^1]。 #### 注意事项 - 替换 `"localhost"`、`"your_username"` 及其他占位符为你实际环境中的配置参数。 - 如果目标表含有大量记录,则考虑分批读取而非一次性加载全部数据至内存中处理。 - 对于更复杂的场景可以引入第三方工具如 Pandas 提升效率与灵活性[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值