当前位置: 首页 > news >正文

本地调试spark,访问kerberos鉴权的hdfs、hive

文章目录

  • 准备连接hive的配置
  • 申请kerberos tgt
  • 在scala项目启动本地spark
  • 本地Jupyter Notebook启动pyspark

解决在wsl下进行开发、调试时,需要连接kerberos鉴权的hdfs、hive的问题

准备连接hive的配置

core-site.xml、hdfs-site.xml、yarn-site.xml、hive-site.xml复制到本地;
不知道为什么yarn-site.xml里的配置也必须存在,即使不使用yarn运行spark

申请kerberos tgt

在/etc/krb5.conf记录账户域名对应的授权服务地址,注意配置default_ccache_name(Ticket Granting Ticket存放路径)的格式,让java程序能够自动读取到tgt

[libdefaults]dns_lookup_realm = falseticket_lifetime = 24hrenew_lifetime = 7dforwardable = truerdns = falsepkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crtspake_preauth_groups = edwards25519default_realm = COMPANY.UAT.COM# default_ccache_name = KEYRING:persistent:%{uid}default_ccache_name = FILE:/tmp/krb5cc_%{uid}
[realms]
COMPANY.UAT.COM = {kdc = 10.0.0.1admin_server = 10.0.0.1
}

申请当前操作系统用户的进程都可使用的tgt(Ticket Granting Ticket)

# 24小时过期,每天要执行一次
kinit -kt /etc/kerberos/hive.keytab hive@COMPANY.UAT.COM

使用klist命令可以看到已申请的tgt存储在/tmp/krb5cc_%{uid}文件里;
java默认会访问/etc/krb5.conf记录的授权服务地址,使用/tmp/krb5cc_%{uid}文件里的tgt信息,申请访问具体服务的ticket

在scala项目启动本地spark

连接配置文件全放到项目的src/test/resources后,可执行单元测试

import org.scalatest.funsuite.AnyFunSuite
import org.apache.spark.sql.SparkSessionclass SparkTest extends AnyFunSuite with BeforeAndAfterAll {val catalogImpl: String = "hive"lazy val spark: SparkSession = SparkSession.builder().appName("scala test").master("local[1]").enableHiveSupport()// 如果不使用kinit命令预先申请tgt,也可让spark自行申请// .config("spark.kerberos.keytab", "/etc/kerberos/hive.keytab")// .config("spark.kerberos.principal", "hive@COMPANY.UAT.COM")    .getOrCreate()test("select hive") {val df = spark.sql("select * from default.temp_test1 limit 10")df.printSchema()df.show()}test("sleep") {// 挂起测试线程,可在localhost:4040访问spark控制台,确认是否加载了hdfs、spark相关配置Thread.sleep(1000000)}
}

本地Jupyter Notebook启动pyspark

vscode的Jupyter插件自动为一个打开的.ipynb文件在本地启动一个对应的ipykernel_launcher,并支持为每个.ipynb文件指定python venv;
修改spark启动配置后,需要点击重启ipykernel的按钮,再重新运行启动spark的代码单元格。

在指定的python venv下,安装pyspark:

pip3 install pyspark==3.2.4

连接配置文件全放到本地/apps/conf/SPARK目录内

from pyspark.sql import SparkSession
import os
# spark-submit能够读取环境变量SPARK_CONF_DIR指定的配置目录
os.environ["SPARK_CONF_DIR"] = "/apps/conf/SPARK"
# pyspark调用spark-submit,启动driver
# 查看driver的java进程: ps -ef | grep pyspark-shell
spark = (SparkSession.builder.appName("pyspark test").master("local[1]").enableHiveSupport()# 下载hive相关依赖包.config("spark.sql.hive.metastore.version", "3.1.3").config("spark.sql.hive.metastore.jars", "maven").config("spark.jars.repositories", "https://maven.aliyun.com/repository/public").getOrCreate()
)

在后续notebook代码单元格里随意编辑、执行spark代码

df1 = spark.sql("SHOW TABLES IN default")
df1.show()
http://www.lryc.cn/news/439077.html

相关文章:

  • Ubuntu 安装包下载(以20版本 阿里镜像站为例子)
  • 会声会影Corel VideoStudio2025旗舰版最新中文旗舰版新功能讲解及使用会声会影使用教程
  • 【人工智能】OpenAI发布GPT-o1模型:推理能力的革命性突破,这将再次刷新编程领域的格局!
  • 2024年TCGA基因表达数据下载(最新版)
  • 1. 运动控制指令概要(omron 机器自动化控制器)
  • 依赖注入(Dependency Injection)
  • PHP环境搭建
  • 小叶OJ 2716: 过河问题 ← 贪心算法
  • LeetCode509:斐波那契数列
  • 5G前传-介绍
  • 【Python机器学习】循环神经网络(RNN)——超参数
  • 【Android 13源码分析】WindowContainer窗口层级-1-初识窗口层级树
  • Node.js的学习2——内置模块(一)
  • 信息安全工程师(5)域名与域名解析
  • idear导入他人项目如何快速运行
  • 直流无刷电机霍尔线序自学习解释
  • C++学习笔记(26)
  • 安卓14剖析SystemUI的ShadeLogger/LogBuffer日志动态控制输出dumpsy机制
  • 华为CNA VRM搭建(使用vmware worfstartion搭建)
  • 【WRF工具】WRF Domain Wizard第二期:使用教程
  • 智能摄像头MP4格式化恢复方法
  • 【C++】unordered系列
  • Cobbler 搭建方法
  • 从边缘到云端,合宙DTURTU打造无缝物联网解决方案
  • 【Android Studio】API 29(即Android 10)或更高版本,在程序启动时检查相机权限,并在未获取该权限时请求它
  • 【裸机装机系列】3.kali(ubuntu)-更新sources.list并重启
  • text2sql(NL2Sql)综述《The Dawn of Natural Language to SQL: Are We Fully Ready?》
  • 【滑动窗口】一题讲透滑动窗口!
  • 嵌入式通信原理—SPI总线通信原理与应用
  • 基于web的 BBS论坛管理系统设计与实现