1. 提交任务的命令

spark-submit  \
--class <classname> \
--master yarn \
--deploy-mode client \
--executor-memory 2g \
--executor-cores 2 \
--driver-memory 2g \
--num-executors 2 \
--queue default \
--principal ocsp-yg@ASIAINFO.COM \
--keytab /etc/security/keytabs/hdfs.headless.keytab \
--files "/usr/OCSP/conf/kafka_client_jaas.conf,/usr/OCSP/conf/ocsp.keytab" \
--driver-java-options "-Djava.security.auth.login.config=/usr/OCSP/conf/kafka_client_jaas.conf" \
--conf "spark.executor.extraJavaOptions=-Djava.security.auth.login.config=./kafka_client_jaas.conf" \
--jars <your jars>,/usr/OCSP/lib/spark-kafka-0-10-connector-assembly_2.10-1.0.1.jar /usr/OCSP/lib/ocsp-core_1.6-2.1.0.jar
  • --principal与--keytab这两个参数为spark需要的Kerberos认证信息

  • --driver-java-options "-Djava.security.auth.login.config=/usr/OCSP/conf/kafka_client_jaas.conf"为driver连接kafka用到的认证信息,因此使用本地绝对路径

  • --conf "spark.executor.extraJavaOptions=-Djava.security.auth.login.config=./kafka_client_jaas.conf"为executor连接kafka用到的Kerberos认证信息,因此使用container中的相对路径./

  • jaas文件中定义了principal与keytab,由于我们使用了yarn-client模式,driver需要的文件在本地文件系统,executor需要的文件需要我们使用--files的方式上传,即--files "/usr/OCSP/conf/kafka_client_jaas.conf,/usr/OCSP/conf/ocsp.keytab"

  • 有的文档中说--files中传keytab文件会与spark本身的--keytab 冲突,其实是因为他们对spark和kafka使用了相同的principal和keytab,在上述命令中我为了清晰起见,让spark使用了principal ocsp-yg@ASIAINFO.COM,keytab hdfs.headless.keytab,让spark连接kafka时使用了principal ocsp/ASIAINFO.COM(principal其实是在jaas文件中指定的,3中详细讲jaas文件) keytab ocsp.keytab,当spark提交任务时,yarn会将--keytab后面的keytab文件与--files里的文件先后上传,即 hdfs.headless.keytab与ocsp.keytab均会被上传,spark与kafka各取所需,即可正常工作。当spark与kafka要使用相同的keytab文件时,比如都用ocsp.keytab,那么yarn会先后上传两次ocsp.keytab,在spark正使用的时候更新了keytab,造成异常退出

  • 因此如果spark与kafka需要使用相同的keytab文件,我们只需要在--files里不要上传keytab即可避免冲突

spark-submit \
--class <classname> \
--master yarn \
--deploy-mode client \
--executor-memory 2g \
--executor-cores 2 \
--driver-memory 2g \
--num-executors 2 \
--queue default \
--principal ocsp@ASIAINFO.COM \
--keytab /etc/security/keytabs/ocsp.keytab \
--files "/usr/OCSP/conf/kafka_client_jaas.conf" \
--driver-java-options "-Djava.security.auth.login.config=/usr/OCSP/conf/kafka_client_jaas.conf" \
--conf "spark.executor.extraJavaOptions=-Djava.security.auth.login.config=./kafka_client_jaas.conf" \
--jars <your jars>,/usr/OCSP/lib/spark-kafka-0-10-connector-assembly_2.10-1.0.1.jar /usr/OCSP/lib/ocsp-core_1.6-2.1.0.jar
  • 还有一个问题是本例中drvier和executor使用了相同的kafka_client_jaas.conf,这也会造成一些问题,3中会详细说明

2. 生成keytab和principal

  • 在KDC Server上执行

    kadmin -p admin/admin@ASIAINFO.COM
  • 生成principal,principal最好使用ocsp的用户名+domain
    addprinc -randkey ocsp/ASIAINFO.COM
  • 生成keytab
    ktadd -k /data/ocsp.keytab ocsp/ASIAINFO.COM
  • 将keytab文件copy到spark driver所在的机器(因为OCSP默认使用yarn-client模式)

3. 创建spark读取kafka的jaas配置文件

  • 配置文件kafka_client_jaas.conf样例如下:
KafkaClient {
com.sun.security.auth.module.Krb5LoginModule required
useTicketCache=false
useKeyTab=true
principal="ocsp@ASIAINFO.COM"
keyTab="./ocsp.keytab"
renewTicket=true
storeKey=true
serviceName="ocsp";
};
  • 其中useTicketCache指从系统的cash中读取credential信息,useKeyTab指从指定的keyTab文件读取credential

  • principal和keytab用第二步生成的principal与keytab,注意:keytab的路径

    • 如果这个conf文件是给driver读取,则我们要用keytab文件在本地的绝对路径
    • 如果这个conf文件是executor读取,则我们要用keytab文件在container中的相对路径,即./ocsp.keytab
    • 如果为了方便起见,drvier与executor要使用相同的jaas文件,路径配置为./ocsp.keytab,我们需要将keytab文件copy到运行spark-submit的当前路径
    • 如果driver和executor要使用不同的jaas文件,则driver的jaas文件中,keytab应为本地绝对路径,executor的jaas文件中,keytab应为相对路径./

进行Spark,Kafka针对Kerberos相关配置的更多相关文章

  1. phoenix PQS的kerberos相关配置

    thin 客户端的实例代码 jdbc:phoenix:thin:url=<scheme>://<server-hostname>:<port>;authentica ...

  2. Spark集群 + Akka + Kafka + Scala 开发(1) : 配置开发环境

    目标 配置一个spark standalone集群 + akka + kafka + scala的开发环境. 创建一个基于spark的scala工程,并在spark standalone的集群环境中运 ...

  3. Kafka 消费者相关配置

    消费者相关配置类为  org.apache.kafka.clients.consumer.ConsumerConfig 具有以下配置参数 1. GROUP_ID_CONFIG = "grou ...

  4. Spark源码剖析 - SparkContext的初始化(四)_Hadoop相关配置及Executor环境变量

    4. Hadoop相关配置及Executor环境变量的设置 4.1 Hadoop相关配置信息 默认情况下,Spark使用HDFS作为分布式文件系统,所以需要获取Hadoop相关配置信息的代码如下: 获 ...

  5. flume集成kafka(kafka开启kerberos)配置

    根据flume官网:当kafka涉及kerberos认证: 涉及两点配置,如下: 配置一:见下实例中红色部分 配置conf实例: [root@gz237-107 conf]# cat flume_sl ...

  6. 大数据Spark+Kafka实时数据分析案例

    本案例利用Spark+Kafka实时分析男女生每秒购物人数,利用Spark Streaming实时处理用户购物日志,然后利用websocket将数据实时推送给浏览器,最后浏览器将接收到的数据实时展现, ...

  7. Kerberos主从配置文档

    Kerberos主从配置文档   1. Kerberos主从同步机制 在Master上通过以下命令同步数据: kdb5_util dump /var/kerberos/krb5kdc/slave_db ...

  8. CentOS6安装各种大数据软件 第五章:Kafka集群的配置

    相关文章链接 CentOS6安装各种大数据软件 第一章:各个软件版本介绍 CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令 CentOS6安装各种大数据软件 第三章:Linux基础 ...

  9. zookeeper集群的搭建以及hadoop ha的相关配置

    1.环境 centos7 hadoop2.6.5 zookeeper3.4.9 jdk1.8 master作为active主机,data1作为standby备用机,三台机器均作为数据节点,yarn资源 ...

随机推荐

  1. SpringBoot2.0 项目异常日志,但不影响运行(待解决)

    第一种: 2019-04-17 01:46:33 [INFO] [org.apache.juli.logging.DirectJDKLog:175] - Error parsing HTTP requ ...

  2. 浅论各种调试接口(SWD、JTAG、Jlink、Ulink、STlink)的区别

    JTAG协议 JTAG(Joint Test Action Group,联合测试行动小组)是一种国际标准测试协议(IEEE 1149.1兼容),主要用于芯片内部测试.现在多数的高级器件都支持JTAG协 ...

  3. AI - TensorFlow - 分类与回归(Classification vs Regression)

    分类与回归 分类(Classification)与回归(Regression)的区别在于输出变量的类型.通俗理解,定量输出称为回归,或者说是连续变量预测:定性输出称为分类,或者说是离散变量预测. 回归 ...

  4. python3 - 文本读音器

    本篇分享的是使用python3制作一个文本读音器,简单点就是把指定的文本文字转语音说出来:做这么个小工具主要是为了方便自己在平时看一些文章眼累的时候,可通过语音来帮助自己,当然如果你是小说迷,可以扩展 ...

  5. 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之八 || API项目整体搭建 6.3 异步泛型仓储+依赖注入初探

    代码已上传Github+Gitee,文末有地址 番外:在上文中,也是遇到了大家见仁见智的评论和反对,嗯~说实话,积极性稍微受到了一丢丢的打击,不过还好,还是有很多很多很多人的赞同的,所以会一直坚持下去 ...

  6. numpy操作

    python中使用了numpy的一些操作,特此记录下来: 生成矩阵,替换值 import numpy as np # 生成一行10列的矩阵 dataset = np.zeros((1, 10)) # ...

  7. vue,vuex的后台管理项目架子structure-admin,后端服务nodejs

    之前写过一篇vue初始化项目,构建vuex的后台管理项目架子,这个structure-admin-web所拥有的功能 接下来,针对structure-admin-web的不足,进行了补充,开发了具有登 ...

  8. Java基础知识回顾之六 ----- IO流

    前言 在上一篇文章中,回顾了Java的多线程.而在本篇文章中主要介绍Java IO的相关知识. IO的介绍 什么是IO? IO的名称又来是Input与Output的缩写,也就是输入流和输出流.输入流用 ...

  9. k邻近算法(KNN)实例

    一 k近邻算法原理 k近邻算法是一种基本分类和回归方法. 原理:K近邻算法,即是给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例,这K个实例的多数属于某个类,就把该输入实 ...

  10. es6涉及的那点东西

    前言 ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015. 也就是说,ES6就是ES20 ...