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

本地调试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 = false
    ticket_lifetime = 24h
    renew_lifetime = 7d
    forwardable = true
    rdns = false
    pkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crt
    spake_preauth_groups = edwards25519
    default_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.1
  admin_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.SparkSession

class 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.kler.cn/a/306415.html

相关文章:

  • K8S单节点部署及集群部署
  • SHA-256哈希函数
  • Diffusion Policy——斯坦福机器人UMI所用的扩散策略:从原理到其编码实现(含Diff-Control、ControlNet详解)
  • 11张思维导图带你快速学习java
  • Linux kernel 堆溢出利用方法(二)
  • springboot 之 整合springdoc2.6 (swagger 3)
  • SOEX解锁Web3社交软件的无限可能
  • strncpy函数的使用和模拟实现
  • 远程Linux网络连接( Linux 网络操作系统 04)
  • Flutter启动无法运行热重载
  • 动态库相关知识解析
  • 教育培训小程序开发,简单实用的入门指南
  • GO 匿名函数
  • 【python版】示波器输出的csv文件(时间与电压数据)如何转换为频率与幅值【方法③】
  • 【解决方案】实验室管理系统(lims)整体解决方案设计书(word原件)
  • 探索Python轻量级数据库:TinyDB的奇妙之旅
  • QT Mode/View之View
  • CyclicBarrier的源码分析
  • 34. MyBatis如何处理SQL注入问题?有哪些防范措施?
  • 基于http请求的一种安全校验认证方案记录
  • 【C++】缺省(默认)参数
  • 1.2 交换技术
  • Spring Boot母婴商城:安全、便捷、高效
  • c++ 红黑树(带头结点)
  • PostgreSQL的repmgr命令参考(2)
  • k8s Service 服务