阿里云批量計算服務(wù)-操作指南-D_第1頁
阿里云批量計算服務(wù)-操作指南-D_第2頁
阿里云批量計算服務(wù)-操作指南-D_第3頁
阿里云批量計算服務(wù)-操作指南-D_第4頁
阿里云批量計算服務(wù)-操作指南-D_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、批量計算操作指南批量計算/操作指南批量計算/操作指南 PAGE 29 PAGE 29操作指南如何提交一個作業(yè)A君: 我有一個python程序,我在本地可以這么運行:python test.py, 但是想要在云上運行怎么做?print(Hello, cloud!)test.py 內(nèi)容如下:print(Hello, cloud!)云上運行大致過程: 您提交一個作業(yè)到BatchCompute,BatchCompute會按照你提供的配置去申請機器, 啟動虛擬機,在虛擬機中運行: python test.py, 得到結(jié)果后自動上傳到OSS中。然后您可以去OSS中查看運行的結(jié)果。提交作業(yè)的方法有很多,下面

2、列舉4種:使用命令行(一條命令提交作業(yè)):bcs sub python test.py -p ./test.pybcs sub python test.py -p ./test.py搞定!- 這條命令會將test.py文件打包成 worker.tar.gz 上傳到指定位置,然后再提交作業(yè)運行。bcs命令需要先安裝 batchcompute-cli工具才能使用, 請看這里。使用控制臺提交作業(yè):下面列舉詳細解釋步驟:將test.py打包上傳到云端OSS在test.py所在目錄運行下面的命令:tar -czf worker.tar.gz test.py # 將 test.py 打包到 worker.

3、tar.gztar -czf worker.tar.gz test.py # 將 test.py 打包到 worker.tar.gz然后使用OSS控制臺將 worker.tar.gz 上傳到OSS。如果還沒有開通OSS,請先開通.還需要創(chuàng)建Bucket,假設(shè)創(chuàng)建了Bucket名稱為 mybucket 然后在這個Bucket下創(chuàng)建一個目錄: test假設(shè)您上傳到了mybucket這個Bucket下的test目錄下,則OSS路徑表示為: oss:/mybucket/test/worker.tar.gz使用控制臺提交作業(yè)打開 提交作業(yè)頁面。first_jobECS鏡像ID鏡像然后點擊下面的提交作業(yè)按

4、鈕, 即可提交成功。提交成功后,自動跳轉(zhuǎn)到作業(yè)列表頁面,您可以在這里看到你提交的作業(yè)狀態(tài)。等待片刻后作業(yè)運行完成,即可查看結(jié)果。PythonSDK將test.py打包上傳到云端OSS同上一節(jié)。ACCESS_KEY_SECRET = your_access_key_secret #需要配置job_desc = Name: my_job_name, Description: hello test, JobFailOnInstanceFail: true, ACCESS_KEY_SECRET = your_access_key_secret #需要配置job_desc = Name: my_job_

5、name, Description: hello test, JobFailOnInstanceFail: true, Priority: 0,Type: DAG, DAG: Tasks: #需要配置ACCESS_KEY_ID=your_access_key_idfrom batchcompute import Client, ClientErrorfrombatchcomputeimportCN_QINGDAOasREGIONtest: InstanceCount: 1,test: InstanceCount: 1,MaxRetryCount: 0, Parameters: Command:

6、 CommandLine: python test.py,PackagePath: oss:/mybucket/test/worker.tar.gz,StderrRedirectPath: oss:/mybucket/test/logs/, StdoutRedirectPath: oss:/mybucket/test/logs/,Timeout: 21600, AutoCluster: InstanceType: ecs.s3.large, ECSImageId: m-282q1y6ld,Dependencies: client = Client(REGION, ACCESS_KEY_ID,

7、ACCESS_KEY_SECRET)result = client.create_job(job_desc) job_id = result.Id更多關(guān)于PythonSDK內(nèi)容請看 Python SDKJavaSDK將test.py打包上傳到云端OSS同上一節(jié)。import com.aliyuncs.batchcompute.main.v20151111.*; import com.aliyuncs.batchcompute.model.v20151111.*; import com.aliyuncs.batchcompute.main.v20151111.*; import com.aliy

8、uncs.batchcompute.model.v20151111.*; import com.aliyuncs.batchcompute.pojo.v20151111.*; import com.aliyuncs.exceptions.ClientException;public class SubmitJobString REGION = cn-qingdao;String ACCESS_KEY_ID/需要配置StringACCESS_KEY_SECRET/需要配置public static void main(String args) throws ClientException Job

9、Description desc = new SubmitJob().getJobDesc();BatchComputeclient=newBatchComputeClient(REGION,ACCESS_KEY_ID,ACCESS_KEY_SECRET); CreateJobResponse res =client.createJob(desc);String jobId = res.getJobId();/.private JobDescription getJobDesc() JobDescription desc = new JobDescription();desc.setName(

10、testJob); desc.setPriority(1); desc.setDescription(JAVA SDK TEST); desc.setType(DAG); desc.setJobFailOnInstanceFail(true);DAG dag = new DAG(); dag.addTask(getTaskDesc();desc.setDag(dag); return desc;private TaskDescription getTaskDesc() TaskDescription task = new TaskDescription();task.setClusterId(

11、gClusterId); task.setInstanceCount(1); task.setMaxRetryCount(0); task.setTaskName(test); task.setTimeout(10000);AutoCluster autoCluster = new AutoCluster(); autoCluster.setECSImageId(m-282q1y6ld); autoCluster.setInstanceType(ecs.s3.large);/ autoCluster.setResourceType(OnDemand);task.setAutoCluster(a

12、utoCluster);Parameters parameters = new Parameters(); Command cmd = new Command(); cmd.setCommandLine(python test.py);/ cmd.addEnvVars(a, b);cmd.setPackagePath(oss:/mybucket/test/worker.tar.gz); parameters.setCommand(cmd); parameters.setStderrRedirectPath(oss:/mybucket/test/logs/); parameters.setStd

13、outRedirectPath(oss:/mybucket/test/logs/);/ InputMappingConfig input = new InputMappingConfig();/ input.setLocale(GBK);/ input.setLock(true);/ parameters.setInputMappingConfig(input); task.setParameters(parameters);/ parameters.setInputMappingConfig(input); task.setParameters(parameters);/ task.addI

14、nputMapping(oss:/my-bucket/disk1/, /home/admin/disk1/);/ task.addOutputtMapping(/home/admin/disk2/, oss:/my-bucket/disk2/);/ task.addLogMapping( /home/admin/a.log,oss:/my-bucket/a.log);return task;更多關(guān)于JavaSDK內(nèi)容請看 Java SDKOSS掛載A君: 我在OSS上有10G的數(shù)據(jù), 想要在BatchCompute中使用,有沒有方法掛載為虛擬機上的一個目錄,我可以想訪問本地文件一樣使用數(shù)據(jù)?假

15、設(shè) OSS目錄為: oss:/mybucket/mydir/, 這個目錄下有10G的數(shù)據(jù)。你可以將這個OSS目錄掛載到 /home/admin/mydir/ 目錄下,任務(wù)程序可以把它當(dāng)做本地目錄來處理。- 注意:如果使用windows鏡像,只能掛載到盤符, 如: E:, 而不能掛載到文件夾.掛載數(shù)據(jù)目錄提交作業(yè)的時候,可以配置掛載,請看下面的例子。TaskDescription taskDesc = new TaskDescription(); taskDesc.addInputMapping(oss:/mybucket/mydir/, /home/admin/mydir/); /只讀掛載ta

16、skDesc.addOutputMapping(/home/admin/mydir/, oss:/mybucket/mydir/); /可寫掛載JavaSDKTaskDescription taskDesc = new TaskDescription(); taskDesc.addInputMapping(oss:/mybucket/mydir/, /home/admin/mydir/); /只讀掛載taskDesc.addOutputMapping(/home/admin/mydir/, oss:/mybucket/mydir/); /可寫掛載PythonSDK# 只讀掛載# 只讀掛載job

17、_descDAGTasksmy-taskInputMapping = oss:/mybucket/mydir/: /home/admin/mydir/# 可寫掛載# 可寫掛載job_descDAGTasksmy-taskOutputMapping = /home/admin/mydir/: oss:/mybucket/mydir/bcs sub python main.py -r oss:/mybucket/mydir/:/home/admin/mydir/ # 如果有多個映射,請用逗號隔開使用命令行bcs sub python main.py -r oss:/mybucket/mydir/:

18、/home/admin/mydir/ # 如果有多個映射,請用逗號隔開注意:配置InputMapping,是只讀掛載,意思是只能讀,不能寫,不能刪除。配置OutputMapping,凡是寫到 /home/admin/mydir/目錄下的文件或目錄,在任務(wù)運行完成后,會被自動上傳到 oss:/mybucket/mydir/ 下面。掛載程序目錄A君: 我在OSS上有個程序 main.py, 想要在BatchCompute中使用, 如何使用? 假如 main.py 在OSS上的路徑為: oss:/mybucket/myprograms/main.py??梢話燧d oss:/mybucket/mypro

19、grams/ 為 /home/admin/myprograms/, 然后指定運行命令行:python /home/admin/myprograms/main.py 即可。TaskDescription taskDesc = new TaskDescription(); taskDesc.addInputMapping(oss:/mybucket/myprograms/, /home/admin/myprograms/); /只讀掛載Command cmd = new Command()cmd.setCommandLine(python /home/admin/myprograms/main.p

20、y)params.setCommand(cmd); TaskDescription taskDesc = new TaskDescription(); taskDesc.addInputMapping(oss:/mybucket/myprograms/, /home/admin/myprograms/); /只讀掛載Command cmd = new Command()cmd.setCommandLine(python /home/admin/myprograms/main.py)params.setCommand(cmd); taskDesc.setParameters(params);Py

21、thonSDK# 只讀掛載# 只讀掛載job_descDAGTasksmy-taskInputMapping = oss:/mybucket/myprograms/: /home/admin/myprograms/oss:/mybucket/myprograms/: /home/admin/myprograms/job_descDAGTasksmy-taskParametersCommandCommandLine=python/home/admin/myprograms/main.pybcs sub python /home/admin/myprograms/main.py -r oss:/m

22、ybucket/myprograms/:/home/admin/myprograms/使用命令行bcs sub python /home/admin/myprograms/main.py -r oss:/mybucket/myprograms/:/home/admin/myprograms/掛載磁盤指定磁盤提交作業(yè)或者創(chuàng)建集群時,可以指定VM系統(tǒng)盤的大小和類型,另外還可以指定掛載一塊數(shù)據(jù)盤(可選)。提交作業(yè)JSON時指定磁盤.DAG: Tasks: taskName: AutoCluster: InstanceType: ,ImageId: ,ECSImageId: , Configs: Di

23、sks: SystemDisk: Type: ephemeral, Size: 500,DataDisk: Type: ephemeral, Size: 500,MountPoint: /path/to/mount.目前SystemDisk和DataDisk類型需要配置為一樣的,比如:SystemDisk 的Type是cloud,DataDisk的Type也必須是cloud。數(shù)據(jù)盤必須指定MountPoint,linuxwindow下只能掛載到驅(qū)動,如E盤:E:bcs sub echo 123 -disk system:ephemeral:40,data:ephemeral:50:/home/

24、disk1命令行提交作業(yè)時指定磁盤bcs sub echo 123 -disk system:ephemeral:40,data:ephemeral:50:/home/disk1系統(tǒng)盤配置格式: system:cloud|ephemeral:40-500, 舉例: system:cloud:40, 表示系統(tǒng)盤掛載40GB的云盤.數(shù)據(jù)盤配置格式: data:cloud|ephemeral:5-2000:mount-point, 舉例:data:cloud:5:/home/disk1, 表示掛載一個5GB的云盤作為數(shù)據(jù)盤, window下只能掛載到驅(qū)動,如E盤:data:cloud:5:E.bcs

25、 sub echo 123 -disk system:ephemeral:40注意: 數(shù)據(jù)盤使用ephemeral的時候,size取值范圍限制為:5-1024GB. 另外,可以只指定系統(tǒng)盤:bcs sub echo 123 -disk system:ephemeral:40bcs sub echo 123 -disk data:cloud:50:/home/disk1當(dāng)然,也可以只指定數(shù)據(jù)盤:bcs sub echo 123 -disk data:cloud:50:/home/disk1可用磁盤類型BatchCompute服務(wù)每個region支持的磁盤類型不盡相同,如下表所示。RegionEC

26、S實例類型可用磁盤類型BCS實例類型可用磁盤類型青島(華北1)cloud, ephemeral-杭州(華東1)cloudephemeral深圳(華南1)-ephemeral北京(華北2)-ephemeral實例規(guī)格支持?jǐn)?shù)據(jù)盤大小注意:以bcs為前綴的實例類型,目前只支持載指定大小的數(shù)據(jù)盤,如下表所示。實例規(guī)格支持?jǐn)?shù)據(jù)盤大小bcs.a2.large400GBbcs.a2.xlarge400GBbcs.a2.3xlarge400GB鏡像可用鏡像操作系統(tǒng)鏡像ID系統(tǒng)詳情操作系統(tǒng)鏡像ID系統(tǒng)詳情Windowsm-281zatqcsWindows Server 2008 R2 企業(yè)版 64位 中文Ubu

27、ntum-28lyfn0trUbuntu 14.04 64位, python 2.7, jdk 1.7, Docker 1.10.1北京(華北2):操作系統(tǒng)鏡像ID系統(tǒng)詳情Windowsm-25gj9pkxgWindows Server 2008 R2 企業(yè)版 64位 中文Ubuntum-25useywoaUbuntu 14.04 64位, python 2.7, jdk 1.7, Docker 1.10.1深圳(華南1):操作系統(tǒng)鏡像ID系統(tǒng)詳情Windowsm-94dunmll8Windows Server 2008 R2 企業(yè)版 64位 中文Ubuntum-94luqb1cbUbuntu

28、 14.04 64位, python 2.7, jdk 1.7, Docker 1.10.1杭州(華東1):操作系統(tǒng)鏡像ID系統(tǒng)詳情Windowsm-23ubsvdduWindows Server 2008 R2 企業(yè)版 64位 中文Ubuntum-2309yqb5nUbuntu 14.04 64位, python 2.7, jdk 1.7, Docker 1.10.1如果這些鏡像無法滿足需求,您可參考以下步驟,自行制作鏡像。自定義鏡像主要介紹如何制作符合BatchCompute規(guī)范的鏡像。具體制作步驟包括:購買基礎(chǔ)鏡像啟動ECS實例安裝用戶自定義的程序生成ECS自定義鏡像共享自定義鏡像給Ba

29、tchCompute購買基礎(chǔ)鏡像啟動ECS實例點擊相應(yīng)的基礎(chǔ)鏡像鏈接,目前只支持青島(華北1)、北京(華北2)和深圳(華南1)region,需要其他region支持請?zhí)峁巫稍儯篧indows Server2008Ubuntu14.04點擊立即購買,進入購買頁面,實例配置如下所示:地域保持與批量計算服務(wù)一致。實例類型建議選擇4核8GB。I/O(必選)。網(wǎng)絡(luò)類型選擇經(jīng)典網(wǎng)絡(luò)。帶寬自定義。系統(tǒng)盤、數(shù)據(jù)盤自定義。付費類型建議選擇按量。最后點擊立即購買完成實例購買。實例創(chuàng)建出來后,重置實例密碼并重啟實例。待實例處于運行狀態(tài)后,通 過VNC連接,登入到該實例。配置詳情參見ECS文檔啟動實例安裝用戶自定義

30、的程序您可以安裝自己需要的其他應(yīng)用程序,如用于渲染的maya等。如果涉及文件傳輸操作,請參考ECS文檔Windows通過遠程桌面mstsc連接到服務(wù)器復(fù)制本地客戶端文件方法和Linux SCP命令復(fù)制傳輸文件的用法。生成ECS自定義鏡像待所有程序安裝完成后,在ECS控制臺中創(chuàng)建磁盤快照。參見ECS文檔創(chuàng)建快照。使用上面創(chuàng)建的快照,在ECS控制臺中創(chuàng)建自定義鏡像。參見ECS文檔創(chuàng)建自定義鏡像。共享自定義鏡像給BatchCompute HYPERLINK mailto:將制作的ECS鏡像共享給batchcompute 將制作的ECS鏡像共享給batchcompute(UID為11908470485

31、72539 )。參見ECS文檔鏡像分享。實例類型以下為各個region默認支持的類型:青島(華北1):名稱CPU(核)內(nèi)存(GB)ecs.s3.large48ecs.c1.large816ecs.c2.large1632深圳(華南1),2),杭州(華東1):名稱CPU(核)內(nèi)存(GB)bcs.a2.large48bcs.a2.xlarge816bcs.a2.3xlarge1632更多詳細信息請參考 價格 頁面。任務(wù)程序環(huán)境變量 (v20151111)BatchCompute為用戶任務(wù)程序提供以下的環(huán)境變量:變量名變量值BATCH_COMPUTE_DAG_JOB_ID作業(yè)ID,視實際情況而定BA

32、TCH_COMPUTE_DAG_TASK_ID任務(wù)名稱,視實際情況而定BATCH_COMPUTE_DAG_INSTANCE_ID實例ID,視實際情況而定BATCH_COMPUTE_OSS_HOSTOSS host,視實際情況而定BATCH_COMPUTE_REGION區(qū)域,視實際情況而定BATCH_COMPUTE_CLUSTER_IDcluser idBATCH_COMPUTE_WORKER_IDworker id程序運行在 docker 容器中的環(huán)境變量稍有不同:變量名變量值USERrootPWD/batchcompute/workdirPATH/sbin:/usr/sbin:/bin:/u

33、sr/bin, 注意沒有/usr/local/binHOME/rootBATCH_COMPUTE_DAG_JOB_ID作業(yè)ID,視實際情況而定BATCH_COMPUTE_DAG_TASK_ID任務(wù)名稱,視實際情況而定BATCH_COMPUTE_DAG_INSTANCE_ID實例ID,視實際情況而定BATCH_COMPUTE_OSS_HOSTOSS host,視實際情況而定BATCH_COMPUTE_REGION區(qū)域,視實際情況而定如何使用用戶只需在任務(wù)運行程序中從環(huán)境變量中獲取即可, 舉例:task_id = os.environBATCH_COMPUTE_DAG_TASK_ID instan

34、ce_id = os.environBATCH_COMPUTE_DAG_INSTANCE_IDpythontask_id = os.environBATCH_COMPUTE_DAG_TASK_ID instance_id = os.environBATCH_COMPUTE_DAG_INSTANCE_IDjavaString taskId = System.getenv(BATCH_COMPUTE_DAG_TASK_ID);String taskId = System.getenv(BATCH_COMPUTE_DAG_TASK_ID);String instanceId = System.get

35、env(BATCH_COMPUTE_DAG_INSTANCE_ID);自定義環(huán)境變量除了系統(tǒng)提供的環(huán)境變量,你也可以在提交作業(yè)的時候設(shè)置新的環(huán)境變量。PythonSDKenv = 代碼片段:env = k1: v1,k1: v1,k2: v2.job_descDAGTasksmy-taskParametersCommandEnvVars=env.JavaSDKCommand cmd= new Command(); cmd.addEnvVars(k1,v1);cmd.addEnvVars(k2,v2);Command cmd= new Command(); cmd.addEnvVars(k1,v

36、1);cmd.addEnvVars(k2,v2);.TaskDescription desc = TaskDescription(); Parameters parmas = new Parameters(); params.setCommand(cmd);.desc.setParameters(params);使用命令行工具:bcs sub python main.py -e k1:v1,k2:v2bcs sub python main.py -e k1:v1,k2:v2用戶限額(Quota)默認限額配置如下表所示,如果對用戶限額設(shè)置有更高的需求,請?zhí)峤还?。Quota項默認值單用戶最大集群

37、(Cluster)數(shù)(不包含已刪除的Cluster)5單集群最大實例組(Group)數(shù)1單實例組最大申請的虛擬機資源數(shù)20單用戶最大并發(fā)虛擬機實例數(shù)20單用戶最大作業(yè)(Job)數(shù)(不包含已刪除的Job)100單用戶單作業(yè)最大任務(wù)(Task)數(shù)10單用戶單任務(wù)最大實例(Instance)數(shù)100單用戶單Instance最大超時時間(超時Instance會自動fail)6小時使用集群使用AutoCluster還是Cluster?用戶提交作業(yè)時,如果指定一個集群ID,那么作業(yè)的任務(wù)運行時會被調(diào)度到這個集群中運行。如果沒有指定集群,則可以使用AutoCluster配置,指定鏡像和實例類型即可。任務(wù)運行

38、時會自動創(chuàng)建相應(yīng)的集 群,運行完成后自動釋放掉。區(qū)別.AutoClusterCluster創(chuàng)建作業(yè)啟動時自動創(chuàng)建需要事先創(chuàng)建集群,創(chuàng)建集群時需要指定ImageId和InstanceType,還有需要的機器臺數(shù)。釋放作業(yè)完成后自動釋放需要手動刪除. 如果您不再使用集群,請刪除,不然會一直收費。使用提交作業(yè)時指定ImageId和InstanceType,還有需要的機器臺數(shù)提交作業(yè)時指定集群ID如何使用.autoCluster = ECSImageId: m-28ga7wbnb, InstanceType: ecs.s3.large.autoCluster = ECSImageId: m-28ga7

39、wbnb, InstanceType: ecs.s3.large.job_descDAGTasksmy-taskAutoCluster = autoCluster.#使用了 AutoCluster, 就無需使用 ClusterId, 使用clusterId就無需使用AutoCluster#job_descDAGTasksmy-taskClusterId = cls-xxxxxxxJavaSDK以下是代碼片段:AutoClusterAutoClusterautoCluster=newAutoCluster(); autoCluster.setECSImageId(m-28ga7wbnb); au

40、toCluster.setInstanceType(ecs.s3.large);TaskDescriptiondesc=newTaskDescription(); desc.setAutoCluster(autoCluster);/使用了 AutoCluster, 就無需使用 ClusterId, 使用clusterId就無需使用AutoCluster/desc.setClusterId(cls-xxxxxxx);# 使用 Auto Clusterbcs sub python main.py -c img=m-28ga7wbnb:type=ecs.s3.large# 使用 clusterIdb

41、cs sub python main.py -c cls-0101010299123# 使用 Auto Clusterbcs sub python main.py -c img=m-28ga7wbnb:type=ecs.s3.large# 使用 clusterIdbcs sub python main.py -c cls-0101010299123多任務(wù)批量計算服務(wù)支持一個作業(yè)包含多個任務(wù),任務(wù)之間可以有DAG依賴關(guān)系。即前面的任務(wù)運行完成(Finished)后, 后面的任務(wù)才開始運行。例1:Name: my-job, DAG: Name: my-job, DAG: .Dependencies

42、: split: count,count: merge例2:split運行完成后,count開始運行,count完成后,merge才開始運行。merge運行完成,整個作業(yè)結(jié)束。Name: my-job, DAG: Name: my-job, DAG: .Dependencies: split: count1,count2,count1: merge,count2: mergesplit運行完成后,count1和count2同時開始運行,count1和count2都完成后,merge才開始運行。merge運行完成,整個作業(yè)結(jié)束。并發(fā)一個作業(yè)(Job)中可以有多個任務(wù)(Task),一個任務(wù)可以指定

43、在多個實例(Instance)上運行程序。如何并發(fā)? DAG: DAG:.Tasks: .count: InstanceCount: 3, /指定需要實例數(shù):3臺VM LogMapping: ,AutoCluster: ResourceType: OnDemand, ECSImageId: m-28ga7wbnb, InstanceType: ecs.s3.large, ImageId: ,Parameters: Command: EnvVars:,CommandLine: python count.py,PackagePath: oss:/your-bucket/log-count/work

44、er.tar.gz,InputMappingConfig: Lock: true,StdoutRedirectPath: oss:/your-bucket/log-count/logs/, StderrRedirectPath: oss:/your-bucket/log-count/logs/,OutputMapping: , MaxRetryCount: 0,Timeout: 21600, InputMapping: ,Description: batchcompute job, Priority: 0, JobFailOnInstanceFail: true, Type: DAG,Name

45、: log-count任務(wù)count中配置了InstanceCount為3, 表示需要實例數(shù)3臺, 即在3臺VM上運行這個任務(wù)的程序。并發(fā)處理不同片段的數(shù)據(jù)3臺VM上運行的任務(wù)程序都是一樣的,如何讓它處理不同的數(shù)據(jù)呢?在任務(wù)程序中使用環(huán)境變量: BATCH_COMPUTE_DAG_INSTANCE_ID(實例ID) 來區(qū)分,可以處理不同片段的數(shù)據(jù)。.# instance_id: should start from 0.# instance_id: should start from 0instance_id = os.environBATCH_COMPUTE_DAG_INSTANCE_ID.f

46、ilename = part_%s.txt % instance_id.# 1. download a partoss_tool.download_file(%s/%s/%s.txt % (pre, split_results, instance_id ), filename).# 3. upload result to ossupload_to = %s/count_results/%s.json % (pre, instance_id ) print(upload to %s % upload_to) oss_tool.put_data(json.dumps(m), upload_to).

47、完整例子請看快速開始例子。Docker前言BatchCompute除了支持把軟件直接安裝到ECS鏡像,還支持通過Docker鏡像部署應(yīng)用程序。您可以自定義制作一個Docker鏡像,使用registry工具上傳到阿里云OSS,然后您可以指定您的作業(yè)的任務(wù)在 這個鏡像中運行。BatchCompute對Docker支持的原理這里要和普通VM支持對比說明一下:先說使用普通VM,(支持LinuxVM,用戶任務(wù)將運行在這個VM上。任務(wù)完成后結(jié)果 會被上傳到指定的OSS目錄,VM銷毀。然后執(zhí)行下一個任務(wù)。使用Docker:每個任務(wù)也可以指定使用一個Docker容器鏡像來運行。運行task時,會先啟動一個VM

48、運行 支持Docker的系統(tǒng)鏡像(如:支持Docker的Ubuntu),然后會從OSS上下載你指定的Docker鏡像,在這個Docker容器內(nèi)。任務(wù)完成后結(jié)果上傳到指定的OSS目錄,VM銷毀。 然后執(zhí)行下一個任務(wù)。目前一個VM,只支持運行一個Docker鏡像。# 使用VM:# 使用VM:|- job|- task|- VM (用戶指定的VM,支持Windows和Linux)|- program (用戶程序)# 使用Docker模式:|- job|- task|- VM (支持docker的Ubuntu)|- Docker-Container(用戶指定的Docker的容器鏡像)|- progra

49、m (用戶程序)使用Docker和不使用Docker有什么區(qū)別-不使用Docker使用 Docker使用鏡像指定ECS鏡像ID指定支持Docker Container的ECS鏡像ID(官網(wǎng)提供的Ubuntu),還需指定自定義Docker鏡像。程序運行平臺支持Window和Linux支持Linux本地調(diào)試不支持本地調(diào)試鏡像在本地制作,支持本地調(diào)試安裝Dockersudo apt-get update #更新軟件源sudo apt-get install docker.io #安裝docker#檢查是否成功sudo docker psUbuntusudo apt-get update #更新軟件源

50、sudo apt-get install docker.io #安裝docker#檢查是否成功sudo docker ps可以看到類似下面的結(jié)果:sudo gpasswda $USERsudo gpasswda $USERdockerdockerdocker組,加一個:sudo groupadd docker sudo service docker restartdocker服務(wù),然后注銷后重新登錄系統(tǒng)即可window/Mac從 官 網(wǎng) 下 載 docker toolbox: HYPERLINK /docker-toolbox /docker-toolbox 安裝完成后會有2個快捷方式:Kit

51、ematic: 用來管理docker container的圖形化界面Docker Quickstart Terminal: 可以快速啟動 docker 命令行界面。配置加速器使用加速器將會提升您在國內(nèi)獲取Docker官方鏡像的速度:阿里云容器服務(wù)開發(fā)者平臺制作Docker鏡像dockerUbuntu|- Dockerfile本例中我們將制作一個 Ubuntu 鏡像,內(nèi)置python。鏡像名稱:myubuntu。dockerUbuntu|- DockerfileFROM ubuntu:14.04# 這里要替換 your_name 為您的名字, 和your_email 為您的Email MAINT

52、AINER your_name FROM ubuntu:14.04# 這里要替換 your_name 為您的名字, 和your_email 為您的Email MAINTAINER your_name # 更新源RUN apt-get update# 清除緩存RUN apt-get autoclean# 安裝python# 安裝pythonRUN apt-get install -y python# 啟動時運行這個命令CMD /bin/bashdocker builddocker buildt myubuntu/buildmyubuntudockerUbuntucddockerUbuntu- 注

53、意:docker 命令在ubuntu中默認需要加sudo才能運行,而在Mac/Windows中,需要從Docker Quickstart Terminal中啟動的命令行工具中運行。docker imagesbuild 完成后, 運行以下命令查看:docker images可以看到類似下面的結(jié)果:制作docker鏡像,除了Dockerfile這種方式外,還有更加直觀的制作方式。將docker鏡像上傳到OSS使用BatchCompute Docker服務(wù),需要將制作的Docker鏡像myubuntu上傳到OSS,系統(tǒng)將會從OSS下載這個鏡像來運行您的任務(wù)程序。OSSDockerRegistry2o

54、ss:/your-bucket/dockers/假設(shè)您想要將docker存儲到OSS的目錄路徑為:oss:/your-bucket/dockers/我們將利用Docker Registry 2官方鏡像創(chuàng)建一個私有鏡像倉庫,需要配置了OSS的Access Key ID, Access Key Secret, Region, Bucket等信息。具體安裝步驟如下:version: 0.1 log:先在當(dāng)前目錄生成文件config.ymlversion: 0.1 log:level:level:debug storage: oss:accesskeyid: your_access_key_id ac

55、cesskeysecret: your_access_key_secret region: oss-cn-qingdaobucket: your-bucket rootdirectory: dockers secure: falseinternal: false http:addr: :5000其中的變量需要替換:參數(shù)描述your_access_key_id您的 access key idyour_access_key_secret您的 access key secretyour-bucket您的 bucketdocker pull registry:2docker run -v pwd/co

56、nfig.yml:/etc/docker/registry/config.yml -p 5000:5000 -name registry -d registry:2關(guān)于OSS配置的詳細信息請參見 Docker官方文檔docker pull registry:2docker run -v pwd/config.yml:/etc/docker/registry/config.yml -p 5000:5000 -name registry -d registry:2- 注意:這里region使用 oss-cn-qingdao, 表示使用青島region的OSS,而后面提交作業(yè)也需要提交到相應(yīng)的reg

57、ion才能正常工作。dockerdockerps#查看運行的container如果成功安裝,可以看到 registry:2docker tag myubuntu localhost:5000/myubuntu docker push localhost:5000/myubuntuOSS:docker tag myubuntu localhost:5000/myubuntu docker push localhost:5000/myubuntu注意:localhost:5000/5000(1)-p5000:5000 中(冒號前的5000)指定的。localhost:5000/myubuntu,m

58、yubuntu。檢驗是否上傳成功, 可以直接使用OSS控制臺查看是否有這個目錄: oss:/your- bucket/dockers/repositories/library/myubuntu/6. 使用Docker注意事項:Docker container運行時,用戶為root,path環(huán)境變量默認為:/sbin:/usr/sbin:/bin:/usr/bin。注意沒有/usr/local/binPWD環(huán)境變量如果沒有設(shè)置,則為/batchcompute/workdir。用戶的程序包始終會被解壓到/batchcompute/workdir。使用ClusterID提交任務(wù)時, 因為Docker

59、 registry一旦啟動后就不停止,因此提交到一個cluster中的所有job,其 BATCH_COMPUTE_DOCKER_REGISTRY_OSS_PATH 必須相同。目前 InputMapping,OutputMapping 不能同時掛載到同一個目錄。-privileged=false模式,所以不允許在docker容器中 啟動docker容器。Docker 提交作業(yè)例子步驟提交作業(yè)簡介作業(yè)準(zhǔn)備上傳數(shù)據(jù)文件到OSS準(zhǔn)備任務(wù)程序提交作業(yè)編寫作業(yè)配置提交命令查看作業(yè)運行狀態(tài)查看運行結(jié)果提交作業(yè)簡介在 BatchCompute 中, 提交作業(yè)時使用 docker 與普通作業(yè)基本相同, 只有2點

60、區(qū)別:使用支持Docker的ECSImageId您只需要將任務(wù)描述的 ECSImageId 指定為 BatchCompute 的公共鏡像的Id(支持Docker的鏡像),或者使用設(shè)置了該ECSImageId的 Cluster的ClusterId.在task描述的環(huán)境變量(EnvVars)中增加如下兩個參數(shù):字段名稱描述是否可選BATCH_COMPUTE_DOCKER_I MAGEDocker鏡像名稱可選BATCH_COMPUTE_DOCKER_ REGISTRY_OSS_PATHDocker鏡像在 OSS-Registry 中的存儲路徑可選- 如果沒有 BATCH_COMPUTE_DOCKER

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論