本文介绍如何在 E-MapReduce 的 Hadoop 集群运行 Spark Streaming 作业处理 Kafka 集群的数据。

编程参考

由于 E-MapReduce 上的 Hadoop 集群和 Kafka 集群都是基于纯开源版本软件,所以在编程使用上参考相应官方文档即可。

访问 Kerberos Kafka 集群

E-MapReduce 支持创建基于 Kerberos 认证的 Kafka 集群。当 Hadoop 集群作业需要访问 Kerberos Kafka 集群时,有两种使用方式:

  • 非 kerberos Hadoop 集群:提供用于 Kafka 集群的 Kerberos 认证的 kafka_client_jaas.conf 文件。
  • kerberos Hadoop 集群: 基于 kerberos 集群跨域互信,提供用于 Hadoop 集群的 kerberos 认证的 kafka_client_jaas.conf 文件。

以上两种方式都需要运行作业时提供 kafka_client_jaas.conf 文件用于 Kerberos 认证。

kafka_client_jaas.conf 文件格式如下:
KafkaClient {
    com.sun.security.auth.module.Krb5LoginModule required
    useKeyTab=true
    storeKey=true
    serviceName="kafka"
    keyTab="/path/to/kafka.keytab"
    principal="kafka/emr-header-1.cluster-12345@EMR.12345.COM";
};

如何获取 keytab 文件,请参见开源组件解释->Kerberos 认证一节。

Spark Streaming访问 Kerberos Kafka 集群

当我们运行 Spark Streaming 作业访问 Kerberos kafka 时,可以在spark-submit命令行参数中提供所需的 kafka_client_jaas.conf 和 kafka.keytab 文件。
spark-submit --conf spark.driver.extraJavaOptions=-Djava.security.auth.login.config={{PWD}}/kafka_client_jaas.conf --conf spark.executor.extraJavaOptions=-Djava.security.auth.login.config={{PWD}}/kafka_client_jaas.conf --files /local/path/to/kafka_client_jaas.conf,/local/path/to/kafka.keytab --class xx.xx.xx.KafkaSample --num-executors 2 --executor-cores 2 --executor-memory 1g --master yarn-cluster xxx.jar arg1 arg2 arg3
需要注意的是,kafka_client_jaas.conf 文件中,keytab 文件路径需要写相对路径,请严格按照如下 keyTab 配置项写法:
KafkaClient {
    com.sun.security.auth.module.Krb5LoginModule required
    useKeyTab=true
    storeKey=true
    serviceName="kafka"
    keyTab="kafka.keytab"
    principal="kafka/emr-header-1.cluster-12345@EMR.12345.COM";
};