父分片存在但子分片不存在

Parent Shard Exists but not the Child Shard

我正在使用 Kinesis 设置 Spark Streaming 项目,当我尝试连接到我的 Kinesis 流时,我从 Spark 收到以下错误:

ERROR ShardSyncTask: Caught exception while sync'ing Kinesis shards and leases
com.amazonaws.services.kinesis.clientlibrary.exceptions.internal.KinesisClientLibIOException: Parent shard shardId-000000000000 exists but not the child shard shardId-000000000002

当我 post 测试此流的数据或使用基本 Amazon 库从流中读取数据时,我没有收到任何错误,这仅在我尝试连接 Spark 时发生。

下面是我用于测试的代码:

val conf = new SparkConf().setMaster("local[2]").setAppName("KinesisCounter")
val ssc = new StreamingContext(conf, Seconds(1))
val rawStream = KinesisUtils.createStream(ssc, "dev-test", "kinesis.us-east-1.amazonaws.com", Duration(1000), InitialPositionInStream.TRIM_HORIZON, StorageLevel.MEMORY_ONLY)
rawStream.map(msg => new String(msg)).count.print

您在 Kinesis 上有多少分片?

我会做的是:

  1. 检查 Kinesis 区域,确保您的应用程序设置和流在同一区域
  2. 删除存储 Kinesis 流分片的 DynomoTable,然后重新开始。以下来自 official documentation:

Changing the application name or stream name can lead to Kinesis errors in some cases. If you see errors, you may need to manually delete the DynamoDB table

  1. 检查您的应用程序代码,查看是否在代码 运行 期间设置了某些设置。

希望对您有所帮助。