有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案