Spring Dataflow 和 Yarn:如何正确设置属性?
Spring Dataflow and Yarn: How to set properties properly?
如何更改默认的 appdeployappmaster 属性?
当我尝试通过 Spring DataFlow YARN 部署应用程序时。我注册了我的应用程序,创建了一个流,然后单击 "deploy" 按钮。这样做时,出现以下错误:
[XNIO-2 task-2] WARN o.s.c.d.s.c.StreamDeploymentController - Exception when deploying the app StreamAppDefinition [streamName=histo, name=my-app, registeredAppName=my-app, properties={spring.cloud.stream.bindings.input.destination=log, spring.cloud.stream.bindings.input.group=histo}]: java.util.concurrent.ExecutionException: org.springframework.yarn.YarnSystemException: Invalid host name: local host is: (unknown); destination host is: "null":8032; java.net.UnknownHostException; For more details see: http://wiki.apache.org/hadoop/UnknownHost; nested exception is java.net.UnknownHostException: Invalid host name: local host is: (unknown); destination host is: "null":8032; java.net.UnknownHostException; For more details see: http://wiki.apache.org/hadoop/UnknownHost
如您所见,部署程序无法找到 "Resource Manager" URI,尽管在 Spring DataFlow Server 启动时可以很好地找到它。
所以我只在部署时遇到问题。
我应该设置哪个 属性 来解决这个问题,我应该在哪里设置?
编辑 1:
根据 Janne Valkealahti 的回答,我在 /dataflow/apps/stream/app/servers.yml
中添加了以下属性,重新启动了服务器,并尝试重新部署我的流。
spring:
cloud:
dataflow:
yarn:
version: 0.0.1-SNAPSHOT
deployer:
yarn:
version: 1.0.2.RELEASE
stream:
kafka:
binder:
brokers: kafka.my-domain.com:9092
zkNodes: zookeeper.my-domain.com:2181/node
# Configured for Hadoop single-node running on localhost. Replace with property values reflecting your
# actual Hadoop cluster when running in a distributed environment.
hadoop:
fsUri: hdfs://mapr.my-domain.com/referentiel/ca_category_2014/
resourceManagerHost: mapr.my-domain.com
resourceManagerPort: 8032
resourceManagerSchedulerAddress: mapr.my-domain.com:8030
session:
store-type: none
我仍然收到完全相同的消息。
PS: 我没有使用 Ambari,我想先手动了解它是如何工作的。
编辑 2:
我解决了在 DataFlow 服务器上添加 -Dspring.config.location
VM arg 的问题。给定的配置被传递给部署者,应用程序被有效部署。
我会写一个答案。
您没有说明您的安装是基于 ambari 还是正常的手动 YARN 安装,所以我认为它是后者(手动)。
我认为一个问题是,在您使用 config/servers.yml
的发行版中,resourceManagerHost
的设置有误,因为它默认为 localhost
。当流启动时,此文件仅分发一次到 hdfs 中。如果您在 redeploy/create 流后更改了它,则 hdfs 目录中的应用程序将不会更新。默认情况下,hdfs 中的此文件为 /dataflow/apps/stream/app/servers.yml
.
这个错误是有道理的,因为控制整个东西的数据流纱线服务器也需要访问纱线资源管理器来提交应用程序。服务器的设置也来自同一个 servers.yml
文件。
事实证明我需要添加 -Dspring.config.location
JVM arg 才能使其工作。 -Dspring.config.location
应该指向包含 YARN 配置的文件,即:
spring:
cloud:
dataflow:
yarn:
version: 0.0.1-SNAPSHOT
deployer:
yarn:
version: 1.0.2.RELEASE
stream:
kafka:
binder:
brokers: kafka.my-domain.com:9092
zkNodes: zookeeper.my-domain.com:2181/node
# Configured for Hadoop single-node running on localhost. Replace with property values reflecting your
# actual Hadoop cluster when running in a distributed environment.
hadoop:
fsUri: hdfs://mapr.my-domain.com/referentiel/ca_category_2014/
resourceManagerHost: mapr.my-domain.com
resourceManagerPort: 8032
resourceManagerSchedulerAddress: mapr.my-domain.com:8030
session:
store-type: none
然后将此配置传递给部署程序应用程序(appdeployerappmaster
如果我做对了)。
如何更改默认的 appdeployappmaster 属性?
当我尝试通过 Spring DataFlow YARN 部署应用程序时。我注册了我的应用程序,创建了一个流,然后单击 "deploy" 按钮。这样做时,出现以下错误:
[XNIO-2 task-2] WARN o.s.c.d.s.c.StreamDeploymentController - Exception when deploying the app StreamAppDefinition [streamName=histo, name=my-app, registeredAppName=my-app, properties={spring.cloud.stream.bindings.input.destination=log, spring.cloud.stream.bindings.input.group=histo}]: java.util.concurrent.ExecutionException: org.springframework.yarn.YarnSystemException: Invalid host name: local host is: (unknown); destination host is: "null":8032; java.net.UnknownHostException; For more details see: http://wiki.apache.org/hadoop/UnknownHost; nested exception is java.net.UnknownHostException: Invalid host name: local host is: (unknown); destination host is: "null":8032; java.net.UnknownHostException; For more details see: http://wiki.apache.org/hadoop/UnknownHost
如您所见,部署程序无法找到 "Resource Manager" URI,尽管在 Spring DataFlow Server 启动时可以很好地找到它。 所以我只在部署时遇到问题。
我应该设置哪个 属性 来解决这个问题,我应该在哪里设置?
编辑 1:
根据 Janne Valkealahti 的回答,我在 /dataflow/apps/stream/app/servers.yml
中添加了以下属性,重新启动了服务器,并尝试重新部署我的流。
spring:
cloud:
dataflow:
yarn:
version: 0.0.1-SNAPSHOT
deployer:
yarn:
version: 1.0.2.RELEASE
stream:
kafka:
binder:
brokers: kafka.my-domain.com:9092
zkNodes: zookeeper.my-domain.com:2181/node
# Configured for Hadoop single-node running on localhost. Replace with property values reflecting your
# actual Hadoop cluster when running in a distributed environment.
hadoop:
fsUri: hdfs://mapr.my-domain.com/referentiel/ca_category_2014/
resourceManagerHost: mapr.my-domain.com
resourceManagerPort: 8032
resourceManagerSchedulerAddress: mapr.my-domain.com:8030
session:
store-type: none
我仍然收到完全相同的消息。
PS: 我没有使用 Ambari,我想先手动了解它是如何工作的。
编辑 2:
我解决了在 DataFlow 服务器上添加 -Dspring.config.location
VM arg 的问题。给定的配置被传递给部署者,应用程序被有效部署。
我会写一个答案。
您没有说明您的安装是基于 ambari 还是正常的手动 YARN 安装,所以我认为它是后者(手动)。
我认为一个问题是,在您使用 config/servers.yml
的发行版中,resourceManagerHost
的设置有误,因为它默认为 localhost
。当流启动时,此文件仅分发一次到 hdfs 中。如果您在 redeploy/create 流后更改了它,则 hdfs 目录中的应用程序将不会更新。默认情况下,hdfs 中的此文件为 /dataflow/apps/stream/app/servers.yml
.
这个错误是有道理的,因为控制整个东西的数据流纱线服务器也需要访问纱线资源管理器来提交应用程序。服务器的设置也来自同一个 servers.yml
文件。
事实证明我需要添加 -Dspring.config.location
JVM arg 才能使其工作。 -Dspring.config.location
应该指向包含 YARN 配置的文件,即:
spring:
cloud:
dataflow:
yarn:
version: 0.0.1-SNAPSHOT
deployer:
yarn:
version: 1.0.2.RELEASE
stream:
kafka:
binder:
brokers: kafka.my-domain.com:9092
zkNodes: zookeeper.my-domain.com:2181/node
# Configured for Hadoop single-node running on localhost. Replace with property values reflecting your
# actual Hadoop cluster when running in a distributed environment.
hadoop:
fsUri: hdfs://mapr.my-domain.com/referentiel/ca_category_2014/
resourceManagerHost: mapr.my-domain.com
resourceManagerPort: 8032
resourceManagerSchedulerAddress: mapr.my-domain.com:8030
session:
store-type: none
然后将此配置传递给部署程序应用程序(appdeployerappmaster
如果我做对了)。