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 实例上,它工作正常。在不受 VPC 之外的 Hadoop 限制的情况下访问 EMR 有哪些选择。
解决方案
推荐阅读
- python - Python 解析名为“class”的 csv 元素(Python 关键字)
- ubuntu - Ubuntu获取MAC地址所有设备也不在网络中
- python - 从 Python 2.7 迁移到 3.8:“TypeError:需要类似字节的对象,而不是 'str'”
- c# - 动态反序列化 JSON 以访问其泛型类型
- python - 为什么我在 python 中没有得到 chromedriver 异常
- python-3.x - pandas - 创建动态列
- mongodb - $in 当数组为空时不返回任何内容
- php - Laravel - MacOS - 失败。退出代码:127(找不到命令)工作目录
- python - 如何为 ML 模型正确设置种子值?
- swift - 为什么推送到 ViewController 会将其显示为弹出窗口?