python3.6.5基于kerberos认证的hive和hdfs连接调用方式


Posted in Python onJune 06, 2020

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 相关文章推荐
跟老齐学Python之复习if语句
Oct 02 Python
Python文档生成工具pydoc使用介绍
Jun 02 Python
Python安装图文教程 Pycharm安装教程
Mar 27 Python
Django读取Mysql数据并显示在前端的实例
May 27 Python
python绘制散点图并标记序号的方法
Dec 11 Python
python爬虫获取百度首页内容教学
Dec 23 Python
django在保存图像的同时压缩图像示例代码详解
Feb 11 Python
Pytorch .pth权重文件的使用解析
Feb 14 Python
利用Python制作动态排名图的实现代码
Apr 09 Python
Python虚拟环境的创建和使用详解
Sep 07 Python
Python基于Opencv识别两张相似图片
Apr 25 Python
Python 居然可以在 Excel 中画画你知道吗
Feb 15 Python
python访问hdfs的操作
Jun 06 #Python
Python API 操作Hadoop hdfs详解
Jun 06 #Python
python读取hdfs上的parquet文件方式
Jun 06 #Python
Python连接HDFS实现文件上传下载及Pandas转换文本文件到CSV操作
Jun 06 #Python
完美解决python针对hdfs上传和下载的问题
Jun 05 #Python
python读取hdfs并返回dataframe教程
Jun 05 #Python
python pymysql链接数据库查询结果转为Dataframe实例
Jun 05 #Python
You might like
PHP遍历数组的方法汇总
2015/04/30 PHP
SWFObject Flash js调用类
2008/07/08 Javascript
jQuery 使用手册(五)
2009/09/23 Javascript
ExtJs中gridpanel分组后组名排序实例代码
2013/12/02 Javascript
jquery实现点击向下展开菜单项(伸缩导航)效果
2015/08/22 Javascript
js和jquery实现监听键盘事件示例代码
2020/06/24 Javascript
使用jQuery或者原生js实现鼠标滚动加载页面新数据
2016/03/06 Javascript
原生js实现autocomplete插件
2016/04/14 Javascript
原生js仿浏览器滚动条效果
2017/03/02 Javascript
axios学习教程全攻略
2017/03/26 Javascript
JS+CSS实现网页加载中的动画效果
2017/10/27 Javascript
NodeJS实现不可逆加密与密码密文保存的方法
2018/03/16 NodeJs
vue和webpack安装命令详解
2018/06/15 Javascript
Vue2.0 实现页面缓存和不缓存的方式
2019/11/12 Javascript
Python实现在线程里运行scrapy的方法
2015/04/07 Python
在Python中使用next()方法操作文件的教程
2015/05/24 Python
Python中str.format()详解
2017/03/12 Python
同时安装Python2 & Python3 cmd下版本自由选择的方法
2017/12/09 Python
numpy找出array中的最大值,最小值实例
2018/04/03 Python
解决Python获取字典dict中不存在的值时出错问题
2018/10/17 Python
PyCharm 创建指定版本的 Django(超详图解教程)
2019/06/18 Python
Python操作redis和mongoDB的方法
2019/12/19 Python
Pytorch 多块GPU的使用详解
2019/12/31 Python
python3实现raspberry pi(树莓派)4驱小车控制程序
2020/02/12 Python
结束运行python的方法
2020/06/16 Python
浅谈keras2 predict和fit_generator的坑
2020/06/17 Python
HTML5的结构和语义(5):内嵌媒体
2008/10/17 HTML / CSS
Johnston & Murphy官网: 约翰斯顿·墨菲牛津总统鞋
2018/01/09 全球购物
化工工艺专业求职信
2013/09/22 职场文书
国贸类专业毕业生的求职信分享
2013/12/08 职场文书
户外婚礼策划方案
2014/02/08 职场文书
一位农村小子的自荐信
2014/04/07 职场文书
员工保密承诺书
2014/05/28 职场文书
网站出售协议书范文
2014/10/10 职场文书
学生检讨书范文
2015/01/27 职场文书
Python re.sub 反向引用的实现
2021/07/07 Python