private void buildStartCalculatingPO() { startCalculatingPOSet.clear(); // 所有的叶子节点均需要出发计算 for (PhysicalOperator po : this.innerPlan.getLeaves()) { startCalculatingPOSet.add(po.getAlias()); } // 发往下一级PorcessorOperator的节点需要出发计算,有可能跟leaf有重复 Iterator<String> it = getOutputMap().keySet().iterator(); while (it.hasNext()) { startCalculatingPOSet.add(it.next()); } // 直接发往下一级bolt的节点(可能是非叶子节点)需要被触发计算 if (boltLevalOutputOperatorSet != null && boltLevalOutputOperatorSet.size() > 0) { Iterator<PhysicalOperator> ito = this.innerPlan.iterator(); String a = null; while (ito.hasNext()) { a = ito.next().getAlias(); if (boltLevalOutputOperatorSet.contains(a)) { startCalculatingPOSet.add(a); } } } }
// 有数据输入的root节点赋以相应的值,没有数据输入的节点置为空 private void attachRoot(Map<String, Set<String>> map, String fromAlias, DataBag bag) { if (isTap) { roots.get(0).attachInputBag(bag); return; } Iterator<PhysicalOperator> ito = roots.iterator(); PhysicalOperator root = null; while (ito.hasNext()) { root = ito.next(); if (map.get(fromAlias).contains(root.getAlias())) { root.attachInputBag(fromAlias, bag); } else { root.attachInputBag((DataBag[]) null); } } }