python调用hive与java调用区别_python3.6.5基于kerberos认证的hive和hdfs连接调用方式
1. Kerberos是一种计算机网络授权协议,用来在非安全网络中,对个人通信以安全的手段进行身份认证。具体请查阅官网
2. 需要安装的包(基于centos)
yum install libsasl2-dev
yum install gcc-c++ python-devel.x86_64 cyrus-sasl-devel.x86_64
yum install python-devel
yum install krb5-devel
yum install python-krbV
pip install krbcontext==0.9
pip install thrift==0.9.3
pip install thrift-sasl==0.2.1
pip install impyla==0.14.1
pip install hdfs[kerberos]
pip install pykerberos==1.2.1
3. /etc/krb5.conf 配置, 在这个文件里配置你服务器所在的域
4./etc/hosts 配置, 配置集群机器和域所在机器
5. 通过kinit 生成 ccache_file或者keytab_file
6. 连接hive代码如下
import os
from impala.dbapi import connect
from krbcontext import krbcontext
keytab_path = os.path.split(os.path.realpath(__file__))[0] + '/xxx.keytab'
principal = 'xxx'
with krbcontext(using_keytab=True,principal=principal,keytab_file=keytab_path):
conn = connect(host=ip, port=10000, auth_mechanism='GSSAPI', kerberos_service_name='hive')
cursor = conn.cursor()
cursor.execute('SELECT * FROM default.books')
for row in cursor:
print(row)
7. 连接hdfs代码如下
from hdfs.ext.kerberos import KerberosClient
from krbcontext import krbcontext
hdfs_url = 'http://' + host + ':' + port
data = self._get_keytab(sso_ticket)
self._save_keytab(data)
with krbcontext(using_keytab=True, keytab_file=self.keytab_file, principal=self.user):
self.client = KerberosClient(hdfs_url)
self.client._list_status(path).json()['FileStatuses']['FileStatus'] #获取path下文件及文件夹
8. 注:krbcontext这个包官方说支持python2,但是python3也能用
这个hdfs_url 一定要带"http://"不然会报错
9. 我新增了一些配置文件配置,具体的操作如下
python3.6.5基于kerberos认证的hdfs,hive连接调用(含基础环境配置)
1需要准备的环境
yum包(需要先装yum包,再装python包,不然会有问题)
yum install openldap-clients -y
yum install krb5-workstation krb5-libs -y
yum install gcc-c++ python-devel.x86_64 cyrus-sasl-devel.x86_64
yum install python-devel
yum install krb5-devel
yum install python-krbV
yum install cyrus-sasl-plain cyrus-sasl-devel cyrus-sasl-gssapi
python包安装(pip或pip3,请根据实际情况选择)
pip install krbcontext==0.9
pip install thrift==0.9.3
pip install thrift-sasl==0.2.1
pip install impyla==0.14.1
pip install hdfs[kerberos]
pip install pykerberos==1.2.1
配置/etc/hosts文件(需要把大数据平台的机器和域名进行配置)
10.xxx.xxx.xxx name-1 panel.test.com
10.xxx.xxx.xxx name-1
配置/etc/krb5.conf(具体查看kerberos服务配置中心)
参考配置(仅供参考,具体更具自己实际配置修改)
[libdefaults]
renew_lifetime = 9d
forwardable = true
default_realm = PANEL.COM
ticket_lifetime = 24h
dns_lookup_realm = false
dns_lookup_kdc = false
default_ccache_name = /tmp/krb5cc_%{uid}
[logging]
default = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind1.log
kdc = FILE:/var/log/krb5kdc1.log
[realms]
PANEL.COM = {
admin_server = panel.test1.com
kdc = panel.test1.com
}
连接代码:
hdfs:
import json, os
from hdfs.ext.kerberos import KerberosClient
from krbcontext import krbcontext
def _connect(self, host, port, sso_ticket=None):
try:
hdfs_url = 'http://' + host + ':' + port
active_str = 'kinit -kt {0} {1}'.format(self.keytab_file, self.user)
# 激活当前kerberos用户认证,因为python缓存机制,切换用户,这个缓存不会自动切换,需要手动处理下
os.system(active_str)
with krbcontext(using_keytab=True, keytab_file=self.keytab_file, principal=self.user):
self.client = KerberosClient(hdfs_url)
except Exception as e:
raise e
hive
import os
from krbcontext import krbcontext
from impala.dbapi import connect
from auto_model_platform.settings import config
def _connect(self, host, port, sso_ticket=None):
try:
active_str = 'kinit -kt {0} {1}'.format(self.keytab_file, self.user)
# 同hdfs
os.system(active_str)
with krbcontext(using_keytab=True, principal=self.user, keytab_file=self.keytab_file):
self.conn = connect(host=host, port=port, auth_mechanism='GSSAPI', kerberos_service_name='hive')
self.cursor = self.conn.cursor()
except Exception as e:
raise e
总结
我在做的时候也遇到很多坑,其实在这个需要理解其中原理,比如kerberos的机制和对应命令
如果是做基础平台用,用多用户切换的情况,建议不要用python,因为一点都不友好,官方包问题很多,我都改用java的jdbc去操作hdfs和hive了
如果只是自己测试和和做算法研究,还是可以用的,因为这个代码简单,容易实现
补充
kinit命令
kinit -kt xxxx.keytab #激活xxxx用户当前缓存
kinit list #查看当前缓存用户
以上这篇python3.6.5基于kerberos认证的hive和hdfs连接调用方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持随便开发网。
python调用hive与java调用区别_python3.6.5基于kerberos认证的hive和hdfs连接调用方式相关推荐
- python 权限认证 impala_python操作具有kerberos认证的hive(impala)
▌前言 python中用于连接HiveServer2的客户端有3个:pyhs2,pyhive,impyla.官网的示例采用的是pyhs2,但pyhs2的官网已声明不再提供支持,建议使用impyla和p ...
- 连接端口 配置hive_Zeppelin带有Kerberos认证的Hive解释器的配置
2.zeppelin连接Hive安装配置 zeppelin 版本0.8.2 ,hive版本:3.0.0 2.1.安装启动hive3 略 2.1.配置hiveserver2 如果需要配置zeppelin ...
- pyhive连接kerberos认证的hive
目前,大多数的大数据集群之前是采用kerberos认证的,公司的大数据集群目前正在升级,认证方式由LDAP认证方式改变成为kerberos进行认证: 以下介绍如何将LDAP认证连接升级至KERBERO ...
- python中range和arange的区别_Python3中range , arange 和linspace 的异同
python3中range , arange 和linspace 的相同点 这三个函数的相同点是: 都可以生成指定数量步长相同的一组数据,而且生成的对象都可以被迭代! 如果只是需要一组指定范围内步长相 ...
- python中小括号和中括号的区别_Python3中小括号()、中括号[]、花括号{}的区别详解...
介绍 在Python语言中最常见的括号有三种,分别是:小括号().中括号[].花括号{}:其作用也不相同,分别用来代表不同的Python基本内置数据类型. 小括号() Python中的小括号(): 代 ...
- python获取网页源码被拒绝_Python3 请求网页源码 目标计算机积极拒绝,无法连接...
代码: import urllib from urllib.request import urlopen from urllib.parse import urlencode url='http:// ...
- Hive Error : Java heap space 解决方案
Hive Error : Java heap space 解决方案 参考文章: (1)Hive Error : Java heap space 解决方案 (2)https://www.cnblogs. ...
- hive和mysql的区别_hive和mysql的区别是什么
hive和mysql的区别是什么 hive和mysql的区别有: 1.查询语言不同:hive是hql语言,mysql是sql语句: 2.数据存储位置不同:hive是把数据存储在hdfs上,而mysql ...
- c语言与java类型转换_C语言与JAVA理论区别
C语言与JAVA理论区别 C语言的设计目标是提供一种能以简易的方式编译.处理低级存储器.产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言.Java技术具有卓越的通用性.高效性.平台移植性和 ...
最新文章
- JIRA 6.3.6版本部署
- linux 关闭密码复杂化,Linux系统设置复杂密码策略方法
- javascript 的默认对象
- 笔记本键盘维修[原创]
- SpringBoot前端Ajax以JSON格式获取后台数据
- 化学人学python有前途吗-从化学实验室到数据分析师,月薪翻倍后的转行经验总结!...
- 安装IIS服务 找不到staxmem.dll文件的解决方法
- 如何写一手好 SQL!!!
- 关于使用easyui dataGrid遇到的小bug问题
- [Python可视化] pyecharts安装入门及绘制中国贵州地图
- MySQL数据库教程之十四:MySQL触发器
- 关于小米手机网站抢购的一点技术分析
- webrtc-sdp编码信息协商
- Google Analytics中的基本度量四 “页面停留时间和网站停留时间
- julia 编程语言_Julia(Julia)编程语言入门
- 吴恩达-deep learning 02.改善深层神经网络:优化算法 (Optimization algorithms)Week2
- java的setbounds_Java Label.setBounds方法代码示例
- Gym 100015B Ball Painting
- upc 生命曲线 线段树+lazy
- 允许应用更改计算机,解决电脑总弹出“是否允许程序对计算机进行更改”
热门文章
- antd 选择文件夹_antd 手动上传文件
- c++与java中文互转_java与C++中文字符的问题
- 设置android 触摸灵敏,3D Press触屏灵敏度设置教程 魅族PRO 6 3D Press触控力度怎么调...
- mysql查到库怎么进入表_mysql如何进入数据库查看所有表
- 里的type_拥有Type-C接口等于拥有PD快充?当然不是!
- windowfullscreen后键盘布局顶上去_什么才是第一生产力-2.4G高斯83G双模机械键盘终入囊...
- linux 内存泄露 工具,Linux Kernel模块内存泄露分析
- C++socket编程(四):4.1 跨平台封装XTcp类接口
- 数据挖掘原理与算法_资料 | 数据挖掘:概念、模型、方法和算法(第2版)/ 国外计算机科学经典教材...
- crm系统是什么很棒ec实力_易观发布2019中国CRM实力矩阵,EC成为领先者