Я установил 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.