资源服务是用来管理资源和资源库的一种服务,它提供了四类API。
• 管理资源库的API
• 管理资源的API
• 管理资源数据的API
• 管理资源包的API
在使用这些API时,经常要使用资源ID来指定一个被操作的资源。如果指定的是文档,那么资源ID的扩展名必须与资源类型一致。例如:如下的资源ID必须是一个指向地图定义的资源。
$resourceID = new MgResourceIdentifier("Library://Geography/World.MapDefinition");
如果指定资源是文件夹,那么资源ID必须以“/”结尾。例如:
$resourceID = new MgResourceIdentifier("Library://Geography/");1. 获取资源服务
MapGuide中使用MgResourceService来代表资源服务。MgResourceService是一个接口,你无法直接创建MgResourceService的实例。如果大家看看MapGuide的源代码,你就会发现MapGuide使用了Singleton模式来创建MgResourceService。所以,我们必须使用方法MgSiteConnection::CreateService(…)来创建一个MgResourceService的实例,调用这个方法返回的结果始终是同一个MgResourceService的实例。如下的代码示意了如何获取一个资源服务。
// 初始化WebTier
MgInitializeWebTier('C://Inetpub//wwwroot//PhpMapAgent//webconfig.ini');
// 创建到MapGuide站点服务器的一个连接
$user = new MgUserInformation('Administrator', 'admin');
$siteConnection = new MgSiteConnection();
$siteConnection->Open($user);
// 获取资源服务
$resourceService = $siteConnection->CreateService(MgServiceType::ResourceService);
2. 头(Header)
每个资源库和资源都有一个XML格式的头(Header),它包含了访问这些项目的权限设置信息。MapGuide包含了两种类型的头,ResourceFolderHeader和ResourceDocumentHeader。ResourceFolderHeader用于设置文件夹资源或资源库的权限,ResourceDocumentHeader用于设置其它类型资源的图标、权限和元数据。 如果使用下面的ResourceFolderHeader设置资源库或文件夹资源的权限,那么所有用户都可以读取和修改此资源库或文件夹资源。
<?xml version="1.0" encoding="UTF-8"?>
<ResourceFolderHeader xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xsi:noNamespaceSchemaLocation="ResourceFolderHeader-1.0.0.xsd">
<Security>
<Inherited>false</Inherited>
<Groups>
<Group>
<Name>Everyone</Name>
<Permissions>r,w</Permissions>
</Group>
</Groups>
</Security>
</ResourceFolderHeader>3. 管理资源库
资源服务提供了获取和修改资源库内容和头的API。
3.1 获取资源库的内容
方法GetRepositoryContent(…)用于获取指定资源库的内容。参数resource用于指定一个资源库,它可以是Library或Session资源库。返回值返回一个使用RepositoryContent XML Schema的XML字节流,它描述了指定资源库中的内容。
MgByteReader GetRepositoryContent(MgResourceIdentifier resource);
如下的代码示意了如何返回一个资源库的内容。
$resourceID = new MgResourceIdentifier("Library://");
$byteReader = $resourceService->GetRepositoryContent($resourceID);
echo $byteReader->ToString();
3.2 获取资源库的头 方法GetRepositoryHeader(…)用于获取指定资源库的头。参数resource用于指定一个资源库。返回值是一个使用ReourceFolderHeader XML Schema的XML字节流,它描述了指定资源库的头。
MgByteReader GetRepositoryHeader(MgResourceIdentifier resource);
如下的代码示意了如何返回一个资源库的头。
$resourceID = new MgResourceIdentifier("Library://");
$byteReader = $resourceService->GetRepositoryHeader($resourceID);
echo $byteReader->ToString();
3.3 更新资源库
方法UpdateRepositoryHeader(…)用于更新指定资源库的内容和头部。参数resource用于指定一个资源库,参数content用于指定资源库的内容,参数header用于指定资源库的头部。 void UpdateRepository (MgResourceIdentifier resource,
MgByteReader content,
MgByteReader header);
如下的代码示意了如何更新资源库。
$resourceID = new MgResourceIdentifier('Library://');
$byteSource = new MgByteSource('C:DataRepositoryContent.xml');
$byteReader = $byteSource->GetReader();
$resourceService->UpdateRepository($resourceID, $byteReader, null);3.4 管理资源
资源服务提供了API用于枚举资源及其所引用的资源,获取、修改资源的内容、头和元数据,拷贝、删除和移动资源等。
3.4.1 枚举资源
方法EnumerateResources(…)用于枚举资源库中指定类型的资源。参数resource用于指定一个需要枚举的资源,它可以是一个资源文档,也可以是一个资源文件夹。参数depth用于相对于指定资源的递归深度。• 如果资源是一个文档,那么depth必须为0。
• 如果资源是一个文件夹:
• 如果depth等于0,那么只返回指定文件夹的信息。
• 如果depth大于0,那么返回指定文件夹及其depth层子孙的信息。
• 如果depth等于-1,那么返回文件夹及其所有子孙的信息。
参数type用于指定需要枚举的资源,它可以是MgResourceType中定义的任意一种资源类型。如果type设置为NULL,那么枚举所有的资源类型。返回值是一个使用ReourceList XML Schema的XML字节流,它描述了所有枚举得到的资源。
MgByteReader* EnumerateResources(MgResourceIdentifier* resource,
INT32 depth,
CREFSTRING type);
如下的代码示意了如何结合不同的参数来枚举资源库中的资源。
// 枚举Library资源库中的所有资源。
$resourceID = new MgResourceIdentifier("Library://");
$byteReader = $resourceService->EnumerateResources($resourceID, -1, "");
// 枚举Library资源库Geography文件夹下的所有资源,包含它的子文件夹下的资源。
$resourceID = new MgResourceIdentifier("Library://Geography/");
$byteReader = $resourceService->EnumerateResources($resourceID, -1, "");
// 枚举Library资源库中的所有地图定义资源。
$resourceID = new MgResourceIdentifier("Library://");
$byteReader = $resourceService->EnumerateResources($resourceID, -1, "MapDefinition");
// 枚举Library资源库中的所有文件夹资源。
$resourceID = new MgResourceIdentifier("Library://");
$byteReader = $resourceService->EnumerateResources($resourceID, -1, "Folder");
// 枚举Library资源库Geography文件夹资源,不包含文件夹下的资源。
$resourceID = new MgResourceIdentifier("Library://Geography/");
$byteReader = $resourceService->EnumerateResources($resourceID, 0, "Folder");
// 枚举Library资源库Geography文件夹,及文件夹下一层的所有地图定义资源,
// 不包含文件夹下的文件夹下的资源。。
$resourceID = new MgResourceIdentifier("Library://Geography/");
$byteReader = $resourceService->EnumerateResources($resourceID, 1, "MapDefinition");
// 枚举特定的地图定义资源。此时,depth必须设置为0。
$resourceID = new MgResourceIdentifier("Library://Geography/World.MapDefinition");
$byteReader = $resourceService->EnumerateResources($resourceID, 0, "MapDefinition");3.4.2 枚举引用
方法EnumerateReferences(…)用于枚举引用了指定资源的所有资源。参数resource用于指定一个需要枚举其引用的资源。返回值是一个使用ReourceReferenceList XML Schema的XML字节流,它描述了资源的所有引用。
MgByteReader EnumerateReferences(MgResourceIdentifier resource);
如下的代码示意了如何枚举资源的数据。
$resourceID= new MgResourceIdentifier('Library://Samples/Sheboygan/Layers/BuildingOutlines.LayerDefinition');
$byteReader = $resourceService->EnumerateReferences($resourceID);
echo $byteReader->ToString();
执行上面的代码,会得到类似如下的XML。
<?xml version="1.0" encoding="UTF-8"?>
<ResourceReferenceList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ResourceReferenceList-1.0.0.xsd">
<ResourceId>Library://Samples/Sheboygan/Maps/Sheboygan.MapDefinition</ResourceId>
</ResourceReferenceList>
3.4.3 获取资源相关的信息
方法GetResourceContent(…)用于获取指定资源的内容。所有资源的内容都是XML格式的。对于不同类型的资源,它的XML Schema是不同的。你可以使用MgResourceIdentifier::GetResourceType ()得到资源类型,从而根据其相应的XML Schema分析和解释资源内容。
MgByteReader GetResourceContent(MgResourceIdentifier resource);
如下的代码示意了如何获取一个地图定义资源的内容。
$resourceID = new MgResourceIdentifier("Library://Geography/World.MapDefinition");
$byteReader = $resourceService->GetResourceContent($resourceID);
方法GetResourceHeader(…)用于获取指定资源的头。返回值返回一个使用ReourceDocumentHeader XML Schema的XML字节流,它描述了指定资源的头。
MgByteReader GetResourceHeader(MgResourceIdentifier resource);
如下的代码示意了如何获取一个地图定义资源的头。
$resourceID = new MgResourceIdentifier("Library://Geography/World.MapDefinition");
$byteReader = $resourceService->GetResourceHeader($resourceID);
方法GetResourceMetadata(…)用于获取指定资源的元数据。返回值返回一个代表资源元数据的XML字节流。如果没有关联到资源的元数据,此方法返回NULL。一般情况下,我们使用FGDC 或ISO格式的元数据。大家可以到登录http://www.fgdc.gov/metadata和http://www.iso.org查看这两种元数据的具体格式。
MgByteReader GetResourceMetadata(MgResourceIdentifier resource);
方法GetResourceContent(…)用于检测指定资源是否已经存在。
bool ResourceExists(MgResourceIdentifier resource);
3.4.4 设置资源
方法SetResource(…)用于设置指定资源的内容和头。如果指定的资源不存在,则添加此资源;如果指定的资源已经存在,则更新此资源。参数resource用于指定一个资源。参数content用于指定资源的内容,如果不打算设置资源的内容,可以将其设置为NULL。参数header用于指定资源的头,这是一个使用了ReourceFolderHeader或ResourceDocumentHeader XML Schema的XML字节流。如果只是设置资源的内容,可以将header设置为NULL。这时,资源的权限设置继承于其父节点。
void SetResource(MgResourceIdentifier resource,
MgByteReader content,
MgByteReader header);
下面,我们通过添加一个地图定义资源来示意如何添加一个资源。
1. 准备资源内容。下例中的地图定义由两个图层Cities和Countries组成。
<?xml version="1.0" encoding="UTF-8"?>
<MapDefinition version="1.0.0">
<Name>World</Name>
<Layers>
<Layer>
<Name>Cities</Name>
<ResourceId>Library://World/Layers/Cities.Layer</ResourceId>
</Layer>
<Layer>
<Name>Countries</Name>
<ResourceId>Library://World/Layers/Countries.Layer</ResourceId>
</Layer>
</Layers>
</MapDefinition>
2. 准备资源头部。下例中,它的权限设置继承自其父节点。
<?xml version="1.0" encoding="UTF-8"?>
<ResourceDocumentHeader
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xsi:noNamespaceSchemaLocation="ResourceDocumentHeader-1.0.0.xsd">
<Security>
<Inherited>true</Inherited>
</Security>
</ResourceDocumentHeader>
3. 添加资源。
$resourceID= new MgResourceIdentifier("Library://Geography/World.MapDefinition");
$content = "C:DataMapsWorld.MapDefinition";
$content_byteSource = new MgByteSource($content);
$content_byteSource->setMimeType("text/xml");
$content_byteReader = $content_byteSource->GetReader();
$header = "C:DataMapsResourceDocumentHeader.xml";
$header_byteSource = new MgByteSource($header);
$header_byteSource->setMimeType("text/xml");
$header_byteReader = $header_byteSource->GetReader();
$resourceService->SetResource($resourceID, $content_byteReader,
$header_byteReader);
4. 如果需要,添加资源所引用的其它资源。此例中,地图定义引用了其它两个图层定义资源。如果这两个资源没有添加到资源库中,我们必须使用类似的步骤将它们添加到资源库。
5. 如果需要,设置资源数据。此例中,地图定义自身并不需要设置资源数据。但是,如果它所引用的图层定义没有设置相应的资源数据,那么我们需要为图层定义设置相应的资源数据。3.4.5 设置资源的元数据 方法SetResourceMetadata(…)用于设置指定资源的元数据。如果指定的资源不存在,那么此方法调用会失败。参数resource用于指定一个需要设置元数据的资源。参数content用于指定资源的元数据。如果设置resource为NULL,那么清除指定资源的元数据。MapGuide没有规定元数据的XML Schema,而是由用户自己来决定。MapGuide对这些元数据不做任何格式的检验,而是将其直接存储在资源库中。一般情况下,我们使用FGDC 或ISO格式的元数据。
void SetResourceMetadata(MgResourceIdentifier resource, MgByteReader content);
3.4.6 删除资源
方法DeleteResource(…)用于删除指定资源,及此资源的数据。参数resource用于指定一个需要删除的资源。如果指定的是一个资源文档,那么删除此资源文档。如果指定的是一个资源文件夹,那么此文件夹、此文件夹下的资源文档、此文件夹的子资源文件夹都会被删除。如果试图删除一个不存在的资源,那么此方法会抛出一个异常。
void DeleteResource(MgResourceIdentifier resource);
如下的代码示意了如何删除一个地图定义资源。
$resourceID = new MgResourceIdentifier("Library://Maps/World.MapDefinition");
$resourceService->DeleteResource($resourceID);
如下的代码示意了如何删除一个资源文件夹,及此文件夹下的其它资源。
$resourceID = new MgResourceIdentifier("Library://Maps/");
$resourceService->DeleteResource($resourceID);
如下的代码示意了如何删除资源库中的所有资源。
$resourceID = new MgResourceIdentifier("Library://Maps/");
$resourceService->DeleteResource($resourceID);
3.4.7 移动资源
方法MoveResource(…)用于将一个已经存在的资源移到其它位置。参数sourceResource用于指定一个需要移动的资源,它既可以是一个文档,也可以是一个文件夹。如果指定一个资源文件夹,此方法亦拷贝文件夹下的资源。参数destResource用于指定移动的目标位置。参数overwrite用于决定在目标资源存在的情况下是否覆盖它。如果拷贝的是文件夹、 overwrite为真,且目标文件夹已经存在,那么只覆盖目标文件夹下具有相同文件夹名称的子文件夹,其它的文件夹保持原样。
需要注意的是,此方法有一个缺陷。如果有一些资源引用了的被移动的资源,此方法不会更新这些引用。在MapGuide开源版2.2和MapGuide企业版2011中,此即将修正此缺陷。
MgResourceIdentifier destResource, bool overwrite);
如下的代码示意了移动资源文档Library://Geography/World.MapDefinition到Library://Atlas/Oceans.MapDefinition。
$oldPath = new MgResourceIdentifier("Library://Geography/World.MapDefinition");
$newPath = new MgResourceIdentifier("Library://Atlas/Oceans.MapDefinition");
$resourceService->MoveResource($oldPath, $newPath, true);
如下的代码示意了移动资源文件夹Library://Geography/到Library://World Geography/。
$oldPath = new MgResourceIdentifier("Library://Geography/");
$newPath = new MgResourceIdentifier("Library://World Geography/");
$resourceService->MoveResource($oldPath, $newPath, true);
资源服务没有提供一个方法来重命名资源,因为MoveResource(…)就可以实现此功能。如下的代码示意了重命名资源Oceans.MapDefinition为Pacific Ocean.MapDefinition。
$oldPath = new MgResourceIdentifier("Library://Atlas/Oceans.MapDefinition");
$newPath = new MgResourceIdentifier("Library://Atlas/Pacific Ocean.MapDefinition");
$resourceService->MoveResource($oldPath, $newPath, true);
3.4.8 拷贝资源
方法RenameResourceData(…)用于拷贝指定的资源到其它位置。参数sourceResource用于指定一个需要拷贝的资源,它既可以是一个文档,也可以是一个文件夹。如果指定一个资源文件夹,此方法亦拷贝文件夹下的资源。参数destResource用于指定拷贝的目标位置。newDataName用于指定新的资源数据名称。参数overwrite用于决定在目标资源存在的情况下是否覆盖它。如果拷贝的是文件夹、 overwrite为真,且目标文件夹已经存在,那么只覆盖目标文件夹下具有相同文件夹名称的子文件夹,其它的文件夹保持原样。
void CopyResource(MgResourceIdentifier sourceResource,
MgResourceIdentifier destResource, bool overwrite);
如下的代码示意了拷贝资源文档Library://Geography/World.MapDefinition到Library://Atlas/World Geography.MapDefinition。
$source_resourceID= new MgResourceIdentifier("Library://Geography/World.MapDefinition");
$destination_resourceID= new MgResourceIdentifier("Library://Atlas/World Geography.MapDefinition");
$resourceService->CopyResource($source_resourceID, $destination_resourceID, true);
如下的代码示意了拷资源文件夹Library://Geography/到Library://World/Oceans/。
$source_resourceID= new MgResourceIdentifier("Library://Geography/");
$destination_resourceID= new MgResourceIdentifier("Library://World/Oceans/");
$resourceService->CopyResource($source_resourceID, $destination_resourceID, true);
3.4.9 设置资源权限
通过方法SetResource(…)更新资源的头,可以改变资源的权限设置。但是,这种方式不是非常直观。所以,资源服务还提供了另外两个更为方便的方法。在使用如下两个方法时,必须以Administrator登录,或者登录用户是指定资源的主人(Owner)。通过调用EnumerateResources(…)可以获得资源的主人。
void InheritPermissionsFrom(MgResourceIdentifier resource);
void ChangeResourceOwner(MgResourceIdentifier resource, string owner, bool includeDescendants);
方法InheritPermissionsFrom(…)用于设置指定资源文件夹的所有子孙继承此文件夹的权限设置。此方法只能使用于Library资源库,不可以用于Session资源库。参数resource必须指定一个文件夹资源。
例如:文件夹Library://Geography/下包含一个地图定义资源和一个包含了两个要素源资源的文件夹,通过调用此方法会将此文件夹下的所有资源设置为“inherit”。
$resourceID= new MgResourceIdentifier("Library://Geography/");
$resourceService->InheritPermissionsFrom($resourceID);
方法ChangeResourceOwner(…)用于改变指定资源的主人。参数source用于指定一个需要改变主人的资源,它既可以是一个文档,也可以是一个文件夹。参数owner用于指定新主人的用户ID。参数includeDescendants用于决定是否改变资源子孙的主人。只有在指定的资源是文件夹时,此参数才有意义。
如下的代码示意了如何改变一个资源的主人。
$resourceID= new MgResourceIdentifier("Library://Geography/World.MapDefinition");
$resourceService->ChangeResourceOwner($resourceID, "John Smith", false);
3.5 管理资源数据
资源数据隶属于一个资源,资源使用不同的名称来区分不同的资源数据。所以,每个资源数据都有一个唯一的名称。
资源服务提供了API用于枚举、获取、添加、删除和重命名资源数据。3.5.1 枚举资源数据
方法EnumerateResourceData(…)用于枚举指定资源的数据。参数resource用于指定一个需要枚举数据的资源。返回值是一个使用ReourceDataList XML Schema的XML字节流,它描述了所有枚举得到的资源数据。
MgByteReader EnumerateResourceData(MgResourceIdentifier resource);
如下的代码示意了如何枚举资源的数据。
$resourceID = new MgResourceIdentifier("Library://Geography/Calgary.FeatureSource");
$byteReader = $resourceService->EnumerateResourceData($resourceID);
echo $byteReader->ToString();
执行上面的代码,会得到类似如下的XML。
<?xml version="1.0" encoding="UTF-8"?>
<ResourceDataList xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xsi:noNamespaceSchemaLocation="ResourceDataList-1.0.0.xsd">
<ResourceData>
<Name>locations of points</Name>
<Type>File</Type>
</ResourceData>
</ResourceDataList>
3.5.2 获取资源数据
方法GetResourceData(…)用于枚举指定资源的数据。参数resource用于指定一个需要枚举数据的资源。dataName用于指定需要返回的资源数据的名称,这个名称是调用setResourceData(…)时所设置的名称。返回值是一个包含资源数据内容的字节流。
MgByteReader GetResourceData(MgResourceIdentifier resource, String dataName);
如下的代码示意了如何获取资源的数据。
$resourceID = new MgResourceIdentifier("Library://Geography/Calgary.FeatureSource");
$byteReader = $resourceService->GetResourceData($resourceID, "locations of points");
$byteSink = new MgByteSink($byteReader);
$byteSink->ToFile('C:temppoints.sdf');
3.5.3 设置资源数据
方法SetResourceData(…)用于为指定资源的添加数据,它会将数据上传和存储到资源库。但是,它并不会进行任何数据转换的操作。参数resource用于指定一个需要设置数据的资源。参数dataName用于指定资源数据的名称,它可以是任何合法的UTF-8字符串。如果资源已经具有相同名称的数据,那么会覆盖掉资源库中已有的数据。如果资源数据名称为MgResourceDataName::UserCredentials,那么可以在资源的内容中插入标签MgResourceTag::Username和MgResourceTag::Password,这两个标签分别代表FDO Providers的用户名和密码,资源服务会使用资源数据中提供的认证信息替换它们。参数dataType用于指定资源数据的类型,它必须是类MgResourceDataType中预定义的某一类型。参数data用于指定数据。
void SetResourceData(MgResourceIdentifier resource, string dataName, string dataType, MgByteReader data);
如下的代码示意了如何设置资源数据,将其存储为文件。
$resourceID = new MgResourceIdentifier('Library://Geography/Calgary.FeatureSource');
$byteSource = new MgByteSource('C:DataCalgaryDataCalgary points.sdf');
$data = $byteSource->GetReader();
$resourceService->SetResourceData($resourceID, 'locations of points', 'File', $data);
如下的代码示意了如何设置资源数据,将其存储为流。
$resourceID = new MgResourceIdentifier('Library://Geography/Trees.SymbolLibrary');
$byteSource = new MgByteSource('C:DataCalgaryDatamarkers.dwf');
$data = $byteSource->GetReader();
$resourceService->SetResourceData($resourceID, 'symbols for points', 'Stream', $data);
如下的代码示意了如何为资源设置内嵌的认证信息,将其存储为字符串。当设置资源的内嵌的认证信息时,必须设置资源数据的名称为MgResourceDataName::UserCredentials,类型为字符串。
$resourceID = new MgResourceIdentifier('Library://Geography/database connnection.FeatureSource');
$byteSource = new MgByteSource('C:DataCalgaryDatacredentials.txt');
$data = $byteSource->GetReader();
$dataName = new MgResourceDataName();
$resourceService->SetResourceData($resourceID, MgResourceDataName::UserCredentials, 'String', $data);
3.5.4 重命名资源数据
方法RenameResourceData(…)用于重命名指定的资源数据。参数resource用于指定一个需要重命名数据的资源。oldDataName用于指定需要重命名的资源数据的名称。newDataName用于指定新的资源数据名称。Overwrite用于决定在目标资源数据存在的情况下是否覆盖它。
void RenameResourceData(MgResourceIdentifier resource, String oldDataName, String newDataName, bool overwrite);
如下的代码示意了如何重命名资源数据。
$resourceID = new MgResourceIdentifier("Library://Geography/Calgary.FeatureSource");
$resourceService->RenameResourceData($resourceID, "locations of points", "locations of historical sites", true);
3.5.5 删除资源数据
方法DeleteResourceData(…)用于删除指定的资源数据。参数resource用于指定一个需要删除数据的资源。dataName用于指定需要删除的资源数据的名称。
void DeleteResourceData(MgResourceIdentifier resource, String dataName);
如下的代码示意了如何重命名资源数据。
$resourceID = new MgResourceIdentifier("Library://Geography/Calgary.FeatureSource");
$resourceService->DeleteResourceData($resourceID, "locations of points");
3.6 管理资源包 资源服务只提供了应用资源包的API,没有提供创建资源包的API。但是,MapGuide Studio提供了用户界面创建资源包,而且也提供了API来创建资源包。所以,如果需要可以使用MapGuide Studio来创建资源包。
方法ApplyResourcePackage(…)用于应用资源包到Library资源库,它不支持Session资源库。此方法是一个原子操作,如果在应用资源包中的某一资源的时候执行失败,那么会回滚此前的所有修改。
ApplyResourcePackage(MgByteReader resourcePackage);
ResourceManager 端口设置 resource server
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
resourcemanager端口配置 resourcemanager功能
在Yarn框架设计中其采用了Master/Slave结构,其中Master实现为ResourceManager,负责整个集群资源的管理与调度;Slave实现为NodeManager,负责单个节点的资源管理与任务启动。 ResourceManager是整个Yarn集群中最重要的组件之一,其主要的
resourcemanager端口配置 hadoop yarn ResourceManager RPC