我有一个用hadoop大数据欧洲和flink 1.10和1.4组成的docker,我试图在单独的容器中启动它们。我使用这个参考YARN设置,其中有一个示例
示例:发出以下命令以分配10个任务管理器,每个任务管理器具有8 GB内存和32个处理插槽:
./bin/yarn-session.sh -n 10 -tm 8192 -s 32
当我使用flink 1.10版本时,启动yarn会话的flink集群是可以的,但当版本是1.4时,我得到了一个异常:
java.lang.RuntimeException: Couldn't deploy Yarn session cluster
flinkmanger | at org.apache.flink.yarn.AbstractYarnClusterDescriptor.deploySessionCluster(AbstractYarnClusterDescriptor.java:372)
flinkmanger | at org.apache.flink.yarn.cli.FlinkYarnSessionCli.run(FlinkYarnSessionCli.java:679)
flinkmanger | at org.apache.flink.yarn.cli.FlinkYarnSessionCli$1.call(FlinkYarnSessionCli.java:514)
flinkmanger | at org.apache.flink.yarn.cli.FlinkYarnSessionCli$1.call(FlinkYarnSessionCli.java:511)
flinkmanger | at java.security.AccessController.doPrivileged(Native Method)
flinkmanger | at javax.security.auth.Subject.doAs(Subject.java:422)
flinkmanger | at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1807)
flinkmanger | at org.apache.flink.runtime.security.HadoopSecurityContext.runSecured(HadoopSecurityContext.java:41)
flinkmanger | at org.apache.flink.yarn.cli.FlinkYarnSessionCli.main(FlinkYarnSessionCli.java:511)
flinkmanger | Caused by: org.apache.flink.configuration.IllegalConfigurationException: The number of virtual cores per node were configured with 32 but Yarn only has 8 virtual cores available. Please note that the number of virtual cores is set to the number of task slots by default unless configured in the Flink config with 'yarn.containers.vcores.'
flinkmanger | at org.apache.flink.yarn.AbstractYarnClusterDescriptor.isReadyForDeployment(AbstractYarnClusterDescriptor.java:265)
flinkmanger | at org.apache.flink.yarn.AbstractYarnClusterDescriptor.deployInternal(AbstractYarnClusterDescriptor.java:415)
flinkmanger | at org.apache.flink.yarn.AbstractYarnClusterDescriptor.deploySessionCluster(AbstractYarnClusterDescriptor.java:367)
flinkmanger | ... 8 more
如何解释这一点,我认为每个槽=线程(-s(,每个任务管理器=纱线容器,并且只有容器可以在单独的处理器上工作?
正如纱线部署模式中配置参数的文档中所述,yarn.containers.vcores
指定每个yarn容器的虚拟核心(vcore(数量。默认情况下,vcore的数量设置为每个TaskManager的插槽数(如果设置(,否则设置为1。为了使用此参数,您的集群必须启用CPU调度。
在您的情况下,指定-s 32
taskmanager.numberOfTaskSlots
参数而不覆盖yarn.containers.vcores
设置,因此应用程序获取具有32个vcore的容器。为了能够在每个TM 32个插槽和仅8个内核的情况下运行,请在flink/conf/flink-conf.yaml
中将yarn.containers.vcores
设置为8
。
关于资源,是的,每个任务管理器都等于获取的yarn容器,但容器有许多vcore,由yarn.containers.vcores
指定(或每个容器有许多槽(。关于插槽,它更像是一个资源组,每个插槽可以有多个任务,每个任务在一个单独的线程中运行。因此,插槽本身并不局限于只有一个线程。请在"任务时段和资源文档"页面找到更多信息。