我试图使用spark 2.3 docker container image
运行spark-submit到kubernetes集群我面临的挑战是应用程序有一个mainapplication.jar和其他依赖文件&像AWS s3一样位于远程位置的jar,但根据spark 2.3文档,有一些名为kubernetes init-container的东西可以下载远程依赖项,但在这种情况下我不会创建任何Podspec来在kubernetes中包含init-containers,根据文档Spark 2.3 spark / kubernetes在内部创建Pods(驱动程序,执行程序)因此,当有远程依赖项时,我不知道如何使用init-container进行spark-submit。
https://spark.apache.org/docs/latest/running-on-kubernetes.html#using-remote-dependencies
请建议
答案 0 :(得分:2)
它与s3a://网址一样工作。不幸的是,使s3a在股票spark-hadoop2.7.3上运行是有问题的(主要是身份验证),所以我选择使用Hadoop 2.9.1构建Spark,因为S3A已经在那里取得了长足的发展
我已经创建了gist并包含了
所需的步骤该脚本还创建了第二个docker映像,其中添加了S3A依赖项,并使用了基本conf设置来使用IAM凭据启用S3A,因此在AWS上运行不需要将访问/密钥保存在conf文件/ args中
我还没有使用图像运行任何生产Spark作业,但是已经测试了基本的保存和加载到s3a url的确可行。
我尚未尝试使用S3Guard来使用DynamoDB来确保S3写入/读取保持一致-与EMRFS类似
答案 1 :(得分:0)
Spark会自动为您创建Init容器。
例如,您可以使用
kubectl描述pod [你的驱动程序svc的名字] 并且您将看到名为spark-init的Init容器。
您还可以通过以下命令从init-container访问日志:
警告:我没有在AWS中运行,而是使用自定义K8S。我的init-container成功运行了来自HTTP服务器的下载依赖项(但不是S3,奇怪的是)。kubectl logs [你的驱动程序svc的名字] -c spark-init