在Amazon EMR上运行Hadoop MapReduce作业
不久前,我發(fā)布了如何使用CLI設置EMR群集的信息。 在本文中,我將展示如何使用適用于AWS的Java SDK來設置集群。 展示如何使用Java AWS開發(fā)工具包執(zhí)行此操作的最佳方法是展示完整的示例,因此,讓我們開始吧。
- 設置一個新的Maven項目
為此,我創(chuàng)建了一個新的默認Maven項目。 您可以運行該項目中的主類來啟動EMR集群并執(zhí)行我在本文中創(chuàng)建的MapReduce作業(yè):
在此類中,我首先聲明一些常量,我認為這些常量是顯而易見的。 在init()方法中,我使用添加到項目中的憑據屬性文件。 我將此文件添加到了Maven項目的'/ main / resources'文件夾中。 它包含我的訪問密鑰和秘密密鑰。
我還將EMR客戶的區(qū)域設置為“ EU-WEST”。
下一個方法是“ configInstance()”。 在這種方法中,我通過設置Hadoop版本,實例數,實例大小等來創(chuàng)建和配置JobFlowInstance。您還可以配置'keepAlive'設置,以在作業(yè)完成后使集群保持活動狀態(tài)。 在某些情況下這可能會有所幫助。 如果要使用此選項,則還可以設置要用于訪問集群的密鑰對,這可能很有用,因為如果不設置此密鑰就無法訪問集群。 方法“ runCluster()”是集群實際運行的地方。 它創(chuàng)建啟動集群的請求。 在此請求中,添加了必須執(zhí)行的步驟。 在我們的例子中,其中一個步驟是運行在先前步驟中創(chuàng)建的JAR文件。 我還添加了一個調試步驟,以便在集群完成并終止后我們可以訪問調試日志記錄。 我們可以簡單地訪問我用常量'S3N_LOG_URI'設置的S3存儲桶中的日志文件。 創(chuàng)建此請求后,我們將基于此請求啟動集群。 然后,我們每隔10秒鐘拉動一次,以查看作業(yè)是否完成,并在控制臺上顯示一條消息,指示作業(yè)的當前狀態(tài)。 要執(zhí)行第一次運行,我們必須準備輸入。
- 準備輸入
作為作業(yè)的輸入(有關此示例作業(yè)的更多信息,請參見此),我們必須使字典內容可用于EMR群集。 此外,我們必須使JAR文件可用,并確保輸出和日志目錄存在于我們的S3存儲桶中。 有幾種方法可以執(zhí)行此操作:您還可以通過使用SDK以編程方式來執(zhí)行此操作,也可以通過從命令行使用S3cmd來執(zhí)行此操作,或者使用AWS管理控制臺來執(zhí)行此操作 。 只要最終得到類似的設置,就可以了:
- s3:// map-reduce-intro
- s3:// map-reduce-intro / input
- s3://map-reduce-intro/input/input.txt
- s3:// map-reduce-intro / job
- s3://map-reduce-intro/job/MapReduce-1.0-SNAPSHOT.jar
- s3:// map-reduce-intro / log
- s3:// map-reduce-intro / result
或在使用S3cmd時如下所示:
s3cmd-1.5.0-alpha1$ s3cmd ls --recursive s3://map-reduce-intro/ 2013-07-20 13:06 469941 s3://map-reduce-intro/input/input.txt 2013-07-20 14:12 5491 s3://map-reduce-intro/job/MapReduce-1.0-SNAPSHOT.jar 2013-08-06 14:30 0 s3://map-reduce-intro/log/ 2013-08-06 14:27 0 s3://map-reduce-intro/result/在上面的示例中,我已經在代碼中引入了S3客戶端。 您還可以使用它來準備輸入或獲取輸出,作為客戶工作的一部分。
- 運行集群
一切就緒后,我們就可以運行作業(yè)。 我只是在IntelliJ中運行'MyClient'的主要方法,并在控制臺中獲得以下輸出:
Job STARTING at Tue Aug 06 16:31:55 CEST 2013 Job RUNNING at Tue Aug 06 16:36:18 CEST 2013 Job SHUTTING_DOWN at Tue Aug 06 16:38:40 CEST 2013 Job COMPLETED: {JobFlowId: j-JDB14HVTRC1L,Name: dictionary-8288df47-8aef-4ad3-badf-ee352a4a7c43,LogUri: s3n://map-reduce-intro/log/,AmiVersion: 2.4.0,ExecutionStatusDetail: {State: COMPLETED,CreationDateTime: Tue Aug 06 16:31:58 CEST 2013,StartDateTime: Tue Aug 06 16:36:14 CEST 2013,ReadyDateTime: Tue Aug 06 16:36:14 CEST 2013,EndDateTime: Tue Aug 06 16:39:02 CEST 2013,LastStateChangeReason: Steps completed},Instances: {MasterInstanceType: m1.small,MasterPublicDnsName: ec2-54-216-104-11.eu-west-1.compute.amazonaws.com,MasterInstanceId: i-93268ddf,InstanceCount: 1,InstanceGroups: [{InstanceGroupId: ig-2LURHNAK5NVKZ,Name: master,Market: ON_DEMAND,InstanceRole: MASTER,InstanceType: m1.small,InstanceRequestCount: 1,InstanceRunningCount: 0,State: ENDED,LastStateChangeReason: Job flow terminated,CreationDateTime: Tue Aug 06 16:31:58 CEST 2013,StartDateTime: Tue Aug 06 16:34:28 CEST 2013,ReadyDateTime: Tue Aug 06 16:36:10 CEST 2013,EndDateTime: Tue Aug 06 16:39:02 CEST 2013}],NormalizedInstanceHours: 1,Ec2KeyName: 4synergy_palma,Placement: {AvailabilityZone: eu-west-1a},KeepJobFlowAliveWhenNoSteps: false,TerminationProtected: false,HadoopVersion: 1.0.3},Steps: [{StepConfig: {Name: Enable debugging,ActionOnFailure: TERMINATE_JOB_FLOW,HadoopJarStep: {Properties: [],Jar: s3://us-east-1.elasticmapreduce/libs/script-runner/script-runner.jar,Args: [s3://us-east-1.elasticmapreduce/libs/state-pusher/0.1/fetch]}},ExecutionStatusDetail: {State: COMPLETED,CreationDateTime: Tue Aug 06 16:31:58 CEST 2013,StartDateTime: Tue Aug 06 16:36:12 CEST 2013,EndDateTime: Tue Aug 06 16:36:40 CEST 2013,}}, {StepConfig: {Name: /map-reduce-intro/job/MapReduce-1.0-SNAPSHOT.jar,ActionOnFailure: TERMINATE_JOB_FLOW,HadoopJarStep: {Properties: [],Jar: s3n://map-reduce-intro/job/MapReduce-1.0-SNAPSHOT.jar,Args: [s3n://map-reduce-intro/input/input.txt, s3n://map-reduce-intro/result/dictionary-8288df47-8aef-4ad3-badf-ee352a4a7c43]}},ExecutionStatusDetail: {State: COMPLETED,CreationDateTime: Tue Aug 06 16:31:58 CEST 2013,StartDateTime: Tue Aug 06 16:36:40 CEST 2013,EndDateTime: Tue Aug 06 16:38:10 CEST 2013,}}],BootstrapActions: [],SupportedProducts: [],VisibleToAllUsers: false ,} Process finished with exit code 0當然,我們在S3存儲桶中配置的“結果”文件夾中有一個結果:
我將結果轉移到我的本地計算機上,并進行了查看:
這樣就可以得出這個簡單的結論,但我認為,這是創(chuàng)建Hadoop作業(yè)并在對它進行單元測試之后在群集上運行它的完整示例,就像對待所有軟件一樣。
以該設置為基礎,可以輕松地提出更復雜的業(yè)務案例,并對其進行測試和配置以在AWS EMR上運行。
翻譯自: https://www.javacodegeeks.com/2013/09/run-your-hadoop-mapreduce-job-on-amazon-emr.html
總結
以上是生活随笔為你收集整理的在Amazon EMR上运行Hadoop MapReduce作业的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓同步到苹果手机怎么样弄(安卓同步到苹
- 下一篇: 无人机怎么备案登记(无人机怎么备案)