父级碎片存在但不存在子碎片

时间:2015-05-12 18:59:19

标签: spark-streaming amazon-kinesis

我正在使用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

当我将测试数据发布到此流或使用基本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

1 个答案:

答案 0 :(得分:3)

你在Kinesis上有多少个碎片?

我会做的是:

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

    在某些情况下,更改应用程序名称或流名称可能会导致Kinesis错误。如果看到错误,则可能需要手动删除DynamoDB表

    1. 检查您的应用程序代码,查看代码运行期间是否设置了某些设置。
    2. 希望它有所帮助。