У меня есть требование в моем приложении Spark, где мне нужно периодически обновлять переменную, которая будет использоваться рабочим кодом.Как периодически обновлять объекты на рабочих Spark?
Для более конкретного понимания мне нужно поместить мои данные в осколки Кинезиса с равным разделением. Количество KINESIS осколками может увеличить или уменьшить в любое время, так что я всегда должен получить правильное количество черепков, так как мой ключ раздел
System.currentTimeMillis % shardSize
Но я не хочу, чтобы запросить это всегда, так что-то вроде java.util .TimerTask поможет, который я могу транслировать для работников.
Это код, который мне нужно периодически запускать и передавать значение ведомым.
def fetchNumberOfShards(): Integer = {
val describeStreamRequest = new DescribeStreamRequest()
describeStreamRequest.setStreamName(streamName)
val describeStreamResult = kinesisClient.describeStream(describeStreamRequest)
val shards = describeStreamResult.getStreamDescription().getShards()
return shards.size()
}
Я пробовал это, так или иначе Kinesis не распределяет ключи разделов равномерно. Особенно, когда происходит перестановка. Вот почему этот код. – cmbendre
Я обновил ответ, включив широковещательные переменные, которые помогут вам решить эту проблему – ImDarrenG