private void sendBucketIdsToProcessor() { for (Entry<Integer, Collection<Integer>> entry : bucketToTaskMap.asMap().entrySet()) { int bucketNum = entry.getKey(); for (Integer taskId : entry.getValue()) { // Create payload ByteBuffer buffer = ByteBuffer.allocate(8); buffer.putInt(numBuckets); buffer.putInt(bucketNum); buffer.flip(); // Create the event and send it tez. Tez will route it to appropriate processor CustomProcessorEvent cpEvent = CustomProcessorEvent.create(buffer); context.sendEventToProcessor(Collections.singletonList(cpEvent), taskId); } } }
@Override public void handleEvents(List<Event> arg0) { // As of now only used for Bucket MapJoin, there is exactly one event in the list. assert arg0.size() <= 1; for (Event event : arg0) { CustomProcessorEvent cpEvent = (CustomProcessorEvent) event; ByteBuffer buffer = cpEvent.getPayload(); // Get int view of the buffer IntBuffer intBuffer = buffer.asIntBuffer(); jobConf.setInt(Constants.LLAP_NUM_BUCKETS, intBuffer.get(0)); jobConf.setInt(Constants.LLAP_BUCKET_ID, intBuffer.get(1)); } }
public static EventProtos.CustomProcessorEventProto convertCustomProcessorEventToProto( CustomProcessorEvent event) { EventProtos.CustomProcessorEventProto.Builder builder = EventProtos.CustomProcessorEventProto.newBuilder(); if (event.getPayload() != null) { builder.setUserPayload(ByteString.copyFrom(event.getPayload())); } builder.setVersion(event.getVersion()); return builder.build(); }
public static CustomProcessorEvent create(ByteBuffer payload) { return new CustomProcessorEvent(payload); }
((CustomProcessorEvent) tezEvent.getEvent()).setVersion( appContext.getApplicationAttemptId().getAttemptId());
@Private public static CustomProcessorEvent create(ByteBuffer payload, int version) { return new CustomProcessorEvent(payload, version); }
public static CustomProcessorEvent convertCustomProcessorEventFromProto( EventProtos.CustomProcessorEventProto proto) { return CustomProcessorEvent.create(proto.getUserPayload() != null ? proto.getUserPayload().asReadOnlyByteBuffer() : null, proto.getVersion()); }