这是我参与8月更文挑战的第13天,活动详情查看:8月更文挑战
二、基础
2. 集群管理模式
图自官网介绍
- Standalone:单机模式,测试等非生产环境下使用;
- Apache Mesos:支持运行 MapReduce 的集群管理工具;
- Hadoop YARN:使用 Hadoop 组件管理资源的工具;
- K8S:支持自动部署、扩缩容的开源容器管理工具;
3. 监控&安全
(1)Standalone mode only
| From | To | Default Port | Purpose | Configuration Setting | Notes |
|---|---|---|---|---|---|
| Browser | Standalone Master | 8080 | Web UI | spark.master.ui.port / SPARK_MASTER_WEBUI_PORT | Jetty-based. Standalone mode only. |
| Browser | Standalone Worker | 8081 | Web UI | spark.worker.ui.port / SPARK_WORKER_WEBUI_PORT | Jetty-based. Standalone mode only. |
| Driver / Standalone Worker | Standalone Master | 7077 | Submit job to cluster / Join cluster | SPARK_MASTER_PORT | Set to "0" to choose a port randomly. Standalone mode only. |
| External Service | Standalone Master | 6066 | Submit job to cluster via REST API | spark.master.rest.port | Use spark.master.rest.enabledto enable/disable this service. Standalone mode only. |
| Standalone Master | Standalone Worker | (random) | Schedule executors | SPARK_WORKER_PORT | Set to "0" to choose a port randomly. Standalone mode only. |
(2)All cluster managers
| From | To | Default Port | Purpose | Configuration Setting | Notes |
|---|---|---|---|---|---|
| Browser | Application | 4040 | Web UI | spark.ui.port | Jetty-based |
| Browser | History Server | 18080 | Web UI | spark.history.ui.port | Jetty-based |
| Executor / Standalone Master | Driver | (random) | Connect to application / Notify executor state changes | spark.driver.port | Set to "0" to choose a port randomly. |
| Executor / Driver | Executor / Driver | (random) | Block Manager port | spark.blockManager.port | Raw socket via ServerSocketChannel |
4. 运行流程
- Driver 创建一个 SparkContext,进行资源的申请、任务的分配和监控;
- Executor 分配资源并启动 Executor 进程;
- SparkContext 根据 RDD 的依赖关系,构建 DAG,提交给 DAGScheduler 解析成 Stage。将 TaskSet 提交给底层调度器 TaskScheduler 处理;
- Executor 向 SparkContext 申请 Task,TaskScheduler 将 Task 分配给 Executor 运行,并提供应用程序代码;
- Executor 执行 Task,并将执行结果反馈给 TaskScheduler、DAGScheduler,运行完毕后写入数据并释放所有资源。
5. RDD 依赖
- 窄依赖:一个 父RDD 的分区对应于一个 子RDD 的分区 || 多个 父RDD 的分区对应于一个 子RDD 的分区;
- 宽依赖:存在一个 父RDD 的一个分区 对应 一个 子RDD 的多个分区;
- Stage 划分:将窄依赖尽量划分到同一个 Stage 中,可以实现流水线计算;