机器学习后端大数据【免费下载链接】predictionioPredictionIO, a machine learning server for developers and ML engineers.项目地址https://gitcode.com/gh_mirrors/pr/predictionio点击查看免费下载本指南以 PredictionIO 仓库内docker/charts/spark目录下的 Apache Spark Helm Chart 文档docker/charts/spark/README.md为主体系统讲解如何在 Kubernetes 上以 Helm 方式部署 Spark 集群1 个 Master 3 个可水平自动伸缩的 Worker并逐一拆解 Master、Web UI 与 Worker 的全部可配置参数。读完本文你将能够在自己的 Kubernetes 环境中完整部署一套 Spark 集群并通过--set或自定义values.yaml精确控制镜像版本、资源配额、JVM 内存与弹性伸缩策略同时理解该 Chart 与 PredictionIO 数据管道PIO 训练/预测的衔接关系。1. Chart 定位PredictionIO 的 Kubernetes 集群基石PredictionIO 是一个面向开发者和机器学习工程师的机器学习服务器其训练与预测流程依赖 Spark 完成分布式计算。仓库中的 docker/charts/spark 目录提供了一整套可直接用于 Kubernetes 的 Apache Spark Helm Chart其元数据定义在 Chart.yamlname:sparkversion:0.3.0appVersion:2.3.2description: Fast and general-purpose cluster computing system快速、通用的集群计算系统该 Chart 基于 Helm 官方 Charts 仓库中的stable/spark演化而来默认使用bde2020/spark-master与bde2020/spark-worker镜像镜像标签2.2.2-hadoop2.7即 Spark 2.2.2 Hadoop 2.7。作为对照PredictionIO 非容器化部署默认使用SPARK_HOME$PIO_HOME/vendors/spark-2.1.1-bin-hadoop2.6见 conf/pio-env.sh.template因此在 Kubernetes 场景下请确保你所使用的 Spark 版本与 PIO 引擎的兼容性要求一致。Chart 默认会完成以下三件事部署1 个 Spark Master将其 8080 端口Web UI通过外部 LoadBalancer 暴露部署3 个 Spark Worker可选启用 HorizontalPodAutoscalerHPA在 CPU 利用率达到阈值时最多扩展到10 个 Pod全部组件以Kubernetes Deployment形式运行详见 spark-master-deployment.yaml、spark-worker-deployment.yaml。2. 前置条件安装前需要满足一个可用的 Kubernetes 集群与已初始化的 HelmTiller环境ServiceAccount Token 可通过 hostname metadata 获取Chart 假设运行环境如 GKE在http://metadata/computeMetadata/v1/instance/service-accounts/default/token暴露服务账号令牌Master 启动脚本依赖该机制完成集群内通信与鉴权。如果你不在 GKE 等自带 metadata 服务的平台上运行需要先为集群配置等效的 ServiceAccount Token 注入机制否则 Master 初始化可能失败。3. 安装 Chart使用 release 名称my-release安装默认配置$ helm install --name my-release stable/spark说明stable/spark为 Helm 2 时代的 Charts 仓库路径写法在 Helm 3 中可先执行helm repo add stable https://charts.helm.sh/stable或直接指向本仓库的 Chart 目录helm install my-release docker/charts/spark。安装完成后可以通过 NOTES 提示获取 Web UI 地址详见 NOTES.txtexport SPARK_SERVICE_IP$(kubectl get svc --namespace namespace spark-webui -o jsonpath{.status.loadBalancer.ingress[0].ip}) echo http://$SPARK_SERVICE_IP:8080LoadBalancer 的 IP 分配可能需要几分钟可用以下命令持续观察kubectl get svc --namespace namespace -w spark-webui4. 完整参数说明默认值来自 values.yamlChart 的所有可配置参数均通过helm install --set keyvalue或自定义 YAML 文件注入。以下三个表格完整收录原文档全部参数并结合 values.yaml 给出默认值、实际取值与部署模板中的生效位置。4.1 Spark Master 参数参数说明默认值模板生效位置Master.NameSpark master 名称Deployment/Service 命名前缀masterREADME 中记作spark-master_helpers.tpl 的master-fullnameMaster.Image容器镜像名bde2020/spark-masterspark-master-deployment.yamlMaster.ImageTag容器镜像标签2.2.2-hadoop2.7同上Master.ReplicasDeployment 副本数1Deploymentspec.replicasMaster.Componentk8s selector key选择器标签component的值spark-masterService/Deployment 的 label 与 selectorMaster.Cpu容器请求的 CPU100mresources.requests.cpuMaster.Memory容器请求的内存512Miresources.requests.memoryMaster.ServicePortk8s Service 端口7077Servicespec.ports[].portMaster.ContainerPort容器监听端口7077容器ports[].containerPortMaster.DaemonMemoryMaster JVM Xms/XmxSPARK_DAEMON_MEMORY1g环境变量注入Master.ServiceTypeKubernetes Service 类型LoadBalancerServicespec.typeMaster 容器启动命令模板第 78-79 行为echo $(hostname -i) master-fullname /etc/hosts; Spark.Path/bin/spark-class org.apache.spark.deploy.master.Master即先通过/etc/hosts将 Pod IP 映射为 Master 的 DNS 名便于 Worker 解析再以spark-class启动 Standalone Master 进程。同时注入的环境变量包括SPARK_DAEMON_MEMORYMaster 守护进程堆内存默认1gSPARK_MASTER_HOSTMaster 主机名取master-fullnameSPARK_MASTER_PORTMaster RPC 端口取自Master.ServicePort7077SPARK_MASTER_WEBUI_PORTWeb UI 端口取自WebUi.ContainerPort8080。4.2 Spark Web UI 参数参数说明默认值模板生效位置WebUi.NameWeb UI 名称webuiREADME 中记作spark-webuiwebui-fullnameWebUi.ServicePortk8s Service 端口8080WebUi Servicespec.ports[].portWebUi.ContainerPort容器监听端口8080Master 容器ports[].containerPort与SPARK_MASTER_WEBUI_PORTWeb UI 与 Master 位于同一 PodMaster 容器同时暴露 7077RPC与 8080Web UI两个端口spark-master-deployment.yaml。webui-fullname会生成独立的spark-webuiService类型同样默认为LoadBalancer供浏览器访问集群监控页面。4.3 Spark Worker 参数参数说明默认值模板生效位置Worker.NameWorker 名称workerREADME 中记作spark-workerworker-fullnameWorker.Image容器镜像名bde2020/spark-workerspark-worker-deployment.yamlWorker.ImageTag容器镜像标签2.2.2-hadoop2.7同上Worker.ReplicasHPA 与 Deployment 的副本数3Deploymentspec.replicas与 HPAminReplicasWorker.ReplicasMaxHPA 最大副本数10HPAmaxReplicasWorker.Componentk8s selector keyspark-workerlabel 与 selectorWorker.Cpu容器请求的 CPU100mresources.requests.cpuWorker.Memory容器请求的内存512Miresources.requests.memoryWorker.ContainerPort容器监听端口8081容器ports[].containerPortWorker.CpuTargetPercentageHPA CPU 目标利用率50HPAtargetAverageUtilizationWorker.DaemonMemoryWorker JVM Xms/Xmx1gSPARK_DAEMON_MEMORYWorker.ExecutorMemoryWorker 可分配给 Executor 的内存1gSPARK_WORKER_MEMORYWorker.Autoscaling是否启用水平 Pod 自动伸缩falsevalues.yaml 中为Autoscaling.Enabled: falsespark-worker-hpa.yamlWorker 容器启动命令模板第 44 行为Spark.Path/bin/spark-class org.apache.spark.deploy.worker.Worker spark://master-fullname:7077Worker 通过spark://master-fullname:Master.ServicePort连接 Master 注册自身并注入以下环境变量SPARK_DAEMON_MEMORYWorker 守护进程堆内存默认1gSPARK_WORKER_MEMORYWorker 可供 Executor 使用的总内存默认1gSPARK_WORKER_WEBUI_PORTWorker Web UI 端口取自WebUi.ContainerPort8080。5. 使用--set或自定义values.yaml覆盖配置Chart 支持两种覆盖方式。5.1 命令行--set适合单参数微调# 调整 Worker 副本数与 Executor 内存 $ helm install --name my-release \ --set Worker.Replicas5 \ --set Worker.ExecutorMemory2g \ stable/spark5.2 自定义 YAML适合整体配置$ helm install --name my-release -f values.yaml stable/spark其中values.yaml可直接以仓库内置的 values.yaml 为模板修改例如开启 Worker 自动伸缩Worker: Replicas: 3 ReplicasMax: 10 CpuTargetPercentage: 50 Autoscaling: Enabled: true提示Chart 内置的values.yaml即上文各参数默认值的唯一权威来源改动前建议先通读该文件中的注释如# Set Master JVM memory. Default 1g、# Set how much total memory workers have to give executors再决定覆盖项。6. 源码级原理Master 与 Worker 的模板实现6.1 资源命名规范所有资源名由 _helpers.tpl 中的命名模板生成规则为Release.Name-组件名并统一截断到 63 字符Kubernetes DNS 规范限制master-fullnamerelease-masterwebui-fullnamerelease-webuiworker-fullnamerelease-worker因此 release 名为my-release时对应 Service/Deployment 为my-release-master、my-release-webui、my-release-worker。6.2 服务与选择器spark-master-deployment.yaml 中同时定义了 Master Service、WebUi Service 与 Master Deployment 三个资源Master Service端口Master.ServicePort(7077) →Master.ContainerPort(7077)类型 LoadBalancerWebUi Service端口WebUi.ServicePort(8080) →WebUi.ContainerPort(8080)类型 LoadBalancerDeploymentreplicas默认 1更新策略为RollingUpdateselector 依据component: release-Master.Component匹配。6.3 Worker 的水平自动伸缩HPAspark-worker-hpa.yaml 仅在Worker.Autoscaling.Enabled为 true 时渲染apiVersion: autoscaling/v2beta1 kind: HorizontalPodAutoscaler metadata: name: worker-fullname spec: scaleTargetRef: apiVersion: apps/v1beta1 kind: Deployment name: worker-fullname minReplicas: 3 # Worker.Replicas maxReplicas: 10 # Worker.ReplicasMax metrics: - type: Resource resource: name: cpu targetAverageUtilization: 50 # Worker.CpuTargetPercentage即以 Worker Deployment 为伸缩目标最小副本数等于Worker.Replicas默认 3当所有 Pod 的平均 CPU 利用率超过 50% 时扩容上限为Worker.ReplicasMax默认 10。README 中“CPU hits 50% of 100m”即指每个 Worker 请求 100m CPU、目标利用率 50% 的组合。6.4 内置冒烟测试Chart 附带一个helm test冒烟测试模板 spark-sql-test.yaml它会启动一个一次性 Pod使用 Master 镜像执行Spark.Path/bin/spark-sql --master spark://release-master:7077 -e show databases;成功输出数据库列表即代表集群可正常接收作业。执行方式$ helm test my-release7. 与 PredictionIO 集群环境的配套使用该 Spark Chart 在仓库中通常与 PredictionIO 的 Docker 化部署配套出现docker/docker-compose.spark.yml 提供了非 Kubernetes 场景下的对照实现spark-master暴露 8080/7077 端口并注入INIT_DAEMON_STEPsetup_sparkspark-worker-1通过SPARK_MASTERspark://spark-master:7077连接 MasterPredictionIO 侧需要将SPARK_HOME指向集群环境对应的 Spark 发行版参考 conf/pio-env.sh.template 中SPARK_HOME$PIO_HOME/vendors/spark-2.1.1-bin-hadoop2.6的配置方式并保证 PIO 引擎通过spark://master-service:7077提交训练与预测任务如需了解 PredictionIO 在 Kubernetes 上的完整编排含 PIO、存储等组件可参考 docker/docker-compose.deploy.yml 与 docker/charts/predictionio 目录。8. 常见问题与调优建议Worker 无法注册到 Master确认 Worker 启动命令中的spark://master-fullname:Master.ServicePort与 Master Service 名称、端口一致跨命名空间部署时需使用完整 DNS 名。LoadBalancer IP 迟迟未分配NOTES 提示此过程可能需要数分钟用kubectl get svc -w观察若长期处于pending需检查云厂商 LoadBalancer 配额与集群网络插件。内存不足导致 Executor 失败Worker.ExecutorMemorySPARK_WORKER_MEMORY默认 1g应小于等于Worker.Memory请求值默认 512Mi与节点容量建议按实际作业调整两者避免资源超卖。HPA 未生效确认Worker.Autoscaling.Enabled: true且集群已部署 metrics-serverHPA 依赖 CPU 指标CpuTargetPercentage建议结合 Worker 实际负载曲线调整避免频繁抖动扩容。版本兼容Chart 默认镜像为 Spark 2.2.2 Hadoop 2.7而 PredictionIO 默认 vendor 为 Spark 2.1.1跨版本混用时务必核对 PIO 引擎对 Spark 的版本约束避免 API 不兼容。赞分享机器学习后端大数据【免费下载链接】predictionioPredictionIO, a machine learning server for developers and ML engineers.项目地址https://gitcode.com/gh_mirrors/pr/predictionio点击查看免费下载相关推荐Airbyte Helm ChartKubernetes集群部署终极指南Airbyte Helm ChartKubernetes集群部署终极指南 Airbyte是一款开源的数据集成平台支持ELT管道和AI代理的数据移动可从AP数据工程数据集成ETL后端大数据Apache APISIX Helm ChartKubernetes部署自动化Apache APISIX Helm ChartKubernetes部署自动化 引言云原生API网关的部署革命 在当今云原生时代Kubernetes已成为后端微服务云原生Apache DolphinScheduler Helm ChartKubernetes 部署全解与 Values 配置实战Apache DolphinScheduler Helm ChartKubernetes 部署全解与 Values 配置实战 本文围绕 DolphinSche任务调度数据编排工作流自动化后端大数据创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考