首页 > 解决方案 > 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 实例上,它工作正常。在不受 VPC 之外的 Hadoop 限制的情况下访问 EMR 有哪些选择。

标签: javadockeramazon-emr

解决方案


推荐阅读