问题
我试图在emr中运行两个pyspark步骤,都是使用kinesisutils从kinesis读取。这需要依赖库spark-streaming-kinesis-aslèu 2.11。
我使用terraform来支撑emr集群,并使用args调用以下两个步骤:
--包org.apache。spark:spark-streaming-kinesis-asl_2.11:2.4.5
在启动时似乎存在争用,这两个步骤都是从maven下载jar并导致校验和失败。
尝试的事情
我尝试使用以下方法将jar的下载移动到bootstrap bash脚本:
sudosparkshell——包org.apache。spark:spark-streaming-kinesis-asl_2.11:2.4.5
这会导致问题,因为sparkshell仅在主节点上可用,引导程序会尝试在所有节点上运行。
我试着限制上面的内容只在master上运行
grep-q'“ismaster”:true'/mnt/var/lib/info/instance.json | |{echo“未在masternode上运行,无需进一步操作”&&exit 0;}
那似乎不管用。
我尝试在emr configuration.json中添加spark配置
{
“classification”:“Spark默认值”,
“属性”:{
"spark.jars.packages": "org.apache.spark:spark-streaming-kinesis-asl_2.11:2.4.5"
}
}
这也不起作用,似乎阻止了所有jar被复制到主节点dir
/home/hadoop/.ivy2/cache
手动工作的是登录到主节点并运行
sudosparkshell——包org.apache。spark:spark-streaming-kinesis-asl_2.11:2.4.5
然后不使用--packages选项手动提交作业。
目前,我所需要做的就是分别手动启动失败的作业(aws控制台中的克隆步骤),一切正常。
我只想能够启动集群与所有步骤成功启动,任何帮助将不胜感激。
1条答案
按热度按时间cx6n0qe31#
下载所需的jar并上传到s3。(一次)
从步骤开始运行PypSpark作业时,通过
--jars <s3 location of jar>
在你的Spark中