Standalone
本页面提供了关于如何在静态 (但可能异构)集群上以完全分布式方式运行 Flink 的说明。
需求
软件需求
Flink 运行在所有类 UNIX 环境 下,例如 Linux ,Mac OS X 和 Cygwin (Windows),集群由一个 master 节点 以及一个或多个 worker 节点 构成。在配置系统之前,请确保在每个节点上安装有以下软件:
- Java 1.8.x 或更高版本,
- ssh (必须运行 sshd 以执行用于管理 Flink 各组件的脚本)
如果集群不满足软件要求,那么你需要安装/更新这些软件。
使集群中所有节点使用免密码 SSH 以及拥有相同的目录结构可以让你使用脚本来控制一切。JAVA_HOME
配置
Flink 需要 master 和所有 worker 节点设置 JAVA_HOME
环境变量,并指向你的 Java 安装目录。
你可以在 conf/flink-conf.yaml
文件中通过 env.java.home
配置项来设置此变量。
Flink 设置
前往 [下载页面]
/flink.apache.org/zh/downloads.html
) 获取可运行的软件包。
在下载完最新的发布版本后,复制压缩文件到 master 节点并解压:
tar xzf flink-*.tgz
cd flink-*
配置 Flink
在解压完文件后,你需要编辑 conf/flink-conf.yaml 文件来为集群配置 Flink。
设置 jobmanager.rpc.address
配置项指向 master 节点。你也应该通过设置 jobmanager.memory.process.size
和 taskmanager.memory.process.size
配置项来定义 Flink 允许在每个节点上分配的最大内存值。
这些值的单位是 MB。如果一些 worker 节点上有你想分配到 Flink 系统的多余内存,你可以在这些特定节点的 conf/flink-conf.yaml 文件中重写 taskmanager.memory.process.size
或 taskmanager.memory.flink.size
的默认值。
最后,你必须提供集群上会被用作为 worker 节点的所有节点列表,也就是运行 TaskManager 的节点。编辑文件 conf/workers 并输入每个 worker 节点的 IP 或主机名。
以下例子展示了三个节点(IP 地址从 10.0.0.1 到 10.0.0.3 ,主机名为 master 、worker1 、 woker2)的设置,以及配置文件(在所有机器上都需要在相同路径访问)的内容:
/path/to/flink/conf/
flink-conf.yaml
jobmanager.rpc.address: 10.0.0.1
/path/to/flink/
conf/workers
10.0.0.2
10.0.0.3
Flink 目录必须放在所有 worker 节点的相同目录下。你可以使用共享的 NFS 目录,或将 Flink 目录复制到每个 worker 节点上。
请参考 [配置参数页面] 获取更多细节以及额外的配置项。
特别地,
- 每个 JobManager 的可用内存值(
jobmanager.memory.process.size
), - 每个 TaskManager 的可用内存值 (
taskmanager.memory.process.size
,并检查 [内存调优指南]), - 每台机器的可用 CPU 数(
taskmanager.numberOfTaskSlots
), - 集群中所有 CPU 数(
parallelism.default
)和 - 临时目录(
io.tmp.dirs
)
的值都是非常重要的配置项。
启动 Flink
下面的脚本在本地节点启动了一个 JobManager 并通过 SSH 连接到 workers 文件中所有的 worker 节点,在每个节点上启动 TaskManager。现在你的 Flink 系统已经启动并运行着。可以通过配置的 RPC 端口向本地节点上的 JobManager 提交作业。
假定你在 master 节点并且在 Flink 目录下:
bin/start-cluster.sh
为了关闭 Flink,这里同样有一个 stop-cluster.sh
脚本。
为集群添加 JobManager/TaskManager 实例
你可以使用 bin/jobmanager.sh
和 bin/taskmanager.sh
脚本为正在运行的集群添加 JobManager 和 TaskManager 实例。
添加 JobManager
bin/jobmanager.sh ((start|start-foreground) [host] [webui-port])|stop|stop-all
添加 TaskManager
bin/taskmanager.sh start|start-foreground|stop|stop-all
确保在你想启动/关闭相应实例的主机上执行这些脚本。
高可用
JobManager 高可用(HA)模式加强了 Flink 集群防止 JobManager 故障的能力。 此特性确保 Flink 集群将始终持续执行你提交的作业。
JobManager 高可用
JobManager 协调每个 Flink 的部署。它同时负责 调度 和 资源管理。
默认情况下,每个 Flink 集群只有一个 JobManager 实例。这会导致 单点故障(SPOF):如果 JobManager 崩溃,则不能提交任何新程序,运行中的程序也会失败。
使用 JobManager 高可用模式,你可以从 JobManager 失败中恢复,从而消除单点故障。你可以为每个集群部署配置高可用模式。 有关更多信息,请参阅 [高可用服务] high-availability-services 如何启用集群高可用 JobManager 高可用一般概念是指,在任何时候都有 一个领导者 JobManager ,如果领导者出现故障,则有多个备用 JobManager 来接管领导。这保证了 不存在单点故障,只要有备用 JobManager 担任领导者,程序就可以继续运行。
如下是一个使用三个 JobManager 实例的例子:
Flink 的 [高可用服务] high-availability-services
- 领导者选举 :从
n
个候选者中选出一个领导者 - 服务发现:检索当前领导者的地址
- 状态持久化:继承程序恢复作业所需的持久化状态(JobGraphs、用户代码jar、已完成的检查点)
高可用服务
Flink 提供了两种高可用服务实现:
- [ZooKeeper]:每个 Flink 集群部署都可以使用 ZooKeeper HA 服务。它们需要一个运行的 ZooKeeper 复制组(quorum)。
- [Kubernetes]:Kubernetes HA 服务只能运行在 Kubernetes 上。
高可用数据生命周期
为了恢复提交的作业,Flink 持久化元数据和 job 组件。高可用数据将一直保存,直到相应的作业执行成功、被取消或最终失败。当这些情况发生时,将删除所有高可用数据,包括存储在高可用服务中的元数据。
文章列表
- Flink应用开发-集群部署-高可用
- Flink应用开发-集群部署-阿里云 OSS
- Flink应用开发-集群部署-配置参数
- Flink应用开发-集群部署-配置 TaskManager 内存
- Flink应用开发-集群部署-配置 JobManager 内存
- Flink应用开发-集群部署-配置 Flink 进程的内存
- Flink应用开发-集群部署-通用配置
- Flink应用开发-集群部署-调优指南
- Flink应用开发-集群部署-网络缓冲调优
- Flink应用开发-集群部署-概览
- Flink应用开发-集群部署-日志
- Flink应用开发-集群部署-文件系统
- Flink应用开发-集群部署-扩展资源
- Flink应用开发-集群部署-弹性扩缩容
- Flink应用开发-集群部署-常见问题
- Flink应用开发-集群部署-命令行界面
- Flink应用开发-集群部署-升级指南
- Flink应用开发-集群部署-内存配置
- Flink应用开发-集群部署-ZooKeeper 高可用服务
- Flink应用开发-集群部署-YARN
- Flink应用开发-集群部署-Scala REPL
- Flink应用开发-集群部署-SSL 设置
- Flink应用开发-集群部署-Resource Providers
- Flink应用开发-集群部署-Python REPL
- Flink应用开发-集群部署-Plugins
- Flink应用开发-集群部署-Native Kubernetes
- Flink应用开发-集群部署-Metric Reporters
- Flink应用开发-集群部署-Kubernetes 高可用服务
- Flink应用开发-集群部署-Kubernetes 设置
- Flink应用开发-集群部署-Kerberos
- Flink应用开发-集群部署-History Server
- Flink应用开发-集群部署-Google Cloud Storage
- Flink应用开发-集群部署-Fine-Grained Resource Management
- Flink应用开发-集群部署-File Systems
- Flink应用开发-集群部署-Docker 设置
- Flink应用开发-集群部署-Deployment
- Flink应用开发-集群部署-Azure Blob 存储
- Flink应用开发-集群部署-Amazon S3