java Docker容器无法上载基于EMR的Hadoop
我有一个服务,可以处理从本地容器到EMR Hadoop实例的所有文件上传。我以前在一个EC2实例上托管过这个服务,它在那里运行得很好。一旦重新配置为在docker中工作(它必须与其他服务进行通信,所有这些服务都可以工作),它可以做任何事情,但不能从容器上传到Hadoop。我知道它可以向Hadoop发出一些请求,因为它可以在Hadoop中创建一个空文件,但缺少内容。还有人在将文件从运行Java服务的容器上载到Hadoop时遇到过问题吗
错误
org.apache.hadoop.ipc.RemoteException(java.io.IOException) <FILE> could only be replicated to 0 nodes instead of minReplication (=1). 2 Datanodes are running and 2 datanodes are excluded from the operation.
阶级
public static void put(String src, String dest){
Path localPath = new Path(src);
Path hdfsPath = new Path(dest);
try(FileSystem fileSystem = FileSystem.get(new URI(dest), getConfiguration())){
fileSystem.copyFromLocalFile(true, true, localPath, hdfsPath);
}catch(IOException | URISyntaxException e){
e.printStackTrace();
}
}
配置功能
private static Configuration getConfiguration(){
Configuration configuration = new Configuration();
configuration.set("fs.hdfs.impl", org.apache.hadoop.hdfs.DistributedFileSystem.class.getName());
configuration.set("fs.file.impl", org.apache.hadoop.fs.LocalFileSystem.class.getName());
configuration.set("dfs.replication", "1");
System.setProperty("HADOOP_USER_NAME", "hadoop");
return configuration;
}
新信息2021-03-18:所以问题不在于docker容器。我将容器移动到AWS VPC内的一个EC2实例上,它成功了。在不受Hadoop限制的情况下访问EMR的选项是什么
共 (0) 个答案