
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
Kelda可简化在任何云提供商上启动和管理Apache Spark集群的过程。本仓库包含一个Kelda蓝图,用于描述如何启动Spark集群。安装Kelda后,只需运行以下命令即可在云提供商上启动一组机器并配置、启动Spark:
console$ kelda run ./sparkRun.js
下文将详细介绍Kelda的安装和Spark集群的配置方法。
首先克隆本仓库并安装必要的依赖:
console$ git clone https://github.com/kelda/spark.git $ cd spark $ npm install .
要启动Spark集群,首先启动Kelda守护进程(如果尚未运行):
console$ kelda daemon
守护进程是一个长期运行的进程,因此后续命令需要在新窗口中运行(要了解更多关于守护进程的信息,请参考Kelda文档)。
sparkRun.js中的Spark蓝图将使用默认基础架构启动Spark。如果尚未创建默认基础架构,请执行:
console$ kelda init
有关创建Kelda基础架构的更多信息,请参考Kelda文档。
接下来,运行Spark蓝图:
console$ kelda run ./sparkRun.js
这将使用蓝图sparkRun.js启动Spark集群。VM启动、Kelda配置网络和Docker容器初始化需要一些时间。kelda show命令可提供部署中VM和容器的有用信息。以下输出显示主VM的公网IP为54.219.158.97:
$ kelda show MACHINE ROLE PROVIDER REGION SIZE PUBLIC IP STATUS i-06a6afa426 Master Amazon us-west-1 m3.xlarge 54.219.158.97 connected i-0f3add6b27 Worker Amazon us-west-1 m3.xlarge 54.67.108.98 connected i-08f8c31070 Worker Amazon us-west-1 m3.xlarge 52.53.157.29 connected i-027e5d72ed Worker Amazon us-west-1 m3.xlarge 54.183.210.94 connected
当STATUS为connected时,表示相应的VM已完全启动并开始与Kelda通信。
机器处于connected状态后,可使用kelda ssh <MACHINE_ID>命令SSH登录到VM(例如,对于上述机器,使用kelda ssh i-06a登录到主节点)。
要列出集群中所有活动容器,再次执行kelda show并查看输出末尾的CONTAINER部分。例如:
$ kelda show ... CONTAINER MACHINE COMMAND HOSTNAME STATUS CREATED PUBLIC IP 0b8eb391d8ce i-027e5d72ed ... spark-master running About an hour ago 54.183.210.94:8080 62567da92a76 i-08f8c31070 ... spark-worker running About an hour ago 52.53.157.29:8081 9f7eee19a330 i-0f3add6b27 ... spark-driver running About an hour ago 54.67.108.98:[4040,18080] b8010a0970b3 i-0f3add6b27 ... spark-worker2 running About an hour ago 54.67.108.98:8081 ...
蓝图会启动多个容器。用户将交互的容器是主机名为spark-driver的容器,用于启动Spark作业(下一节将详细描述如何启动作业)。蓝图还会创建主机名为spark-master的容器(运行Spark独立调度器主节点,负责调度Spark应用)和多个Spark工作节点容器(为Spark作业运行任务)。
用户可使用spark-driver容器运行Spark作业。该容器配置为自动将作业提交到独立主节点进行调度,且其网络配置允许公网访问Spark UI。要登录到Spark驱动节点,只需使用kelda ssh命令。例如:
console$ kelda ssh spark-driver
容器的路径中包含所有Spark命令。SSH登录容器后,运行spark-shell启动Spark Shell:
console$ spark-shell Spark context Web UI available at http://54.67.108.98:4040 Spark context available as 'sc' (master = spark://spark-master:7077, app id = app-20171107203134-0001). Spark session available as 'spark'. Welcome to ____ __ / __/__ ___ _____/ /__ _\ \/ _ \/ _ `/ __/ '_/ /___/ .__/\_,_/_/ /_/\_\ version 2.2.0 /_/ Using Scala version 2.11.8 (OpenJDK 64-Bit Server VM, Java 1.8.0_131) Type in expressions to have them evaluated. Type :help for more information. scala>
要计算Pi,可在Spark驱动节点上使用run-example命令。可如上所述SSH登录容器,或通过在kelda ssh中传递命令来运行作业:
console$ kelda ssh spark-driver run-example SparkPi
此命令将启动Spark作业,作业输出将打印到命令行。作业完成后,将输出类似以下内容:
consolePi is roughly 3.13959569797849
Kelda Spark蓝图开放了访问各种Spark UI所需的所有端口:
spark-driver机器的4040端口上可用。这通常是调试特定工作负载中任务性能最有用的UI。启动Spark Shell时会打印应用程序UI的完整URL(如上述示例中的UI),也可在kelda show容器输出的PUBLIC IP列中查看。spark-driver的***端口上运行。spark-master机器上运行,并在该机器的8080端口上提供UI。与其他UI一样,此UI的完整地址可在kelda show容器输出的PUBLIC IP列中查看。此UI显示Spark集群中的所有工作节点。有关各种Spark UI的更多信息,请参考Spark文档。
Spark作业通常需要从S3读取输入数据。要从S3读取数据,需指定一组AWS访问密钥。有多种设置这些密钥的方法;一种方法是使用spark.hadoop.fs.s3a.access.key和spark.hadoop.fs.s3a.secret.key Spark配置属性。例如,使用这些属性启动Spark Shell:
console$ spark-shell --conf spark.hadoop.fs.s3a.access.key=<aws access key id> --conf spark.hadoop.fs.s3a.secret.key=<aws secret access key>
然后可使用S3 URL从S3读取数据;例如,在Shell中:
scalascala> val s3Rdd = sc.textFile("s3a://my-bucket-name/my-file-name.txt")
用户从S3读取数据时常见的一个问题是Hadoop有三种与S3交互的文件系统:s3文件系统、s3a文件系统和s3n文件系统。文件URL的第一部分指示使用哪个文件系统;上述textFile的参数以s3a://开头,表示使用s3a文件系统。每个文件系统需要设置不同的配置属性来指定AWS访问密钥。上述示例中的配置属性是针对s3a的,因此请确保使用以s3a://开头的文件路径(如果倾向于使用s3或s3n文件系统,则需要使用与上述s3a特定属性不同的配置属性)。
通常,Spark工作负载依赖于将中间数据写入HDFS。蓝图sparkWithHDFSExample.js展示了如何将Spark蓝图与https://github.com/kelda/hadoop%E4%B8%80%E8%B5%B7%E4%BD%BF%E7%94%A8%EF%BC%8C%E4%BB%A5%E9%83%A8%E7%BD%B2Spark%E5%92%8CHDFS%E5%B9%B6%E5%B0%86%E5%AE%83%E4%BB%AC%E8%BF%9E%E6%8E%A5%E8%B5%B7%E6%9D%A5%E3%80%82%E8%AF%A5%E8%93%9D%E5%9B%BE%E4%BC%9A%E5%B0%86Spark%E9%85%8D%E7%BD%AE%E4%B8%BA%E4%BD%BF%E7%94%A8HDFS%E4%BD%9C%E4%B8%BA%E9%BB%98%E8%AE%A4%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%EF%BC%8C%E5%9B%A0%E6%AD%A4%E7%B1%BB%E4%BC%BC%E4%BB%A5%E4%B8%8B%E7%9A%84Spark%E6%96%87%E4%BB%B6%E8%B0%83%E7%94%A8%EF%BC%9A
scalamyRdd.saveAsTextFile("myFilename");
将把myRdd中的数据保存到HDFS中名为myFilename的新文件中。
有关Kelda.js的更多信息,请参见Kelda。
当前此蓝图仅支持一次运行一个作业,因为作业启动时,Spark独立调度器会将集群中的所有资源分配给该作业。
spark-driver容器提交作业?不能。Kelda设置了网络防火墙,默认拒绝所有与Kelda启动的机器之间的连接。Spark蓝图spark.js开放了Spark运行所需的必要端口,例如允许spark-driver机器与调度器和工作节点机器通信。Kelda仅允许来自spark-driver机器的这些连接(作为安全预防措施),因此您的计算机无法与Spark集群中的机器通信。
以下是 keldaio/spark 相关的常用 Docker 镜像,适用于 不同场景 等不同场景:
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。



来自真实用户的反馈,见证轩辕镜像的优质服务