EMR步骤复制文件从s3到spark lib

时间:2018-04-10 02:37:24

标签: apache-spark amazon-s3 amazon-emr

我在s3中为spark设置了我的依赖jdbc驱动程序,我试图在集群准备就绪时立即将其加载到spark lib文件夹中,因此在spark-submit作业之前在我的shell脚本中创建了以下步骤,

--steps "[{\"Args\":[\"/usr/bin/hdfs\",\"dfs\",\"-get\",
                 \"s3://xxxx/jarfiles/sqljdbc4.jar\",
                 \"/usr/lib/spark/jars/\"],
         \"Type\":\"CUSTOM_JAR\",
         \"ActionOnFailure\":\"$STEP_FAILURE_ACTION\",
         \"Jar\":\"s3://elasticmapreduce/libs/script-runner/script-runner.jar\",
         \"Properties\":\"\",
         \"Name\":\"Custom JAR\"},
         {\"Args\":[\"spark-submit\",
                 \"--deploy-mode\", \"cluster\",
                 \"--class\", \"dataload.data_download\",
                 \"/home/hadoop/data_to_s3-assembly-0.1.jar\"],
         \"Type\":\"CUSTOM_JAR\",
         \"ActionOnFailure\":\"$STEP_FAILURE_ACTION\",
         \"Jar\":\"s3://xxxx.elasticmapreduce/libs/script-runner/script-runner.jar\",
         \"Properties\":\"\",
         \"Name\":\"Data_Download_App\"}]"

但是在dfs -get步骤中继续获取权限被拒绝错误,我尝试提供"sudo /usr/bin/hdfs\",但之后没有获得" sudo /usr/bin/hdfs\"这样的文件。我如何在这里使用sudo?或者是否有任何其他方法将文件从s3复制到spark lib文件夹作为步骤的一部分。我试图在bootstrap中执行此操作,但是,在引导操作期间,没有创建spark文件夹,因此也会失败。感谢。

1 个答案:

答案 0 :(得分:1)

在这里为所有正在寻找答案的人更新答案。我最终在一个shell脚本中完成了该任务,在该脚本中,我将jar复制到spark / jars文件夹。

Steps = [{
                    'Name': 'copy spark jars to the spark folder',
                    'ActionOnFailure': 'CANCEL_AND_WAIT',
                    'HadoopJarStep': {
                        'Jar': 'command-runner.jar',
                        'Args': ['sudo', 'bash', '/home/hadoop/reqd_files_setup.sh', self.script_bucket_name]
                    }
                }]

shell脚本中的脚本,

sudo aws s3 cp s3://bucketname/ /usr/lib/spark/jars/ --recursive --exclude "*" --include "*.jar"