Spark与Kinesis流集成报错:区域无效及类找不到问题
解决Spark Kinesis示例运行的两个问题
问题1:Region name '[us-west-1]' is not valid
你遇到的区域无效错误,大概率是这几个原因导致的,咱们逐个排查:
- 检查命令参数格式:你写的命令里用了
[us-west-1]作为占位符,实际运行时是不是没把方括号去掉?一定要直接传us-west-1,带括号的话会被当成无效区域名。 - 确认依赖版本匹配:你用的
spark-streaming-kinesis-asl_2.12:2.4.0是基于Scala 2.12的包,但Spark 2.4.x的默认编译版本大多是Scala 2.11。如果你的Spark是预编译的2.4.x版本,建议把包换成org.apache.spark:spark-streaming-kinesis-asl_2.11:2.4.0,版本不兼容也可能导致区域解析异常。 - 配置AWS区域环境:可以先在终端里设置默认区域环境变量,再运行命令:
export AWS_DEFAULT_REGION=us-west-1 bin/spark-submit --packages org.apache.spark:spark-streaming-kinesis-asl_2.11:2.4.0 /Users/amitdhawan/Downloads/kinesis_wordcount_asl.py your-app-name your-stream-name https://kinesis.us-west-1.amazonaws.com us-west-1 - 检查本地AWS配置:看看
~/.aws/config文件里有没有正确设置区域,没有的话添加一行:[default] region = us-west-1
问题2:java.lang.ClassNotFoundException: org.apache.spark.examples.streaming.KinesisWordProducerASL
这个错误是因为默认的Spark预编译包通常不包含Kinesis相关的示例类,解决办法如下:
- 编译Spark源码包含Kinesis示例:下载对应版本的Spark源码,然后运行以下命令编译带Kinesis ASL支持的示例模块:
编译完成后,示例类会在./build/mvn -DskipTests -Pkinesis-asl packageexamples/target/spark-examples_2.11-2.4.0.jar(根据你的Scala版本调整)里,之后再用run-example命令就能找到类了。 - 直接指定示例jar路径:如果已经有编译好的示例jar,可以在run-example命令里显式指定:
bin/run-example --jars examples/target/spark-examples_2.11-2.4.0.jar streaming.KinesisWordProducerASL streamname https://kinesis.us-west-1.amazonaws.com 1000 10 - 替代方案:自己写简单生产者:如果不想编译,也可以用AWS SDK写个简单的Python脚本往Kinesis流里发测试数据,这样更快捷。
内容的提问来源于stack exchange,提问作者iAviator
相关产品推荐
相关产品推荐

