zoukankan      html  css  js  c++  java
  • 进行Spark,Kafka针对Kerberos相关配置

    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应为相对路径./
  • 相关阅读:
    ida动态调试--反反调试
    python读取配置文件
    问题解决:局域网内,为啥别人ping不到我的IP
    完全卸载MySQL
    JDK环境配置
    win10无法运行Vmware,怎么办
    查看ie版本
    公开的免费WebService接口分享,用于做接口练习
    SVN更改地址
    Loadrunner录制步骤及说明
  • 原文地址:https://www.cnblogs.com/felixzh/p/10562730.html
Copyright © 2011-2022 走看看