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计算程序运行时间的方法
Dec 13 Python
Python导出数据到Excel可读取的CSV文件的方法
May 12 Python
Python中内建函数的简单用法说明
May 05 Python
Python2.7读取PDF文件的方法示例
Jul 13 Python
python2.7到3.x迁移指南
Feb 01 Python
python使用rpc框架gRPC的方法
Aug 24 Python
对python中的six.moves模块的下载函数urlretrieve详解
Dec 19 Python
python添加模块搜索路径和包的导入方法
Jan 19 Python
python中的单引号双引号区别知识点总结
Jun 23 Python
Python爬虫运用正则表达式的方法和优缺点
Aug 25 Python
python list等分并从等分的子集中随机选取一个数
Nov 16 Python
python 使用pandas读取csv文件的方法
Dec 24 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查看session内容的函数
2008/08/27 PHP
全世界最小的php网页木马一枚 附PHP木马的防范方法
2009/10/09 PHP
ThinkPHP表单自动提交验证实例教程
2014/07/18 PHP
PHP递归遍历文件夹去除注释并压缩php源代码的方法示例
2018/05/23 PHP
js字母大小写转换实现方法总结
2013/11/13 Javascript
JS获取文本框,下拉框,单选框的值的简单实例
2014/02/26 Javascript
基于javascript实现判断移动终端浏览器版本信息
2014/12/09 Javascript
jQuery回调函数的定义及用法实例
2014/12/23 Javascript
基于Jquery实现焦点图淡出淡入效果
2015/11/30 Javascript
浅析AngularJS Filter用法
2015/12/28 Javascript
浅析Bootstrip的select控件绑定数据的问题
2016/05/10 Javascript
JS查找数组中重复元素的方法详解
2017/06/14 Javascript
基于JavaScript+HTML5 实现打地鼠小游戏逻辑流程图文详解(附完整代码)
2017/11/02 Javascript
javascript实现最长公共子序列实例代码
2018/02/05 Javascript
浅谈Vue2.0中v-for迭代语法的变化(key、index)
2018/03/06 Javascript
jQuery实现滑动星星评分效果(每日分享)
2019/11/13 jQuery
React 实现车牌键盘的示例代码
2019/12/20 Javascript
基于ajax及jQuery实现局部刷新过程解析
2020/09/12 jQuery
[49:35]2018DOTA2亚洲邀请赛3月30日 小组赛A组 KG VS TNC
2018/03/31 DOTA
Python上下文管理器和with块详解
2017/09/09 Python
Python安装图文教程 Pycharm安装教程
2018/03/27 Python
python3 判断列表是一个空列表的方法
2018/05/04 Python
Python中的单继承与多继承实例分析
2018/05/10 Python
简单了解Python生成器是什么
2019/07/02 Python
Flask-WTF表单的使用方法
2019/07/12 Python
python中将两组数据放在一起按照某一固定顺序shuffle的实例
2019/07/15 Python
python3.6连接mysql数据库及增删改查操作详解
2020/02/10 Python
OpenCV 使用imread()函数读取图片的六种正确姿势
2020/07/09 Python
新西兰领先的鞋类和靴子网上商城:Merchant 1948
2017/09/08 全球购物
澳大利亚网上买书:Angus & Robertson
2019/07/21 全球购物
高中自我评价分享
2013/12/05 职场文书
高三毕业寄语
2014/04/10 职场文书
护士节策划方案
2014/05/19 职场文书
婚礼答谢词
2015/01/04 职场文书
2015年初中教务处工作总结
2015/07/21 职场文书
大学生,三分钟即兴演讲稿
2019/07/22 职场文书