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中的JSON模块
Apr 08 Python
python保存字符串到文件的方法
Jul 01 Python
深入解析Python中的list列表及其切片和迭代操作
Mar 13 Python
Python中表示字符串的三种方法
Sep 06 Python
python Crypto模块的安装与使用方法
Dec 21 Python
Django学习笔记之ORM基础教程
Mar 27 Python
解决python3 json数据包含中文的读写问题
May 10 Python
django缓存配置的几种方法详解
Jul 16 Python
python实现狄克斯特拉算法
Jan 17 Python
解决json中ensure_ascii=False的问题
Apr 03 Python
pyMySQL SQL语句传参问题,单个参数或多个参数说明
Jun 06 Python
Qt自定义Plot实现曲线绘制的详细过程
Nov 02 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
Smarty模板快速入门
2007/01/04 PHP
PHP Memcached应用实现代码
2010/02/08 PHP
PHP中设置一个严格30分钟过期Session面试题的4种答案
2014/07/30 PHP
PHP结合jQuery插件ajaxFileUpload实现异步上传文件实例
2020/08/17 PHP
php微信公众号开发模式详解
2016/11/28 PHP
php自定义扩展名获取函数示例
2016/12/12 PHP
奇妙的js
2007/09/24 Javascript
写了10年的Javascript也未必全了解的连续赋值运算
2011/03/25 Javascript
jquery 获取标签名(tagName)示例代码
2013/07/11 Javascript
JQuery表单验证插件EasyValidator用法分析
2014/11/15 Javascript
关于JS中prototype的理解
2015/09/07 Javascript
快速掌握Node.js事件驱动模型
2016/03/21 Javascript
Node.js Sequelize如何实现数据库的读写分离
2016/10/23 Javascript
基于vue2框架的机器人自动回复mini-project实例代码
2017/06/13 Javascript
在vue-cli脚手架中配置一个vue-router前端路由
2017/07/03 Javascript
JavaScript中正则表达式判断匹配规则及常用方法
2017/08/03 Javascript
jQuery实现全选、反选和不选功能
2017/08/16 jQuery
微信小程序自定义组件实现环形进度条
2020/11/17 Javascript
用Node写一条配置环境的指令
2019/11/14 Javascript
JavaScript this使用方法图解
2020/02/04 Javascript
js实现页面导航层级指示效果
2020/08/25 Javascript
Vue.js桌面端自定义滚动条组件之美化滚动条VScroll
2020/12/01 Vue.js
全面解析Python的While循环语句的使用方法
2015/10/13 Python
Python语言实现将图片转化为html页面
2017/12/06 Python
如何用C代码给Python写扩展库(Cython)
2019/05/17 Python
numpy创建单位矩阵和对角矩阵的实例
2019/11/29 Python
Python3批量创建Crowd用户并分配组
2020/05/20 Python
Python基于argparse与ConfigParser库进行入参解析与ini parser
2021/02/02 Python
Baby Tulai澳大利亚:美国婴儿背带品牌
2018/10/15 全球购物
毕业生医学检验求职信
2013/10/16 职场文书
元旦红领巾广播稿
2014/02/19 职场文书
简单通用的简历自我评价
2014/09/21 职场文书
交警作风整顿剖析材料
2014/10/11 职场文书
党员学习群众路线心得体会
2014/11/04 职场文书
2014年党小组工作总结
2014/12/20 职场文书
2015年酒店工作总结范文
2015/04/07 职场文书