栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

本地pyspark 通过kerberos认证(本地不需要下载kerberos,不用使用shell打开kinit),连接服务器hive

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

本地pyspark 通过kerberos认证(本地不需要下载kerberos,不用使用shell打开kinit),连接服务器hive

重要提示:如果是windows系统,不用看了,这方法用不了,因为本人的系统是ubuntu的。所以可以使用

第一步:

你当然需要在本地装好spark,hadoop,java等环境,保证线上不使用kerberos认证的时候,你的pyspark是可用的。如果不行,请参考我的另一篇文章,pyspark 连接远程hive,当然同样先保证你的环境是OK的,并且环境变量这些都配置好了,同时hosts中的路由也配好了。至于环境变量怎么配置,如何安装,自己查资料吧,我懒得写了

写这篇文章主要是百度的可用资料太少,然后这几天刚好碰上我google用不了,再则资料太散乱了,我自己调通之后,就分享出来了。

第二步:

1. 将hosts中的路由配置好,具体的配置规则问hive小伙伴要

2. 和使用未认证的spark一样,将三个*.xml文件放入spark的配置文件中:

本地路径为:

/spark安装目录/conf

前三个文件,如果你大数据那边需要配置5个,那就是这5个,差别不大,自己参考自己的:

第三步:

新建一个目录,我这边取名叫做keytab,然后将hive.keytab 文件放入目录中,问管这个hive集群的小伙伴要,现在目录就是这样的:

第一个hive_ccache_uid 先不用管,自动生成的缓存文件。后面看到代码你自己就明白了

第四部:

好了,准备工作做好了,开始代码

1. 安装依赖包

pip install krbcontext

同样的,我也默认认为你其他的包比如pyspark之类的都装好了

 2. 示例代码:

import findspark
findspark.init()  # 初始化,这句话不写,你前面应该有被报错的体验了

import os
from pyspark.sql import SparkSession
from krbcontext.context import krbcontext

os.environ['JAVA_HOME'] = '/opt/java/jdk1.8.0_11'  #jdk路径,不加这个会有报错
config = {
    "kerberos_principal": "hive/hive@LHBOOO.COM",  # 填入自己实际的,问hive小伙伴要
    "keytab_file": '/home/linhb/snap/keytab/hive.keytab', # 刚才我要你配置的路径
    "kerberos_ccache_file": '/home/linhb/snap/keytab/hive_ccache_uid' # 自动生成文件的路径
}

# 要让pyspark 包在krbcontext执行,如果你要引用这个spark,只能自己测试办法了。我就是帮同事通过认证下
with krbcontext(using_keytab=True,
                principal=config['kerberos_principal'],
                keytab_file=config['keytab_file'],
                ccache_file=config['kerberos_ccache_file']):
    spark = SparkSession.builder.master("local[*]") 
        .appName("hive") 
        .enableHiveSupport().getOrCreate()
    spark.conf.set("spark.sql.execution.arrow.pyspark.enabled", "true")
    spark.conf.set('spark.driver.memory', '8g')
    spark.conf.set('spark.executor.memory', '4g')
    spark.sql("use 你的hive数据库")
    df = spark.sql("show tables")
    df.show(10)

好了,大功告成,我个人认为是比较简单的版本了。大家自行取用把

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/947996.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号