首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在EMR集群上使用submit或SparkR运行sparkR脚本?

如何在EMR集群上使用submit或SparkR运行sparkR脚本?
EN

Stack Overflow用户
提问于 2017-11-09 09:48:18
回答 1查看 2.9K关注 0票数 4

我已经编写了一个sparkR代码,并想知道我是否可以使用EMR集群上的submit或sparkR提交它。

我尝试过几种方法,例如: sparkR、mySparkRScript.r或sparkR --不保存mySparkScript.r等等。但每次我都犯了错误:

代码语言:javascript
复制
Error in sparkR.sparkContext(master, appName, sparkHome, sparkConfigMap,  : 
JVM is not ready after 10 seconds

样本代码:

代码语言:javascript
复制
#Set the path for the R libraries you would like to use.
#You may need to modify this if you have custom R libraries.
.libPaths(c(.libPaths(), '/usr/lib/spark/R/lib'))

#Set the SPARK_HOME environment variable to the location on EMR
Sys.setenv(SPARK_HOME = '/usr/lib/spark')

#Load the SparkR library into R
library(SparkR, lib.loc = c(file.path(Sys.getenv("SPARK_HOME"), "R", "lib")))

#Initiate a Spark context and identify where the master node is located.
#local is used here because the RStudio server
#was installed on the master node

sc <- sparkR.session(master = "local[*]", sparkEnvir = list(spark.driver.memory="2g"))

sqlContext <- sparkRSQL.init(sc)

注意:我可以通过直接粘贴或使用资料来源(“mySparkRScript.R”)运行我的代码。

参考:

  1. 在Amazon上用SparkR对统计数据进行规模处理
  2. SparkR火花文档
  3. R关于星火
  4. Executing-existing-r-scripts-from-spark-rutger-de-graaf
  5. Github
EN

回答 1

Stack Overflow用户

发布于 2018-01-09 17:51:56

我可以通过Rscript运行这个程序。有几件事你需要做,这可能是一个有点过程密集。如果你愿意试一试,我建议:

  1. 找出如何进行自动化的SparkR或sparklyR构建。Via:https://github.com/UrbanInstitute/spark-social-science
  2. 使用AWS首先使用EMR模板和引导脚本创建集群,您将通过下面的步骤1创建。(确保将EMR模板和rstudio_sparkr_emrlyr_blah_blah.sh脚本放入S3桶中)
  3. 将R代码放入一个文件中,并将其放入您提供的另一个S3 bucket...the示例代码中,这样可以很好地工作,但我建议您实际执行一些操作,比如从S3读取数据,为其添加一个值,然后将其写回原样(只是为了确认它在进入您可能坐着的“繁重”代码之前是否有效)。
  4. 创建另一个.sh文件,将R文件从所需的S3桶复制到集群,然后通过Rscript执行该文件。将这个shell脚本与R代码文件放在同一个S3桶中(为了简单起见)。这个shell文件的内容的示例如下所示: #!/bin/bash aws s3 cp S3://path/to//R/file/from/s3 3.R--NameOfTheFileToRun.R脚本
  5. 在AWS中,在创建集群时,将一个--step插入到集群创建调用中,使用Amazon提供的自定义JAR运行器运行复制和执行R代码的shell脚本
  6. 确保在R代码的末尾停止火花会话。

AWS命令的示例可能如下所示(在我的示例中,我正在使用Amazon上的instead 1区域,并在cluster...just中的每个工作人员上抛出一个100‘m的磁盘,将您的区域放置在任何您看到' us-east-1’的位置,然后选择您想要的任何大小的磁盘)

代码语言:javascript
复制
aws emr create-cluster --name "MY COOL SPARKR OR SPARKLYR CLUSTER WITH AN RSCRIPT TO RUN SOME R CODE" --release-label emr-5.8.0 --applications Name=Spark Name=Ganglia Name=Hadoop --instance-groups InstanceGroupType=MASTER,InstanceCount=1,InstanceType=m4.xlarge 'InstanceGroupType=CORE,InstanceCount=2,InstanceType=m4.2xlarge,EbsConfiguration={EbsOptimized=true,EbsBlockDeviceConfigs=[{VolumeSpecification={VolumeType=gp2,SizeInGB=100}},{VolumeSpecification={VolumeType=io1,SizeInGB=100,Iops=100},VolumesPerInstance=1}]}' --log-uri s3://path/to/EMR/sparkr_logs --bootstrap-action Path=s3://path/to/EMR/sparkr_bootstrap/rstudio_sparkr_emr5lyr-proc.sh,Args=['--user','cool_dude','--user-pw','top_secret','--shiny','true','--sparkr','true','sparklyr','true'] --ec2-attributes KeyName=mykeyfilename,InstanceProfile=EMR_EC2_DefaultRole,AdditionalMasterSecurityGroups="sg-abc123",SubnetId="subnet-abc123" --service-role EMR_DefaultRole --scale-down-behavior TERMINATE_AT_TASK_COMPLETION --auto-terminate --region us-east-1 --steps Type=CUSTOM_JAR,Name=CustomJAR,ActionOnFailure=CONTINUE,Jar=s3://us-east-1.elasticmapreduce/libs/script-runner/script-runner.jar,Args=["s3://path/to/the/shell/file/from/step4.sh"]

祝好运!干杯,内特

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47198617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档