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


Java MockRMApp类代码示例

本文整理汇总了Java中org.apache.hadoop.yarn.server.resourcemanager.rmapp.MockRMApp的典型用法代码示例。如果您正苦于以下问题:Java MockRMApp类的具体用法?Java MockRMApp怎么用?Java MockRMApp使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。


MockRMApp类属于org.apache.hadoop.yarn.server.resourcemanager.rmapp包,在下文中一共展示了MockRMApp类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。

示例1: testAssignToQueue

import org.apache.hadoop.yarn.server.resourcemanager.rmapp.MockRMApp; //导入依赖的package包/类
@Test
public void testAssignToQueue() throws Exception {
  conf.set(FairSchedulerConfiguration.USER_AS_DEFAULT_QUEUE, "true");
  scheduler.init(conf);
  scheduler.start();
  scheduler.reinitialize(conf, resourceManager.getRMContext());

  RMApp rmApp1 = new MockRMApp(0, 0, RMAppState.NEW);
  RMApp rmApp2 = new MockRMApp(1, 1, RMAppState.NEW);
  
  FSLeafQueue queue1 = scheduler.assignToQueue(rmApp1, "default", "asterix");
  FSLeafQueue queue2 = scheduler.assignToQueue(rmApp2, "notdefault", "obelix");
  
  // assert FSLeafQueue's name is the correct name is the one set in the RMApp
  assertEquals(rmApp1.getQueue(), queue1.getName());
  assertEquals("root.asterix", rmApp1.getQueue());
  assertEquals(rmApp2.getQueue(), queue2.getName());
  assertEquals("root.notdefault", rmApp2.getQueue());
}
 
开发者ID:naver,项目名称:hadoop,代码行数:20,代码来源:TestFairScheduler.java

示例2: testAssignToNonLeafQueueReturnsNull

import org.apache.hadoop.yarn.server.resourcemanager.rmapp.MockRMApp; //导入依赖的package包/类
@Test
public void testAssignToNonLeafQueueReturnsNull() throws Exception {
  conf.set(FairSchedulerConfiguration.USER_AS_DEFAULT_QUEUE, "true");
  scheduler.init(conf);
  scheduler.start();
  scheduler.reinitialize(conf, resourceManager.getRMContext());

  scheduler.getQueueManager().getLeafQueue("root.child1.granchild", true);
  scheduler.getQueueManager().getLeafQueue("root.child2", true);

  RMApp rmApp1 = new MockRMApp(0, 0, RMAppState.NEW);
  RMApp rmApp2 = new MockRMApp(1, 1, RMAppState.NEW);

  // Trying to assign to non leaf queue would return null
  assertNull(scheduler.assignToQueue(rmApp1, "root.child1", "tintin"));
  assertNotNull(scheduler.assignToQueue(rmApp2, "root.child2", "snowy"));
}
 
开发者ID:naver,项目名称:hadoop,代码行数:18,代码来源:TestFairScheduler.java

示例3: testAssignToQueue

import org.apache.hadoop.yarn.server.resourcemanager.rmapp.MockRMApp; //导入依赖的package包/类
@Test
public void testAssignToQueue() throws Exception {
  Configuration conf = createConfiguration();
  conf.set(FairSchedulerConfiguration.USER_AS_DEFAULT_QUEUE, "true");
  scheduler.reinitialize(conf, resourceManager.getRMContext());
  
  RMApp rmApp1 = new MockRMApp(0, 0, RMAppState.NEW);
  RMApp rmApp2 = new MockRMApp(1, 1, RMAppState.NEW);
  
  FSLeafQueue queue1 = scheduler.assignToQueue(rmApp1, "default", "asterix");
  FSLeafQueue queue2 = scheduler.assignToQueue(rmApp2, "notdefault", "obelix");
  
  // assert FSLeafQueue's name is the correct name is the one set in the RMApp
  assertEquals(rmApp1.getQueue(), queue1.getName());
  assertEquals("root.asterix", rmApp1.getQueue());
  assertEquals(rmApp2.getQueue(), queue2.getName());
  assertEquals("root.notdefault", rmApp2.getQueue());
}
 
开发者ID:ict-carch,项目名称:hadoop-plus,代码行数:19,代码来源:TestFairScheduler.java

示例4: testAssignToQueue

import org.apache.hadoop.yarn.server.resourcemanager.rmapp.MockRMApp; //导入依赖的package包/类
@Test
public void testAssignToQueue() throws Exception {
  conf.set(FairSchedulerConfiguration.USER_AS_DEFAULT_QUEUE, "true");
  scheduler.reinitialize(conf, resourceManager.getRMContext());
  
  RMApp rmApp1 = new MockRMApp(0, 0, RMAppState.NEW);
  RMApp rmApp2 = new MockRMApp(1, 1, RMAppState.NEW);
  
  FSLeafQueue queue1 = scheduler.assignToQueue(rmApp1, "default", "asterix");
  FSLeafQueue queue2 = scheduler.assignToQueue(rmApp2, "notdefault", "obelix");
  
  // assert FSLeafQueue's name is the correct name is the one set in the RMApp
  assertEquals(rmApp1.getQueue(), queue1.getName());
  assertEquals("root.asterix", rmApp1.getQueue());
  assertEquals(rmApp2.getQueue(), queue2.getName());
  assertEquals("root.notdefault", rmApp2.getQueue());
}
 
开发者ID:Seagate,项目名称:hadoop-on-lustre2,代码行数:18,代码来源:TestFairScheduler.java

示例5: newRMApps

import org.apache.hadoop.yarn.server.resourcemanager.rmapp.MockRMApp; //导入依赖的package包/类
public static List<RMApp> newRMApps(int n, long time, RMAppState state) {
  List<RMApp> list = Lists.newArrayList();
  for (int i = 0; i < n; ++i) {
    list.add(new MockRMApp(i, time, state));
  }
  return list;
}
 
开发者ID:naver,项目名称:hadoop,代码行数:8,代码来源:TestAppManager.java

示例6: mockRMContext

import org.apache.hadoop.yarn.server.resourcemanager.rmapp.MockRMApp; //导入依赖的package包/类
private static RMContext mockRMContext(List<RMAppState> states) {
  final ConcurrentMap<ApplicationId, RMApp> applicationsMaps = Maps
      .newConcurrentMap();
  int i = 0;
  for (RMAppState state : states) {
    MockRMApp app = new MockRMApp(i, i, state) {
      @Override
      public RMAppMetrics getRMAppMetrics() {
        return new RMAppMetrics(Resource.newInstance(0, 0, 0), 0, 0, 0, 0, 0);
      }
      @Override
      public YarnApplicationState createApplicationState() {
        return YarnApplicationState.ACCEPTED;
      }
    };
    RMAppAttempt attempt = mock(RMAppAttempt.class);
    app.setCurrentAppAttempt(attempt);
    applicationsMaps.put(app.getApplicationId(), app);
    i++;
  }

  RMContextImpl rmContext =  new RMContextImpl(null, null, null, null,
      null, null, null, null, null, null) {
    @Override
    public ConcurrentMap<ApplicationId, RMApp> getRMApps() {
      return applicationsMaps;
    }
    @Override
    public ResourceScheduler getScheduler() {
      return mock(AbstractYarnScheduler.class);
    }
  };
  return rmContext;
}
 
开发者ID:naver,项目名称:hadoop,代码行数:35,代码来源:TestRMWebAppFairScheduler.java

示例7: testNestedUserQueue

import org.apache.hadoop.yarn.server.resourcemanager.rmapp.MockRMApp; //导入依赖的package包/类
@Test
public void testNestedUserQueue() throws IOException {
  conf.set(FairSchedulerConfiguration.ALLOCATION_FILE, ALLOC_FILE);
  conf.setClass(CommonConfigurationKeys.HADOOP_SECURITY_GROUP_MAPPING,
      SimpleGroupsMapping.class, GroupMappingServiceProvider.class);
  PrintWriter out = new PrintWriter(new FileWriter(ALLOC_FILE));
  out.println("<?xml version=\"1.0\"?>");
  out.println("<allocations>");
  out.println("<queue name=\"user1group\" type=\"parent\">");
  out.println("<minResources>1024mb,0vcores,0gcores</minResources>");
  out.println("</queue>");
  out.println("<queuePlacementPolicy>");
  out.println("<rule name=\"specified\" create=\"false\" />");
  out.println("<rule name=\"nestedUserQueue\">");
  out.println("     <rule name=\"primaryGroup\" create=\"false\" />");
  out.println("</rule>");
  out.println("<rule name=\"default\" />");
  out.println("</queuePlacementPolicy>");
  out.println("</allocations>");
  out.close();

  scheduler.init(conf);
  scheduler.start();
  scheduler.reinitialize(conf, resourceManager.getRMContext());
  RMApp rmApp1 = new MockRMApp(0, 0, RMAppState.NEW);

  FSLeafQueue user1Leaf = scheduler.assignToQueue(rmApp1, "root.default",
      "user1");

  assertEquals("root.user1group.user1", user1Leaf.getName());
}
 
开发者ID:naver,项目名称:hadoop,代码行数:32,代码来源:TestFairScheduler.java

示例8: mockRMContext

import org.apache.hadoop.yarn.server.resourcemanager.rmapp.MockRMApp; //导入依赖的package包/类
private static RMContext mockRMContext(List<RMAppState> states) {
  final ConcurrentMap<ApplicationId, RMApp> applicationsMaps = Maps
      .newConcurrentMap();
  int i = 0;
  for (RMAppState state : states) {
    MockRMApp app = new MockRMApp(i, i, state) {
      @Override
      public RMAppMetrics getRMAppMetrics() {
        return new RMAppMetrics(Resource.newInstance(0, 0), 0, 0, 0, 0);
      }
      @Override
      public YarnApplicationState createApplicationState() {
        return YarnApplicationState.ACCEPTED;
      }
    };
    RMAppAttempt attempt = mock(RMAppAttempt.class);
    app.setCurrentAppAttempt(attempt);
    applicationsMaps.put(app.getApplicationId(), app);
    i++;
  }

  RMContextImpl rmContext =  new RMContextImpl(null, null, null, null,
      null, null, null, null, null, null) {
    @Override
    public ConcurrentMap<ApplicationId, RMApp> getRMApps() {
      return applicationsMaps;
    }
    @Override
    public ResourceScheduler getScheduler() {
      return mock(AbstractYarnScheduler.class);
    }
  };
  return rmContext;
}
 
开发者ID:aliyun-beta,项目名称:aliyun-oss-hadoop-fs,代码行数:35,代码来源:TestRMWebAppFairScheduler.java

示例9: testNestedUserQueue

import org.apache.hadoop.yarn.server.resourcemanager.rmapp.MockRMApp; //导入依赖的package包/类
@Test
public void testNestedUserQueue() throws IOException {
  conf.set(FairSchedulerConfiguration.ALLOCATION_FILE, ALLOC_FILE);
  conf.setClass(CommonConfigurationKeys.HADOOP_SECURITY_GROUP_MAPPING,
      SimpleGroupsMapping.class, GroupMappingServiceProvider.class);
  PrintWriter out = new PrintWriter(new FileWriter(ALLOC_FILE));
  out.println("<?xml version=\"1.0\"?>");
  out.println("<allocations>");
  out.println("<queue name=\"user1group\" type=\"parent\">");
  out.println("<minResources>1024mb,0vcores</minResources>");
  out.println("</queue>");
  out.println("<queuePlacementPolicy>");
  out.println("<rule name=\"specified\" create=\"false\" />");
  out.println("<rule name=\"nestedUserQueue\">");
  out.println("     <rule name=\"primaryGroup\" create=\"false\" />");
  out.println("</rule>");
  out.println("<rule name=\"default\" />");
  out.println("</queuePlacementPolicy>");
  out.println("</allocations>");
  out.close();

  scheduler.init(conf);
  scheduler.start();
  scheduler.reinitialize(conf, resourceManager.getRMContext());
  RMApp rmApp1 = new MockRMApp(0, 0, RMAppState.NEW);

  FSLeafQueue user1Leaf = scheduler.assignToQueue(rmApp1, "root.default",
      "user1");

  assertEquals("root.user1group.user1", user1Leaf.getName());
}
 
开发者ID:aliyun-beta,项目名称:aliyun-oss-hadoop-fs,代码行数:32,代码来源:TestFairScheduler.java

示例10: mockRMContext

import org.apache.hadoop.yarn.server.resourcemanager.rmapp.MockRMApp; //导入依赖的package包/类
private static RMContext mockRMContext(List<RMAppState> states) {
  final ConcurrentMap<ApplicationId, RMApp> applicationsMaps = Maps
      .newConcurrentMap();
  int i = 0;
  for (RMAppState state : states) {
    MockRMApp app = new MockRMApp(i, i, state) {
      @Override
      public RMAppMetrics getRMAppMetrics() {
        return new RMAppMetrics(Resource.newInstance(0, 0), 0, 0, 0, 0);
      }
      @Override
      public YarnApplicationState createApplicationState() {
        return YarnApplicationState.ACCEPTED;
      }
    };
    RMAppAttempt attempt = mock(RMAppAttempt.class);
    app.setCurrentAppAttempt(attempt);
    applicationsMaps.put(app.getApplicationId(), app);
    i++;
  }

  return new RMContextImpl(null, null, null, null,
      null, null, null, null, null, null) {
    @Override
    public ConcurrentMap<ApplicationId, RMApp> getRMApps() {
      return applicationsMaps;
    }
  };
}
 
开发者ID:Nextzero,项目名称:hadoop-2.6.0-cdh5.4.3,代码行数:30,代码来源:TestRMWebAppFairScheduler.java

示例11: mockRMContext

import org.apache.hadoop.yarn.server.resourcemanager.rmapp.MockRMApp; //导入依赖的package包/类
private static RMContext mockRMContext(List<RMAppState> states) {
  final ConcurrentMap<ApplicationId, RMApp> applicationsMaps = Maps
      .newConcurrentMap();
  int i = 0;
  for (RMAppState state : states) {
    MockRMApp app = new MockRMApp(i, i, state) {
      @Override
      public RMAppMetrics getRMAppMetrics() {
        return new RMAppMetrics(Resource.newInstance(0, 0, 0),
            0, 0, 0, 0, 0, 0, 0, 0);
      }
      @Override
      public YarnApplicationState createApplicationState() {
        return YarnApplicationState.ACCEPTED;
      }
    };
    RMAppAttempt attempt = mock(RMAppAttempt.class);
    app.setCurrentAppAttempt(attempt);
    applicationsMaps.put(app.getApplicationId(), app);
    i++;
  }

  RMContextImpl rmContext =  new RMContextImpl(null, null, null, null,
      null, null, null, null, null, null) {
    @Override
    public ConcurrentMap<ApplicationId, RMApp> getRMApps() {
      return applicationsMaps;
    }
    @Override
    public ResourceScheduler getScheduler() {
      return mock(AbstractYarnScheduler.class);
    }
  };
  return rmContext;
}
 
开发者ID:hopshadoop,项目名称:hops,代码行数:36,代码来源:TestRMWebAppFairScheduler.java

示例12: testAssignToNonLeafQueueReturnsNull

import org.apache.hadoop.yarn.server.resourcemanager.rmapp.MockRMApp; //导入依赖的package包/类
@Test
public void testAssignToNonLeafQueueReturnsNull() throws Exception {
  conf.set(FairSchedulerConfiguration.USER_AS_DEFAULT_QUEUE, "true");
  scheduler.reinitialize(conf, resourceManager.getRMContext());

  scheduler.getQueueManager().getLeafQueue("root.child1.granchild", true);
  scheduler.getQueueManager().getLeafQueue("root.child2", true);

  RMApp rmApp1 = new MockRMApp(0, 0, RMAppState.NEW);
  RMApp rmApp2 = new MockRMApp(1, 1, RMAppState.NEW);

  // Trying to assign to non leaf queue would return null
  assertNull(scheduler.assignToQueue(rmApp1, "root.child1", "tintin"));
  assertNotNull(scheduler.assignToQueue(rmApp2, "root.child2", "snowy"));
}
 
开发者ID:Seagate,项目名称:hadoop-on-lustre2,代码行数:16,代码来源:TestFairScheduler.java

示例13: testFairShareAndWeightsInNestedUserQueueRule

import org.apache.hadoop.yarn.server.resourcemanager.rmapp.MockRMApp; //导入依赖的package包/类
@Test
public void testFairShareAndWeightsInNestedUserQueueRule() throws Exception {
  conf.set(FairSchedulerConfiguration.ALLOCATION_FILE, ALLOC_FILE);

  PrintWriter out = new PrintWriter(new FileWriter(ALLOC_FILE));

  out.println("<?xml version=\"1.0\"?>");
  out.println("<allocations>");
  out.println("<queue name=\"parentq\" type=\"parent\">");
  out.println("<minResources>1024mb,0vcores,0gcores</minResources>");
  out.println("</queue>");
  out.println("<queuePlacementPolicy>");
  out.println("<rule name=\"nestedUserQueue\">");
  out.println("     <rule name=\"specified\" create=\"false\" />");
  out.println("</rule>");
  out.println("<rule name=\"default\" />");
  out.println("</queuePlacementPolicy>");
  out.println("</allocations>");
  out.close();

  RMApp rmApp1 = new MockRMApp(0, 0, RMAppState.NEW);
  RMApp rmApp2 = new MockRMApp(1, 1, RMAppState.NEW);

  scheduler.init(conf);
  scheduler.start();
  scheduler.reinitialize(conf, resourceManager.getRMContext());

  int capacity = 16 * 1024;
  // create node with 16 G
  RMNode node1 = MockNodes.newNodeInfo(1, Resources.createResource(capacity),
      1, "127.0.0.1");
  NodeAddedSchedulerEvent nodeEvent1 = new NodeAddedSchedulerEvent(node1);
  scheduler.handle(nodeEvent1);

  // user1,user2 submit their apps to parentq and create user queues
  createSchedulingRequest(10 * 1024, "root.parentq", "user1");
  createSchedulingRequest(10 * 1024, "root.parentq", "user2");
  // user3 submits app in default queue
  createSchedulingRequest(10 * 1024, "root.default", "user3");

  scheduler.update();
  scheduler.getQueueManager().getRootQueue()
      .setSteadyFairShare(scheduler.getClusterResource());
  scheduler.getQueueManager().getRootQueue().recomputeSteadyShares();

  Collection<FSLeafQueue> leafQueues = scheduler.getQueueManager()
      .getLeafQueues();

  for (FSLeafQueue leaf : leafQueues) {
    if (leaf.getName().equals("root.parentq.user1")
        || leaf.getName().equals("root.parentq.user2")) {
      // assert that the fair share is 1/4th node1's capacity
      assertEquals(capacity / 4, leaf.getFairShare().getMemory());
      // assert that the steady fair share is 1/4th node1's capacity
      assertEquals(capacity / 4, leaf.getSteadyFairShare().getMemory());
      // assert weights are equal for both the user queues
      assertEquals(1.0, leaf.getWeights().getWeight(ResourceType.MEMORY), 0);
    }
  }
}
 
开发者ID:naver,项目名称:hadoop,代码行数:61,代码来源:TestFairScheduler.java

示例14: testFairShareAndWeightsInNestedUserQueueRule

import org.apache.hadoop.yarn.server.resourcemanager.rmapp.MockRMApp; //导入依赖的package包/类
@Test
public void testFairShareAndWeightsInNestedUserQueueRule() throws Exception {
  conf.set(FairSchedulerConfiguration.ALLOCATION_FILE, ALLOC_FILE);

  PrintWriter out = new PrintWriter(new FileWriter(ALLOC_FILE));

  out.println("<?xml version=\"1.0\"?>");
  out.println("<allocations>");
  out.println("<queue name=\"parentq\" type=\"parent\">");
  out.println("<minResources>1024mb,0vcores</minResources>");
  out.println("</queue>");
  out.println("<queuePlacementPolicy>");
  out.println("<rule name=\"nestedUserQueue\">");
  out.println("     <rule name=\"specified\" create=\"false\" />");
  out.println("</rule>");
  out.println("<rule name=\"default\" />");
  out.println("</queuePlacementPolicy>");
  out.println("</allocations>");
  out.close();

  RMApp rmApp1 = new MockRMApp(0, 0, RMAppState.NEW);
  RMApp rmApp2 = new MockRMApp(1, 1, RMAppState.NEW);

  scheduler.init(conf);
  scheduler.start();
  scheduler.reinitialize(conf, resourceManager.getRMContext());

  int capacity = 16 * 1024;
  // create node with 16 G
  RMNode node1 = MockNodes.newNodeInfo(1, Resources.createResource(capacity),
      1, "127.0.0.1");
  NodeAddedSchedulerEvent nodeEvent1 = new NodeAddedSchedulerEvent(node1);
  scheduler.handle(nodeEvent1);

  // user1,user2 submit their apps to parentq and create user queues
  createSchedulingRequest(10 * 1024, "root.parentq", "user1");
  createSchedulingRequest(10 * 1024, "root.parentq", "user2");
  // user3 submits app in default queue
  createSchedulingRequest(10 * 1024, "root.default", "user3");

  scheduler.update();
  scheduler.getQueueManager().getRootQueue()
      .setSteadyFairShare(scheduler.getClusterResource());
  scheduler.getQueueManager().getRootQueue().recomputeSteadyShares();

  Collection<FSLeafQueue> leafQueues = scheduler.getQueueManager()
      .getLeafQueues();

  for (FSLeafQueue leaf : leafQueues) {
    if (leaf.getName().equals("root.parentq.user1")
        || leaf.getName().equals("root.parentq.user2")) {
      // assert that the fair share is 1/4th node1's capacity
      assertEquals(capacity / 4, leaf.getFairShare().getMemory());
      // assert that the steady fair share is 1/4th node1's capacity
      assertEquals(capacity / 4, leaf.getSteadyFairShare().getMemory());
      // assert weights are equal for both the user queues
      assertEquals(1.0, leaf.getWeights().getWeight(ResourceType.MEMORY), 0);
    }
  }
}
 
开发者ID:aliyun-beta,项目名称:aliyun-oss-hadoop-fs,代码行数:61,代码来源:TestFairScheduler.java

示例15: testReleasedContainerIfAppAttemptisNull

import org.apache.hadoop.yarn.server.resourcemanager.rmapp.MockRMApp; //导入依赖的package包/类
@SuppressWarnings({ "rawtypes" })
@Test(timeout = 10000)
public void testReleasedContainerIfAppAttemptisNull() throws Exception {
  YarnConfiguration conf=getConf();
  conf.set(YarnConfiguration.RM_STORE, MemoryRMStateStore.class.getName());
  MemoryRMStateStore memStore = new MemoryRMStateStore();
  memStore.init(conf);
  MockRM rm1 = new MockRM(conf, memStore);
  try {
    rm1.start();
    MockNM nm1 =
        new MockNM("127.0.0.1:1234", 8192, rm1.getResourceTrackerService());
    nm1.registerNode();

    AbstractYarnScheduler scheduler =
        (AbstractYarnScheduler) rm1.getResourceScheduler();
    // Mock App without attempt
    RMApp mockAPp =
        new MockRMApp(125, System.currentTimeMillis(), RMAppState.NEW);
    SchedulerApplication<FiCaSchedulerApp> application =
        new SchedulerApplication<FiCaSchedulerApp>(null, mockAPp.getUser());

    // Second app with one app attempt
    RMApp app = rm1.submitApp(200);
    MockAM am1 = MockRM.launchAndRegisterAM(app, rm1, nm1);
    final ContainerId runningContainer =
        ContainerId.newContainerId(am1.getApplicationAttemptId(), 2);
    am1.allocate(null, Arrays.asList(runningContainer));

    Map schedulerApplications = scheduler.getSchedulerApplications();
    SchedulerApplication schedulerApp =
        (SchedulerApplication) scheduler.getSchedulerApplications().get(
            app.getApplicationId());
    schedulerApplications.put(mockAPp.getApplicationId(), application);

    scheduler.clearPendingContainerCache();

    Assert.assertEquals("Pending containers are not released "
        + "when one of the application attempt is null !", schedulerApp
        .getCurrentAppAttempt().getPendingRelease().size(), 0);
  } finally {
    if (rm1 != null) {
      rm1.stop();
    }
  }
}
 
开发者ID:aliyun-beta,项目名称:aliyun-oss-hadoop-fs,代码行数:47,代码来源:TestAbstractYarnScheduler.java


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