我在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文件夹,因此也会失败。感谢。
答案 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"