前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spark 3.0.0-SNAPSHOT Access Kerberized HDFS

Spark 3.0.0-SNAPSHOT Access Kerberized HDFS

作者头像
runzhliu
发布2020-08-06 09:46:53
9440
发布2020-08-06 09:46:53
举报
文章被收录于专栏:容器计算容器计算容器计算

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,如下图。

image_1deu2ms6h1pls1us81iinho3137l9.png-47.8kB
image_1deu2ms6h1pls1us81iinho3137l9.png-47.8kB
image_1deu2pkfdgt01pvbgg1a591plm.png-31.2kB
image_1deu2pkfdgt01pvbgg1a591plm.png-31.2kB
image_1deu2qmkv176jcul1blb1ndr1nmk13.png-41.4kB
image_1deu2qmkv176jcul1blb1ndr1nmk13.png-41.4kB

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-07-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 Overview
  • 2 Design
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档