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连接调用方式相关推荐

  1. python 权限认证 impala_python操作具有kerberos认证的hive(impala)

    ▌前言 python中用于连接HiveServer2的客户端有3个:pyhs2,pyhive,impyla.官网的示例采用的是pyhs2,但pyhs2的官网已声明不再提供支持,建议使用impyla和p ...

  2. 连接端口 配置hive_Zeppelin带有Kerberos认证的Hive解释器的配置

    2.zeppelin连接Hive安装配置 zeppelin 版本0.8.2 ,hive版本:3.0.0 2.1.安装启动hive3 略 2.1.配置hiveserver2 如果需要配置zeppelin ...

  3. pyhive连接kerberos认证的hive

    目前,大多数的大数据集群之前是采用kerberos认证的,公司的大数据集群目前正在升级,认证方式由LDAP认证方式改变成为kerberos进行认证: 以下介绍如何将LDAP认证连接升级至KERBERO ...

  4. python中range和arange的区别_Python3中range , arange 和linspace 的异同

    python3中range , arange 和linspace 的相同点 这三个函数的相同点是: 都可以生成指定数量步长相同的一组数据,而且生成的对象都可以被迭代! 如果只是需要一组指定范围内步长相 ...

  5. python中小括号和中括号的区别_Python3中小括号()、中括号[]、花括号{}的区别详解...

    介绍 在Python语言中最常见的括号有三种,分别是:小括号().中括号[].花括号{}:其作用也不相同,分别用来代表不同的Python基本内置数据类型. 小括号() Python中的小括号(): 代 ...

  6. python获取网页源码被拒绝_Python3 请求网页源码 目标计算机积极拒绝,无法连接...

    代码: import urllib from urllib.request import urlopen from urllib.parse import urlencode url='http:// ...

  7. Hive Error : Java heap space 解决方案

    Hive Error : Java heap space 解决方案 参考文章: (1)Hive Error : Java heap space 解决方案 (2)https://www.cnblogs. ...

  8. hive和mysql的区别_hive和mysql的区别是什么

    hive和mysql的区别是什么 hive和mysql的区别有: 1.查询语言不同:hive是hql语言,mysql是sql语句: 2.数据存储位置不同:hive是把数据存储在hdfs上,而mysql ...

  9. c语言与java类型转换_C语言与JAVA理论区别

    C语言与JAVA理论区别 C语言的设计目标是提供一种能以简易的方式编译.处理低级存储器.产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言.Java技术具有卓越的通用性.高效性.平台移植性和 ...

最新文章

  1. JIRA 6.3.6版本部署
  2. linux 关闭密码复杂化,Linux系统设置复杂密码策略方法
  3. javascript 的默认对象
  4. 笔记本键盘维修[原创]
  5. SpringBoot前端Ajax以JSON格式获取后台数据
  6. 化学人学python有前途吗-从化学实验室到数据分析师,月薪翻倍后的转行经验总结!...
  7. 安装IIS服务 找不到staxmem.dll文件的解决方法
  8. 如何写一手好 SQL!!!
  9. 关于使用easyui dataGrid遇到的小bug问题
  10. [Python可视化] pyecharts安装入门及绘制中国贵州地图
  11. MySQL数据库教程之十四:MySQL触发器
  12. 关于小米手机网站抢购的一点技术分析
  13. webrtc-sdp编码信息协商
  14. Google Analytics中的基本度量四 “页面停留时间和网站停留时间
  15. julia 编程语言_Julia(Julia)编程语言入门
  16. 吴恩达-deep learning 02.改善深层神经网络:优化算法 (Optimization algorithms)Week2
  17. java的setbounds_Java Label.setBounds方法代码示例
  18. Gym 100015B Ball Painting
  19. upc 生命曲线 线段树+lazy
  20. 允许应用更改计算机,解决电脑总弹出“是否允许程序对计算机进行更改”

热门文章

  1. antd 选择文件夹_antd 手动上传文件
  2. c++与java中文互转_java与C++中文字符的问题
  3. 设置android 触摸灵敏,3D Press触屏灵敏度设置教程 魅族PRO 6 3D Press触控力度怎么调...
  4. mysql查到库怎么进入表_mysql如何进入数据库查看所有表
  5. 里的type_拥有Type-C接口等于拥有PD快充?当然不是!
  6. windowfullscreen后键盘布局顶上去_什么才是第一生产力-2.4G高斯83G双模机械键盘终入囊...
  7. linux 内存泄露 工具,Linux Kernel模块内存泄露分析
  8. C++socket编程(四):4.1 跨平台封装XTcp类接口
  9. 数据挖掘原理与算法_资料 | 数据挖掘:概念、模型、方法和算法(第2版)/ 国外计算机科学经典教材...
  10. crm系统是什么很棒ec实力_易观发布2019中国CRM实力矩阵,EC成为领先者