专栏首页容器计算Spark 3.0.0-SNAPSHOT Access Kerberized HDFS

Spark 3.0.0-SNAPSHOT Access Kerberized HDFS

1 Overview

Spark 2.2 on K8S 的 Fork 已经废弃近两年了,那时候的几个主力开发也全部转移到 Spark 2.3/2.4 以及即将发布的 3.0 的 on K8S 模块的开发了。

3.0 相对于 2.2 的 Fork 除了关于 Spark App 的管理外,大部分特性都是 2.2 的改良,甚至镜像文件都只剩下一个(更方便管理)。而比较重要的劣势是 3.0 还不正式支持 Dynamic Resource Allocation,2.2 是已经有一种实现的(基于 DaemotSet 来创建 Shuffle Pod)。

前期调研 2.3 的时候发现,还没有支持 Kerberos 的相关特性,最近重新调研 2.4 的代码的时候,发现在 3.0.0 SNAPSHOT 已经有了支持了,而且方案比 2.2 更好。

2 Design

在 Spark 3.0.0 中,提交 Spark 任务的脚本如下。

/opt/spark/bin/spark-submit \
      --deploy-mode cluster \
      --class org.apache.spark.examples.HdfsTest \
      --master=k8s://https://kubernetes.default.svc \
      --conf spark.executor.instances=1 \
      --conf spark.task.cpus=1 \
      --conf spark.executor.memory=512M \
      --conf spark.kubernetes.namespace=dbyin \
      --conf spark.driver.extraJavaOptions=-Dlog4j.configuration=file:///opt/spark/logconf/log4j.properties \
      --conf spark.executor.extraJavaOptions=-Dlog4j.configuration=file:///opt/spark/logconf/log4j.properties \
      --conf spark.kubernetes.executor.deleteOnTermination=false \
      --conf spark.app.name=spark-hdfs \
      --conf spark.kerberos.keytab=/etc/DC-sh-cr-kerberos.keytab \
      --conf spark.kubernetes.kerberos.krb5.path=/etc/krb5.conf  \
      --conf spark.kerberos.principal=DC-sh-cr-kerberos@HADOOP.COM \
      --conf spark.kubernetes.container.image=hub.oa.com/dbyin/spark:v3.0.4 \
      local:///opt/spark/examples/jars/spark-examples_2.12-3.0.0-SNAPSHOT.jar \
      hdfs://sh-kerberos.hdfs.cr.ied.com:8020/sh-cr

Spark 访问 Kerberized HDFS 有几种情况。

  1. keytab: if a kerberos keytab is defined, it is provided to the driver, and the driver will manage the kerberos login and the creation of delegation tokens.
  2. existing tokens: if a secret containing delegation tokens is provided, it will be mounted on the driver pod, and the driver will handle distribution of those tokens to executors.
  3. tgt only: if Hadoop security is enabled, the local TGT will be used to create delegation tokens which will be provided to the driver. The driver will handle distribution of the tokens to executors.

【1】指出了,当在 submit 的客户端如果可以访问到 keytab,并且通过 Spark conf 来指定。那么 submit 的时候会将 krb5.conf 还有 hadoop 相关的配置通过 configmap 来保存,所以后面 driver 和 exectutor 启动,就可以直接通过 configmap 读到 hadoop 相关配置,以及拿到与 datanode 交互的 delegation token,如下图。

【2】指出了,用户也可以通过提前生成 token 的 secret,在 submit 的时候,直接指定需要 mount 的 configmap 和 secret,这种情况下,无需 keytab。 【3】指出了 submit 客户端如果存在本地的 TGT 缓存,可以把 tgt 请求 Namenode 生成 token 再存到 secret 里。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Spark on K8S 访问 Kerberized HDFS

    Spark 从2.3开始支持 Native 的 K8S 作为 resourceManager 了,官网内容很多,就不赘述了,这里主要参考2018年的 Spark...

    runzhliu
  • Spark Kubernetes 的源码分析系列 - features

    features 包里的代码,主要是用于构建 Spark 在 K8S 中的各类资源所需要的特征,个人觉得可以理解成这些 features 就是帮你写各类 Kin...

    runzhliu
  • 【Kubernetes】通过ConfigMap修改容器的DNS

    业务容器需要在 A 集群解析 B 集群的容器,已知 B 集群的 Pod 如果重启后,IP 会变化,所以在 B 集群创建 StatefulSet,并且创建 Hea...

    runzhliu
  • 免费为你的域名申请SSL证书和配置教程

    我想,点进来的朋友,应该都知道SSL的重要性吧。这里就简单提一下,大型网站域名只有配置了SSL后,才会更加安全。

    大宇云的客户
  • Golang--Go语言 五百行后台代码实现一简约的个人博客网站-TinyBlog

    博客演示地址:http://121.36.253.86/,http://yangqq.xyz/,统计了下后台代码只有415行。

    特立独行的猫a
  • 数据库PostrageSQL-服务器配置设置参数

    有很多配置参数可以影响数据库系统的行为。本章的第一节中我们将描述一下如何与配置参数交互。 后续的小节将详细地讨论每一个参数。

    cwl_java
  • 运行网站出现Too many open files,CentOS 6.x和CentOS 7.x解决方法 Linux 面板

    奇梦
  • 运行网站出现Too many open files,CentOS 6.x和CentOS 7.x解决方法

    针对新手使用Appnode常见问题: 有没有安装完Appnode,配置好网站正常运行一段时间出现报错: Too many open files  出现以上报错可...

    奇梦
  • fpm_stdio_prepare_pipes(), line 197: pipe() failed: Too many open files

    有太服务器上挂了几个采集站,采集进程比较多,设置了 limits.conf和 sysctl.conf 值为102400,php日志还是提示标题所示内容。

    用户1469148
  • NGINX的定制化 | API Management学习第四篇

    3 SCALE中API gateway,是基于NGINX(OpenResty Web Platform = Nginx + Lua )。

    魏新宇

扫码关注云+社区

领取腾讯云代金券