开发者社区> 问答> 正文

阿里云搭建hadoop chd,shell操作正常,使用java api操作出现异常。报错

"

1、自己是初学hadoop,第一次使用hadoop-2.6.0-cdh5.7.0在阿里云上面进行部署。基础的jdk环境没有问题。因为只有一台服务器,搭建的是伪分布式,修改的配置文件如下:
core-site.xml

<code class=""xml""><property> <name>fs.defaultFS</name> <value>hdfs://desktop1:8020</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/root/tmp</value> </property>

hdfs-site.xml

<property>
    <name>dfs.replication</name>
    <value>1</value>
</property>

slave

desktop1

其中对应系统的hosts和hostname如下

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
172.31.207.xxx  desktop1
和
NETWORKING=yes
HOSTNAME=desktop1
NETWORKING_IPV6=no
PEERNTP=no

2、目前存在的问题:
自己通过ssh root@47.104.109.xxx 链接阿里云服务器[公网IP:47.104.109.xxx;私有IP:172.31.207.xxx],使用hdfs的shell命令[-ls -rm -put等等]都没有问题,且在浏览器端访问也是正常可以查看到文件的【Block information】
但是
自己通过本地的eclipse使用hdfs对应的API操作出现问题

  1. 链接服务器是正常,无异常情况
  2. 使用java api 中 fileSystem.mkdirs 可以创建成功,在浏览器端也可以查看
  3. 但是创建[create]文件、copy[copyFromLocalFile]文件、查看[open]文件,都出现异常【could only be replicated to 0 nodes instead of minReplication (=1). There are 1 datanode(s) running and 1 node(s) are excluded in this operation.】。
  4. 出现上述异常,自己也查找了很多资料。原来使用api操作默认的【Replication】为3,然而自己搭建的只有一个,所以我在代码中也添加了,虽然可以达到和用shell命令copy文件后的【Replication】变成了1【注:之前使用java api上传文件可以成功,只是文件成功了,但是文件内容0,而且Replication为3。更重要的一点是没有Block information,只有下载链接】
onfiguration = new Configuration();
configuration.set("dfs.replication", "1");
fileSystem = FileSystem.get(new URI(HDFS_APTH), configuration, "root");

本人也是第一次使用hadoop,希望大家能够给与提示和帮助,不胜感激。
附上java代码

public class HdfsApp {
    public static final String HDFS_APTH = "hdfs://47.104.109.xxx8020/";
    FileSystem fileSystem = null;
    Configuration configuration = null;

    @Before
    public void setUp() throws Exception {
        System.out.println("HDFS coming");
        configuration = new Configuration();
        configuration.set("dfs.replication", "1");
        fileSystem = FileSystem.get(new URI(HDFS_APTH), configuration, "root");
    }
    
    //创建目录正常
    @Test
    public void mkdirTest() throws Exception {
        fileSystem.mkdirs(new Path("/hdfs/dada"));
    }
    
    //copy本地到服务器异常
    @Test
    public void copyFromLocal() throws Exception {
        Path localPath = new Path("/Users/dada/Downloads/dada.jpg");
        Path hdfsPath = new Path("/");
        fileSystem.copyFromLocalFile(localPath, hdfsPath);
    }

    @After
    public void tearDown() throws Exception {
        System.out.println("HDFS leaving");
        configuration = null;
        fileSystem = null;
    }

}
异常信息
org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /dada.jpg could only be replicated to 0 nodes instead of minReplication (=1).  There are 1 datanode(s) running and 1 node(s) are excluded in this operation.
"

展开
收起
因为相信,所以看见。 2020-05-27 12:59:29 1187 0
1 条回答
写回答
取消 提交回答
  • 阿里,我所有的向往

    楼主解决这个问题了吗,我也遇到这个问题几天了,怎么都无法解决,我是使用 IOUtils.copyBytes(in, outputStream, 4096, true);进行文件的下载上传,都失败了。

    ######

    楼主是看的慕课网的课程吗,我也遇到了同样的问题,怎么也解决不了

    ######

    问题已经解决

    ######

    我也遇到了相同问题,解决了,调试经验我写了篇博客,https://blog.csdn.net/vaf714/...

    ######

    这个问题解决了吗

    2020-05-27 16:23:33
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Boot2.0实战Redis分布式缓存 立即下载
CUDA MATH API 立即下载
API PLAYBOOK 立即下载