public class TableOneByOnePartitionAllocator extends AbstractPartitionAllocator
假设有两张表table-1和table-2需要处理,则需要在table-1全部处理完毕之后再处理table-2的数据(比如数据清洗), 此时需要保证表之间严格有序.在table-1处理完之前,即使有空闲worker,也要等待.
| 限定符和类型 | 字段和说明 |
|---|---|
static org.slf4j.Logger |
logger |
| 构造器和说明 |
|---|
TableOneByOnePartitionAllocator() |
| 限定符和类型 | 方法和说明 |
|---|---|
List<PartitionTask> |
findRange(String taskId,
List<String> tableNameList)
这种场景的分配调度比较复杂.
|
protected List<String> |
getAllTables(String taskId) |
findRange, isTableFinished, isTableProcessing, isTableProcessingOrFinished, preAllocatepublic List<PartitionTask> findRange(String taskId, List<String> tableNameList) throws NoTaskException, WaitAndTryLaterException
WaitAndTryLaterException,通知worker等待该表处理完成
3. 如表状态为未分配,则进入.此时所有range都是未分配的(因为取未分配的任务片的原则是一次性将table下的所有未分配range都取出来),所以一定能够找到未分配range来返回
考虑tableStatus为WAIT_FOR_REALLOCATE的情况下,此时该表下可能部分range是已结束,部分range是处理中,
但一定有range是未分配的,因为在判定range处理超时的时候才会给table置WAIT_FOR_REALLOCATE状态,同时重置超时range为未分配状态.findRange 在类中 AbstractPartitionAllocatortaskId - taskIdtableNameList - table name listNoTaskException - if no task can be foundWaitAndTryLaterException - if client need wait for current table finishedCopyright © 2016. All rights reserved.