设为首页 加入收藏

TOP

hadoop中hdfs文件下载
2019-04-22 00:20:40 】 浏览:45
Tags:hadoop hdfs 文件下载
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Lin_wj1995/article/details/52169019

一、不多说,按照惯例,先贴代码

还是建议粘贴到自己的eclipse中查看

package com.Lin_wj1995.bigdata.hdfs;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URI;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.BlockLocation;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.LocatedFileStatus;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.RemoteIterator;
import org.junit.Before;
import org.junit.Test;

public class HdfsClient {

    FileSystem fs = null;

    /**
     * 初始化FileSystem
     */
    @Before
    public void init() throws Exception {
        // 构造一个配置参数对象,设置一个参数:我们要访问的hdfs的URI
        // 从而FileSystem.get()方法就知道应该是去构造一个访问hdfs文件系统的客户端,以及hdfs的访问地址
        // new Configuration();的时候,它就会去加载jar包中的hdfs-default.xml
        // 然后再加载classpath下的hdfs-site.xml
        Configuration conf = new Configuration();
        //conf.set("fs.defaultFS", "hdfs://hdp-node01:9000");
        /**
         * 参数优先级: 1、客户端代码中设置的值 2、classpath下的用户自定义配置文件 3、然后是服务器的默认配置
         */
        //conf.set("dfs.replication", "3");

        // 获取一个hdfs的访问客户端,根据参数,这个实例应该是DistributedFileSystem的实例
        // fs = FileSystem.get(conf);

        // 如果这样去获取,那conf里面就可以不要配"fs.defaultFS"参数,而且,这个客户端的身份标识已经是hadoop用户
        fs = FileSystem.get(new URI("hdfs://hdp-node01:9000"), conf, "hadoop");
    }

    /**
     * 从hdfs中复制文件到本地文件系统
     */
    @Test
    public void testDownloadFileToLocal() throws IllegalArgumentException, IOException {
        fs.copyToLocalFile(new Path("/jdk-7u65-linux-i586.tar.gz"), new Path("d:/"));
        fs.close();
    }
}

二、原理讲解

  1. 首先客户端会跟namenode说我要拿取哪个目录下的哪个文件,比如是/hadoop/hdfs/目录下的cjk.avi文件
  2. namenode就会去元数据池中查找这个文件对应的各个block块,以及各个block块的位置信息(哪个datanode),然后将这些信息发给客户端
  3. 客户端拿到信息后,就会去各个节点拿取每一块block,然后将数据拉取到本地
  4. 接下来在client客户端本地对这些block块进行合并,这样就得到一个完整的文件了

三、原理图解


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇HDFS架构和读写流程详解 下一篇大数据入门教程系列之HDFS分布式..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目