当前位置: 首页>>代码示例>>Java>>正文


Java HelixAdmin.getInstancesInClusterWithTag方法代码示例

本文整理汇总了Java中org.apache.helix.HelixAdmin.getInstancesInClusterWithTag方法的典型用法代码示例。如果您正苦于以下问题:Java HelixAdmin.getInstancesInClusterWithTag方法的具体用法?Java HelixAdmin.getInstancesInClusterWithTag怎么用?Java HelixAdmin.getInstancesInClusterWithTag使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在org.apache.helix.HelixAdmin的用法示例。


在下文中一共展示了HelixAdmin.getInstancesInClusterWithTag方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。

示例1: getAssignedInstances

import org.apache.helix.HelixAdmin; //导入方法依赖的package包/类
@Override
public List<String> getAssignedInstances(HelixAdmin helixAdmin, String helixClusterName,
    SegmentMetadata segmentMetadata, int numReplicas, String tenantName) {
  String serverTenantName = null;
  if ("realtime".equalsIgnoreCase(segmentMetadata.getIndexType())) {
    serverTenantName = ControllerTenantNameBuilder.getRealtimeTenantNameForTenant(tenantName);
  } else {
    serverTenantName = ControllerTenantNameBuilder.getOfflineTenantNameForTenant(tenantName);
  }
  final Random random = new Random(System.currentTimeMillis());

  List<String> allInstanceList = helixAdmin.getInstancesInClusterWithTag(helixClusterName, serverTenantName);
  List<String> selectedInstanceList = new ArrayList<String>();
  for (int i = 0; i < numReplicas; ++i) {
    final int idx = random.nextInt(allInstanceList.size());
    selectedInstanceList.add(allInstanceList.get(idx));
    allInstanceList.remove(idx);
  }
  LOGGER.info("Segment assignment result for : " + segmentMetadata.getName() + ", in resource : "
      + segmentMetadata.getTableName() + ", selected instances: "
      + Arrays.toString(selectedInstanceList.toArray()));

  return selectedInstanceList;
}
 
开发者ID:Hanmourang,项目名称:Pinot,代码行数:25,代码来源:RandomAssignmentStrategy.java

示例2: buildInitialRealtimeIdealStateFor

import org.apache.helix.HelixAdmin; //导入方法依赖的package包/类
public static IdealState buildInitialRealtimeIdealStateFor(String realtimeTableName,
    AbstractTableConfig realtimeTableConfig, HelixAdmin helixAdmin, String helixClusterName,
    ZkHelixPropertyStore<ZNRecord> zkHelixPropertyStore) {
  KafkaStreamMetadata kafkaStreamMetadata =
      new KafkaStreamMetadata(realtimeTableConfig.getIndexingConfig().getStreamConfigs());
  String realtimeServerTenant =
      ControllerTenantNameBuilder.getRealtimeTenantNameForTenant(realtimeTableConfig.getTenantConfig().getServer());
  switch (kafkaStreamMetadata.getConsumerType()) {
    case highLevel:
      IdealState idealState =
          buildInitialKafkaHighLevelConsumerRealtimeIdealStateFor(realtimeTableName, helixAdmin, helixClusterName,
              zkHelixPropertyStore);
      List<String> realtimeInstances = helixAdmin.getInstancesInClusterWithTag(helixClusterName, realtimeServerTenant);
      if (realtimeInstances.size() % Integer.parseInt(realtimeTableConfig.getValidationConfig().getReplication()) != 0) {
        throw new RuntimeException("Number of instance in current tenant should be an integer multiples of the number of replications");
      }
      setupInstanceConfigForKafkaHighLevelConsumer(realtimeTableName, realtimeInstances.size(),
          Integer.parseInt(realtimeTableConfig.getValidationConfig().getReplication()), realtimeTableConfig
              .getIndexingConfig().getStreamConfigs(), zkHelixPropertyStore, realtimeInstances);
      return idealState;
    case simple:
    default:
      throw new UnsupportedOperationException("Not support kafka consumer type: "
          + kafkaStreamMetadata.getConsumerType());
  }
}
 
开发者ID:Hanmourang,项目名称:Pinot,代码行数:27,代码来源:PinotTableIdealStateBuilder.java

示例3: buildInitialHighLevelRealtimeIdealStateFor

import org.apache.helix.HelixAdmin; //导入方法依赖的package包/类
public static IdealState buildInitialHighLevelRealtimeIdealStateFor(String realtimeTableName,
    TableConfig realtimeTableConfig, HelixAdmin helixAdmin, String helixClusterName,
    ZkHelixPropertyStore<ZNRecord> zkHelixPropertyStore) {
  String realtimeServerTenant =
      ControllerTenantNameBuilder.getRealtimeTenantNameForTenant(realtimeTableConfig.getTenantConfig().getServer());
  final List<String> realtimeInstances = helixAdmin.getInstancesInClusterWithTag(helixClusterName,
      realtimeServerTenant);
  IdealState idealState = buildEmptyKafkaConsumerRealtimeIdealStateFor(realtimeTableName, 1);
  if (realtimeInstances.size() % Integer.parseInt(realtimeTableConfig.getValidationConfig().getReplication()) != 0) {
    throw new RuntimeException(
        "Number of instance in current tenant should be an integer multiples of the number of replications");
  }
  setupInstanceConfigForKafkaHighLevelConsumer(realtimeTableName, realtimeInstances.size(),
      Integer.parseInt(realtimeTableConfig.getValidationConfig().getReplication()),
      realtimeTableConfig.getIndexingConfig().getStreamConfigs(), zkHelixPropertyStore, realtimeInstances);
  return idealState;
}
 
开发者ID:linkedin,项目名称:pinot,代码行数:18,代码来源:PinotTableIdealStateBuilder.java

示例4: getAssignedInstances

import org.apache.helix.HelixAdmin; //导入方法依赖的package包/类
@Override
public List<String> getAssignedInstances(HelixAdmin helixAdmin, String helixClusterName,
    SegmentMetadata segmentMetadata, int numReplicas, String tenantName) {
  String serverTenantName = null;
  if ("realtime".equalsIgnoreCase(segmentMetadata.getIndexType())) {
    serverTenantName = ControllerTenantNameBuilder.getRealtimeTenantNameForTenant(tenantName);
  } else {
    serverTenantName = ControllerTenantNameBuilder.getOfflineTenantNameForTenant(tenantName);
  }

  List<String> allInstances =
      helixAdmin.getInstancesInClusterWithTag(helixClusterName, serverTenantName);
  List<String> selectedInstanceList = new ArrayList<String>();
  if (segmentMetadata.getShardingKey() != null) {
    for (String instance : allInstances) {
      if (HelixHelper.getInstanceConfigsMapFor(instance, helixClusterName, helixAdmin).get("shardingKey")
          .equalsIgnoreCase(segmentMetadata.getShardingKey())) {
        selectedInstanceList.add(instance);
      }
    }
    LOGGER.info("Segment assignment result for : " + segmentMetadata.getName() + ", in resource : "
        + segmentMetadata.getTableName() + ", selected instances: "
        + Arrays.toString(selectedInstanceList.toArray()));
    return selectedInstanceList;
  } else {
    throw new RuntimeException("Segment missing sharding key!");
  }
}
 
开发者ID:Hanmourang,项目名称:Pinot,代码行数:29,代码来源:BucketizedSegmentStrategy.java

示例5: buildLowLevelRealtimeIdealStateFor

import org.apache.helix.HelixAdmin; //导入方法依赖的package包/类
public static void buildLowLevelRealtimeIdealStateFor(String realtimeTableName, TableConfig realtimeTableConfig,
    HelixAdmin helixAdmin, String helixClusterName, IdealState idealState) {
  String realtimeServerTenant =
      ControllerTenantNameBuilder.getRealtimeTenantNameForTenant(realtimeTableConfig.getTenantConfig().getServer());
  final List<String> realtimeInstances = helixAdmin.getInstancesInClusterWithTag(helixClusterName,
      realtimeServerTenant);
  boolean create = false;
  // Validate replicasPerPartition here.
  final String replicasPerPartitionStr = realtimeTableConfig.getValidationConfig().getReplicasPerPartition();
  if (replicasPerPartitionStr == null || replicasPerPartitionStr.isEmpty()) {
    throw new RuntimeException("Null or empty value for replicasPerPartition, expected a number");
  }
  final int nReplicas;
  try {
    nReplicas = Integer.valueOf(replicasPerPartitionStr);
  } catch (NumberFormatException e) {
    throw new PinotHelixResourceManager.InvalidTableConfigException(
        "Invalid value for replicasPerPartition, expected a number: " + replicasPerPartitionStr, e);
  }
  if (idealState == null) {
    idealState = buildEmptyKafkaConsumerRealtimeIdealStateFor(realtimeTableName, nReplicas);
    create = true;
  }
  LOGGER.info("Assigning partitions to instances for simple consumer for table {}", realtimeTableName);
  final KafkaStreamMetadata kafkaMetadata = new KafkaStreamMetadata(realtimeTableConfig.getIndexingConfig().getStreamConfigs());
  final PinotLLCRealtimeSegmentManager segmentManager = PinotLLCRealtimeSegmentManager.getInstance();
  final int nPartitions = getPartitionCount(kafkaMetadata);
  LOGGER.info("Assigning {} partitions to instances for simple consumer for table {}", nPartitions, realtimeTableName);
  segmentManager.setupHelixEntries(realtimeTableConfig, kafkaMetadata, nPartitions, realtimeInstances, idealState, create);
}
 
开发者ID:linkedin,项目名称:pinot,代码行数:31,代码来源:PinotTableIdealStateBuilder.java

示例6: getAssignedInstances

import org.apache.helix.HelixAdmin; //导入方法依赖的package包/类
@Override
public List<String> getAssignedInstances(HelixAdmin helixAdmin, String helixClusterName,
    SegmentMetadata segmentMetadata, int numReplicas, String tenantName) {
  String serverTenantName;
  String tableName;
  if ("realtime".equalsIgnoreCase(segmentMetadata.getIndexType())) {
    tableName = TableNameBuilder.REALTIME_TABLE_NAME_BUILDER.forTable(segmentMetadata.getTableName());
    serverTenantName = ControllerTenantNameBuilder.getRealtimeTenantNameForTenant(tenantName);
  } else {
    tableName = TableNameBuilder.OFFLINE_TABLE_NAME_BUILDER.forTable(segmentMetadata.getTableName());
    serverTenantName = ControllerTenantNameBuilder.getOfflineTenantNameForTenant(tenantName);
  }

  List<String> selectedInstances = new ArrayList<String>();
  Map<String, Integer> currentNumSegmentsPerInstanceMap = new HashMap<String, Integer>();
  List<String> allTaggedInstances = helixAdmin.getInstancesInClusterWithTag(helixClusterName, serverTenantName);
  for (String instance : allTaggedInstances) {
    currentNumSegmentsPerInstanceMap.put(instance, 0);
  }
  ExternalView externalView = helixAdmin.getResourceExternalView(helixClusterName, tableName);
  if (externalView != null) {
    for (String partitionName : externalView.getPartitionSet()) {
      Map<String, String> instanceToStateMap = externalView.getStateMap(partitionName);
      for (String instanceName : instanceToStateMap.keySet()) {
        if (currentNumSegmentsPerInstanceMap.containsKey(instanceName)) {
          currentNumSegmentsPerInstanceMap.put(instanceName, currentNumSegmentsPerInstanceMap.get(instanceName) + 1);
        } else {
          currentNumSegmentsPerInstanceMap.put(instanceName, 1);
        }
      }
    }

  }
  PriorityQueue<Number2ObjectPair<String>> priorityQueue =
      new PriorityQueue<Number2ObjectPair<String>>(numReplicas, Pairs.getDescendingnumber2ObjectPairComparator());
  for (String key : currentNumSegmentsPerInstanceMap.keySet()) {
    priorityQueue.add(new Number2ObjectPair<String>(currentNumSegmentsPerInstanceMap.get(key), key));
    if (priorityQueue.size() > numReplicas) {
      priorityQueue.poll();
    }
  }

  while (!priorityQueue.isEmpty()) {
    selectedInstances.add(priorityQueue.poll().getB());
  }
  LOGGER.info("Segment assignment result for : " + segmentMetadata.getName() + ", in resource : "
      + segmentMetadata.getTableName() + ", selected instances: " + Arrays.toString(selectedInstances.toArray()));
  return selectedInstances;
}
 
开发者ID:Hanmourang,项目名称:Pinot,代码行数:50,代码来源:BalanceNumSegmentAssignmentStrategy.java


注:本文中的org.apache.helix.HelixAdmin.getInstancesInClusterWithTag方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。