apache-spark - AWS EMR 多作业依赖争用
问题描述
问题
我正在尝试在 EMR 中运行 2 个 pyspark 步骤,这两个步骤都使用 KinesisUtils 从 Kinesis 读取。这需要依赖库 spark-streaming-kinesis-asl_2.11。
我正在使用 Terraform 建立 EMR 集群并使用 args 调用这些步骤:
--packages org.apache.spark:spark-streaming-kinesis-asl_2.11:2.4.5
从 maven 下载 jar 并导致校验和失败的两个步骤在启动时似乎存在争用。
尝试的事情
- 我尝试使用以下方法将 jar 的下载移动到引导 bash 脚本:
sudo spark-shell --packages org.apache.spark:spark-streaming-kinesis-asl_2.11:2.4.5
这会导致问题,因为 spark-shell 仅在主节点上可用,并且引导程序尝试在所有节点上运行。
- 我试图将上述内容限制为仅在 master 上运行
grep-q'"isMaster":true'/mnt/var/lib/info/instance.json ||{echo "不在主节点上运行,无事可做" && exit 0;}
那似乎没有用。
我尝试在 EMR configuration.json 中添加 spark 配置来执行此操作
{
"分类": "spark-defaults",
“特性”: {
"spark.jars.packages": "org.apache.spark:spark-streaming-kinesis-asl_2.11:2.4.5"
}
}
这也不起作用,似乎停止了将所有 jar 复制到主节点目录
/home/hadoop/.ivy2/cache
手动工作的是登录到主节点并运行
sudo spark-shell --packages org.apache.spark:spark-streaming-kinesis-asl_2.11:2.4.5
然后在没有 --packages 选项的情况下手动提交作业。
目前,我需要做的就是单独手动启动失败的作业(AWS 控制台中的克隆步骤),一切运行正常。
我只是希望能够在所有步骤成功启动的情况下启动集群,任何帮助将不胜感激。
解决方案
- 下载所需的 jar 并上传到 s3。(一次)
- 从 step 运行您的 pyspark 作业时,传入
--jars <s3 location of jar>
您的 spark-submit
推荐阅读
- sql - 如何在 R 中过滤具有最新时间戳的行的数据表
- vim - 如何将标记带到屏幕中间?
- machine-learning - 使用机器学习的当前状态来解决以下提到的问题的最佳方法是什么?
- javascript - replaceWith() 不返回标签
- python - python & c-c++单元程序原因段
- javascript - 如何在具有相同 ID 的元素上分配 API 获取随机颜色?
- python - Python:如何跟踪列表的排序方式?
- java - Workmanager(registerPeriodicTask)颤动,但我的应用程序每次在后台运行时都会崩溃
- javascript - Ajax 请求从数据库中获取数据并返回
- javascript - 错误凭证和注册令牌都属于同一个 Firebase 项目