Spring Dataflow和Yarn:如何正确设置属性?

时间:2016-12-01 16:29:04

标签: spring hadoop yarn spring-cloud-dataflow

如何更改默认的appdeployappmaster属性?

当我尝试通过Spring DataFlow YARN部署应用程序时。我注册了我的应用程序,创建了一个流,然后单击“部署”按钮。这样做时,我收到以下错误:

  

[XNIO-2 task-2] WARN oscdscStreamDeploymentController - 部署应用程序时的异常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:无效的主机名:本地主机是:(未知);目标主机是:“null”:8032;的java.net.UnknownHostException;有关详细信息,请参阅:http://wiki.apache.org/hadoop/UnknownHost;嵌套异常是java.net.UnknownHostException:无效的主机名:本地主机是:(未知);目标主机是:“null”:8032;的java.net.UnknownHostException;有关详细信息,请参阅:http://wiki.apache.org/hadoop/UnknownHost

正如您所看到的,部署者无法找到“资源管理器”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的问题。给定的配置将传递给部署者,并且应用程序将得到有效部署。

我会为它写一个答案。

2 个答案:

答案 0 :(得分:0)

您没有说明您的安装是基于ambari还是正常的手动YARN安装,所以我认为它是后者(手动)。

我认为问题在于,在使用config/servers.yml的分发时,resourceManagerHost的设置错误,因为它默认为localhost。启动流时,此文件仅分发到hdfs一次。如果在重新部署/创建流后更改了它,则hdfs目录中的应用程序将不会更新。默认情况下,hdfs中的此文件为/dataflow/apps/stream/app/servers.yml

这个错误很有意义,因为数据流纱线服务器控制整个东西也需要访问纱线资源管理器来提交应用程序。服务器的设置也来自同一个servers.yml文件。

答案 1 :(得分:0)

事实证明我需要添加-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,如果我做对了)。