我在Windows7机器上安装了virtalbox 5.2.12 for windows,并在其中安装了hortonworks hdp 2.6.4 sandbox for virtualbox。
然后我尝试了我的第一个Yarn应用程序,我从“简单Yarn应用程序”下载。
这只是一个java文件application.java和一个application.yml资源文件,为了方便起见,我在下面提供了这两个文件。
我第一次尝试运行它(在构建之后)是手动(使用scp)将jar文件复制到沙盒中并在那里运行它。
为此,我修改了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主机文件中。
在使用maven构建jar(gs-yarn-basic-single-0.1.0.jar)之后(请参阅附带的pom.xml文件),我在沙盒shell中使用以下命令运行它:
java-jar目标/gs-yarn-basic-single-0.1.0.jar
而且运行良好。
现在,我想从windows命令窗口运行jar,希望文件能被传输到沙盒中。
这有可能吗?
假设是这样,我接着说:
我首先在windows命令窗口中运行以下命令,并验证是否建立了某些连接:
telnet localhost 8020
telnet localhost 8032
我尝试了各种application.yml,但是在构建和运行jar命令之后
java-jar目标/gs-yarn-basic-single-0.1.0.jar
在项目目录中,它们都失败了。
我尝试了application.yml和以下hadoop部分的变体,但都失败了:
1) 与在沙盒shell中运行时相同
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中运行的沙盒?
我错过了什么?
源文件如下:
应用程序.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();
}
}
}
应用程序.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
2018年5月29日新增信息:
如果我在没有启动沙盒的情况下启动virtualbox,那么telnet命令(在我的windows7命令窗口中)到localhost检查端口8020或8032失败。启动沙箱后,他们成功了。这告诉我至少这两个端口的端口转发(从virualbox到sandbox)工作正常。
myyml中使用的地址172.17.0.2基于ifconfig命令在沙盒shell中运行时的输出。此地址与eth0关联。
暂无答案!
目前还没有任何答案,快来回答吧!