首页 > 解决方案 > Kinesis Spark 流确实读取记录:在独立集群中运行

问题描述

我在 java 中有 spark 流应用程序,它从 kineses 流(1 个分片)读取记录并在此之后进行一些处理。

当我在 spark 本地模式下运行我的应用程序时,它能够接收记录,但是当我在独立集群中运行相同的应用程序时,它不会从 kinesis 流中读取记录。

我使用 spark-submit 命令运行应用程序:

本地模式:

spark-submit --class com.test.Main --master local[3] --jars /test/test-saprk-app.jar

独立集群模式: spark-submit --class com.test.Main --master spark://<machine-ip>:7077 --deploy-mode cluster --executor-cores 3 --executor-memory 10GB --jars /test/test-saprk-app.jar

使用的 Spark 版本:2.4.0

谁能建议我在这里缺少什么?

标签: javaapache-sparkspark-streamingamazon-kinesis

解决方案


为了从 kinesis 读取数据,我们需要将 accessKey 和 secretKey 设置为 env 变量或 IAM 角色(如果它是 aws ec2 机器)。

如果 Spark 应用程序以集群/客户端模式提交,请确保设置了这些属性,否则它不会从 kinesis 流中读取任何数据,因为缺少所需的凭据。

我尝试将这些环境变量放在 conf/spark-env.sh 文件中,它适用于集群的每个节点


推荐阅读