Почему мое приложение Yarn не переносится из Windows в изолированную программную среду Hortoworks? - PullRequest
0 голосов
/ 27 мая 2018

Я установил Virtalbox 5.2.12 для Windows на своем компьютере с Windows 7, и в него я установил Hortonworks HDP 2.6.4 Sandbox для Virtualbox.

Затем я попробовал свое первое приложение Yarn, котороеЯ скачал с «Простое приложение YARN» .

Это просто файл Java Application.java и файл ресурсов application.yml, который я включил для удобства ниже.

Моя первая попытка запустить его (после сборки) - скопировать файл jar вручную (с помощью SCP) в песочницу и запустить его там.

Для этого я изменил application.yml, чтобы иметь

hadoop:
    fsUri: hdfs://172.17.0.2:8020
    resourceManagerHost: localhost
    resource-manager-port: 8032

Обратите внимание, что я добавил "resource-manager-port: 8032" в application.yml, чтобы соответствовать значению в yarn-site.xml в моей песочнице.Я также добавил различные псевдонимы в мой файл хостов Windows.

После сборки jar (gs-yarn-basic-single-0.1.0.jar) с помощью maven (см. Включенный файл pom.xml) я запускаю его в оболочке песочницы с помощью команды:

java -jar target / gs-yarn-basic-single-0.1.0.jar

и работает нормально.

Теперь я хотелзапустите jar из командного окна Windows, ожидая, что файл будет передан в песочницу для меня.
Это вообще возможно?
Предполагая, что это так, я поступил следующим образом:

Сначала я запустил следующие команды в своем окне команд Windows и проверил, что установлено какое-то соединение:

telnet localhost 8020    
telnet localhost 8032

Я пробовал другой файл application.yml, но после сборки и запуска команды jar

java -jar target / gs-yarn-basic-single-0.1.0.jar

из каталога проекта, все они потерпели неудачу.

Я пробовалapplication.yml со следующими вариациями раздела hadoop, и все они потерпели неудачу:
1) То же, что и при запуске его в оболочке песочницы

hadoop:
    fsUri: hdfs://172.17.0.2:8020
    resourceManagerHost: localhost
    resource-manager-port: 8032    

Сбой:

[2018-05-27 19:04:29.189] boot - 31852  INFO [main] --- AbstractResourceLocalizer: About to distribute localized files
[2018-05-27 19:04:56.330] boot - 31852  INFO [main] --- Client: Retrying connect to server: 172.17.0.2/172.17.0.2:8020.

2) С исходной конфигурацией, полученной из Git

hadoop:
    fsUri: hdfs://localhost:8020
    resourceManagerHost: localhost

Сбой:

[2018-05-27 19:13:11.979] boot - 29072  INFO [main] --- AbstractResourceLocalizer: About to distribute localized files
[2018-05-27 19:13:35.451] boot - 29072  INFO [Thread-7] --- DFSClient: Exception in createBlockOutputStream
java.net.ConnectException: Connection timed out: no further information
        at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)

3) Добавлен порт менеджера ресурсов, как определено в песочнице

hadoop:
        fsUri: hdfs://localhost:8020
        resourceManagerHost: localhost
        resource-manager-port: 8032

Сбои с теми же ошибками, что и в (2)

Как эти файлы можно распространять / локализовать измое командное окно Windows для моей Песочницы, работающей в virtualbox?

Что мне не хватает?

Исходные файлы приведены ниже:

Application.Java:

package hello;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Profile;
import org.springframework.data.hadoop.fs.FsShell;
import org.springframework.yarn.annotation.OnContainerStart;
import org.springframework.yarn.annotation.YarnComponent;

@ComponentScan
@EnableAutoConfiguration
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @YarnComponent
    @Profile("container")
    public static class HelloPojo {

        private static final Log log = LogFactory.getLog(HelloPojo.class);

        @Autowired
        private Configuration configuration;

        @OnContainerStart
        public void onStart() throws Exception {
            log.info("Hello from HelloPojo");
            log.info("About to list from hdfs root content");

            FsShell shell = new FsShell(configuration);
            for (FileStatus s : shell.ls(false, "/")) {
                log.info(s);
            }
            shell.close();
        }

    }

}

application.yml:

spring:
    hadoop:
        fsUri: hdfs://localhost:8020
        resourceManagerHost: localhost
        resource-manager-port: 8032
    yarn:
        appName: gs-yarn-basic-single
        applicationDir: /app/gs-yarn-basic-single/
        client:
            startup:
                action: submit
            localizer:
                patterns:
                  - "*.jar"
            files:
              - "file:target/gs-yarn-basic-single-0.1.0.jar"
            launchcontext:
                archiveFile: gs-yarn-basic-single-0.1.0.jar
        appmaster:
            localizer:
                patterns:
                  - "*.jar"
            containerCount: 1
            launchcontext:
                archiveFile: gs-yarn-basic-single-0.1.0.jar
                arguments:
                    --spring.profiles.active: container

Информация добавлена ​​5-29-2018:

Если я открою виртуальную коробку без запуска песочницы,тогда команда Telnet (в моем командном окне Windows 7) к localhost проверяет, что порты 8020 или 8032 терпят неудачу.После запуска песочницы им это удается.Это как бы говорит мне, что переадресация портов (из virualbox в песочницу) по крайней мере этих двух портов работает правильно.

адрес 172.17.0.2, используемый в моем yml, основан на выводе команды ifconfig, когда онработает в песочнице Shell.этот адрес связан с eth0.

...