阿里雲檔案儲存體(File Storage NAS,後面簡稱 NAS)是面向阿里雲 ECS 執行個體、HPC 和 Docker 等計算節點的檔案儲存體服務,提供標準的檔案訪問協議,使用者無需對現有應用做任何修改,即可使用具備無限容量及效能擴充、單一命名空間、多共用、高可靠和高可用等特性的Distributed File System。 目前,批次運算的使用者也可以在API和SDK中通過配置使用者NAS相關資訊使用阿里雲NAS服務。
1. 相關概念
從安全、效能以及便捷性來考慮,目前批次運算僅支援在專用網路中使用阿里雲NAS,以下是專用網路和阿里雲NAS的一些基本概念:
Virtual Private Cloud:Virtual Private Cloud(Virtual Private Cloud)是使用者基於阿里雲建立的自訂私人網路, 不同的專用網路之間二層邏輯隔離,使用者可以在自己建立的專用網路內建立和管理雲產品執行個體,比如ECS、負載平衡、RDS、NAS等。
檔案系統(FileSystem):檔案系統是使用者購買NAS的基本單元,儲存容量,價格,Quota限制,掛載點均與檔案系統綁定,瞭解如何建立檔案系統。
掛載點(MountEntry):掛載點是檔案系統執行個體在專用網路或傳統網路內的一個訪問目標地址,每個掛載點都對應一個網域名稱,使用者 mount 時通過指定掛載點的網域名稱來掛載對應的 NAS 檔案系統到本地。瞭解如何建立掛載點,由於批次運算只支援在專用網路中使用NAS,建立掛載點時需要指定掛載點類型為專用網路。
以上是使用者在批次運算中使用NAS過程中最重要的三個概念,如果需要瞭解購買和使用NAS、VPC其他相關內容,請參考:NAS官方文檔、專用網路官方文檔。
2. 使用NAS
在批次運算中使用NAS,需要按照如下步驟進行操作:
2.1. 資料準備
以下專用網路名、檔案系統名、掛載點名只起樣本作用,具體名稱根據使用者設定可能有所不同。
建立專用網路:選擇現有專用網路或者參考文檔(建立專用網路)建立一個新的專用網路,其ID由專用網路自動產生,假設為
vpc-m5egk1jsm3qkbxxxxxxxx
。建立交換器:選擇現有交換器或者參考文檔(建立交換器)建立一個新的交換器,其ID由專用網路自動產生,假設為
vsw-2zeue3c2rciybxxxxxxxx
,注意最好將交換器的網段設定為專用網路的子網。建立NAS檔案系統:按照之前的文檔在NAS控制台建立檔案系統,其ID由NAS自動產生,假設為
0266e49fea
,目前批次運算僅支援NFS類型的NAS檔案系統。建立掛載點:選擇掛載點類型為專用網路,並選擇上面步驟建立的專用網路和交換器,如果沒有特殊需求,選擇預設的許可權組即可,建立完成在掛載點管理介面查看掛載地址,一般類似
0266e49fea-yio75.cn-beijing.nas.aliyuncs.com
。
2.2. 使用使用者專用網路建立叢集
使用者程式要在批次運算叢集節點中訪問儲存在NAS中的檔案,需要在建立批次運算叢集時同時指定VpcId和CidrBlock,將批次運算叢集建立到使用者專用網路中。
VpcId
: 使用者NAS掛載點所在的專用網路ID,使用者需要將樣本中的ID替換為使用者的實際值。CidrBlock
:批次運算叢集在專用網路的私網範圍,一般為專用網路網段的子網段,使用者按照自己的網段規劃填入合適的值,詳情參考網段規劃。
2.2.1. 使用Python SDK
# 以下是建立叢集時指定專用網路和叢集的網段規劃
cluster_desc['Configs']['Networks']['VPC']['VpcId'] = 'vpc-m5egk1jsm3qkbxxxxxxxx'
cluster_desc['Configs']['NetWorks']['VPC']['CidrBlock'] = '192.168.0.0/20'
# 使用者也可以在提交AutoJob時指定專用網路和叢集的網段規劃
job_desc['DAG']['Tasks']['my-task']['AutoCluster']['Configs']['Networks']['VPC']['VpcId'] = 'vpc-m5egk1jsm3qkbxxxxxxxx'
job_desc['DAG']['Tasks']['my-task']['AutoCluster']['Configs']['Networks']['VPC']['CidrBlock'] = '192.168.0.0/20'
2.2.2. 使用JAVA SDK
Configs configs = new Configs();
Networks networks = new Networks();
VPC vpc = new VPC();
vpc.setCidrBlock("192.168.0.0/20");
vpc.setVpcId("vpc-m5egk1jsm3qkbxxxxxxxx");
networks.setVpc(vpc);
configs.setNetworks(networks);
//建立叢集時指定NAS檔案系統和許可權組資訊
ClusterDescription clusterDescription = new ClusterDescription();
clusterDescription.setConfigs(configs);
//使用者也可以在提交AutoJob時指定NAS檔案系統和許可權組資訊
AutoCluster autoCluster = new AutoCluster();
autoCluster.setConfigs(configs);
2.3. 指定掛載點
批次運算根據使用者提供的掛載資訊自動將NAS的掛載點掛載為本地目錄,需要使用者在叢集描述或作業描述的Mounts.Entries中指定NAS掛載點到本地目錄的映射。
Source
:以nas://
為首碼,後面接上NAS掛載點和NAS檔案系統目錄資訊,注意:批次運算的掛載支援多種來源,為了區分來源,目前NAS NFS檔案系統需要以
nas://
作為首碼。Windows掛載由於Windows NFS client的行為,需要在最後加上驚嘆號,另外Windows上的掛載還有其他注意事項,請參考:Windows掛載注意事項。
使用者也可以在使用者程式中自行掛載(上節中建立叢集到使用者專用網路的步驟必不可少),具體請參考:手動掛載。
Destination
:批次運算叢集節點內的本地目錄,使用者不需要事先建立該目錄,批次運算會自動為使用者建立該目錄。WriteSupport
: 是否支援可寫,如果使用者指定為False
,會使用批次運算特有的分布式緩衝來提高訪問NAS的效能。
2.3.1. 使用Python SDK
# 叢集層級掛載
# For Linux
cluster_desc['Configs']['Mounts']['Entries'] = {
'Source': 'nas://0266e49fea-yio75.cn-beijing.nas.aliyuncs.com:/',
'Destination': '/home/admin/mydir/',
'WriteSupport': true,
}
# For Windows
cluster_desc['Configs']['Mounts']['Entries'] = {
'Source': 'nas://0266e49fea-yio75.cn-beijing.nas.aliyuncs.com:/!',
'Destination': 'E:',
'WriteSupport': true,
}
# 作業層級掛載
# For Linux
job_desc['DAG']['Tasks']['my-task']['Mounts']['Entries'] = {
'Source': 'nas://0266e49fea-yio75.cn-beijing.nas.aliyuncs.com:/',
'Destination': '/home/admin/mydir/',
'WriteSupport': true,
}
# For Windows
job_desc['DAG']['Tasks']['my-task']['Mounts']['Entries'] = {
'Source': 'nas://0266e49fea-yio75.cn-beijing.nas.aliyuncs.com:/!',
'Destination': 'E:',
'WriteSupport': true,
}
2.3.2. 使用JAVA SDK
MountEntry mountEntry = new MountEntry();
mountEntry.setSource("nas://0266e49fea-yio75.cn-beijing.nas.aliyuncs.com:/");
mountEntry.setDestination("/home/admin/mydir/");
mountEntry.setWriteSupport(true);
mounts.addEntries(mountEntry);
3. NAS掛載注意事項
3.1. 許可權組容量
目前NAS單個許可權組最多隻支援300條規則,目前批次運算服務只支援傳統網路,一台VM對應一台許可權規則,建議使用者同時使用NAS的叢集執行個體總和不要超過額度,否則行為未定義。
3.2. NAS服務收費
在批次運算中使用NAS服務不收取額外費用,由NAS服務進行計價,收費及計價標準請參考:NAS收費及價格。
3.3. Cluster Mounts和Job Mounts優先順序
細心的使用者會發現建立叢集和提交作業時均支援在Mounts
欄位中指定掛載NAS檔案系統到本地目錄,批次運算目前優先順序如下:
作業中的Mounts會覆蓋掉叢集Mounts中的MountEntry(包括AutoCluster),但是對Cluster Mounts中的檔案系統和許可權組資訊不會有影響。
作業結束後,叢集層級的MountEntry不會恢複。