精华内容
下载资源
问答
  • 分布式 文件管理系统

    2015-04-10 07:28:14
    操作系统读取硬盘的时候,是一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。 储存文件元信息的区域就叫做inode,...

    基础知识篇:

    文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB),

    操作系统读取硬盘的时候,是一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。

    储存文件元信息的区域就叫做inode,中文译名为"索引节点"。包含:文件的字节数, 文件拥有者的User ID, 文件的Group ID, 文件的读、写、执行权限, 文件的时间戳, 链接数,即有多少文件名指向这个inode, 文件数据block的位置


    共享磁盘(Shared-disk)/Storage-area network(SAN),在并行控制上做了很多工作,以至于其拥有比较一致连贯的文件系统视图。

    分布式文件系统(DFS):不是块级别的共享的形式了,所有加进来的存储(文件系统)都是整个文件系统的一部分,所有数据的传输也是依靠网络来的,实现的方式有NFS、CIFS、SMB、NCP等,比较著名的产品有Google GFS、Hadoop HDFS、GlusterFS、Lustre等。


    RAID:磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意。

    条带化技术就是将一块连续的数据分成很多小部分并把他们分别存储到不同磁盘上去,这就能使对这种数据进行顺序访问的时候可以获得最大程度上的 I/O 并行能力.

    FUSE(用户空间文件系统)是这样一个框架:它使得FUSE用户在用户态下编写文件系统成为可能,而不必和内核打交道。由三个部分组成:linux内核模块、FUSE库 以及mount 工具。

    *************************************************

    序列化系统 ( 序列化就是将对象(实例)转换为字符流(字符数组)的过程)

    在hadoop里面有自己定义的序列化格式:Hadoop中定义了两个序列化相关的接口:Writable接口和Comparable接口,这两个接口可以合成一个接口WritableComparable. 它是hadoop的核心之一,并已提取为Avro子项目,

    远程过程调用(Remote Procedure Call,RPC)是一个计算机通信协议,该协议允许运行于一台计算机的程序调用另一台计算机的子程序。Hadoop的RPC主要是通过Java的动态代理(Dynamic Proxy)与反射(Reflect)实现。

    为什么要用RPC呢?举个例子:当客户端要访问服务端数据时就无需每次拷贝整个数据库或它的大部分程序到客户端系统。其实,服务端只处理请求,甚至只执行一些数据计算,把得出的结果再发送给客户端。因为当数据存放在一个地方时,数据库同步很容易实现,所以多个客户端可同时访问相同的数据。

     Avro依赖模式(Schema)来实现数据结构定义。可以把模式理解为Java的类,它定义每个实例的结构,可以包含哪些属性。可以根据类来产生任意多个实例对象。对实例序列化操作时, 需要模式与数据同时存在。Avro数据以模式来读和写(文件或是网络),并且写入的数据都不需要加入其它标识,这样序列化时速度快且结果内容少。由于程序可以直接根据模式来处理数据,所以Avro更适合于脚本语言的发挥。 Avro支持两种序列化编码方式:二进制编码和JSON编码。

    Google的Protocol Buffers

    Facebook的Thrift:

    Thrift通过一个中间语言(IDL, 接口定义语言)来定义RPC的接口和数据类型,然后通过一个编译器生成不同语言的代码(目前支持C++,Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk和OCaml),并由生成的代码负责RPC协议层和传输层的实现。

    基于 JSON 消息格式的 RESTful 服务等


    ********************************************

    常见DFS比较:见连接

    如果你追求的高效,并且在一定程度上可以容忍少量数据的丢失,那么lustre将会是你的不二选择,至于数据的安全性,你可以使用第三方的软件或者系统来实现,或者说直接就忽略之;

    如果你的业务需求是做数据挖掘数据分析,那么不用多想了,没有人不选择HDFS而去选择其他的;

    如果你想使用起来功能比较完善,并且管理起来比较方便,那么GlusterFS会是不错的选择;



    Gluster 学习博客:

    GlusterFS学习之集群文件系统研究

    Glusterfs全局统一命名空间

    Gluster 学习实例

    HBase + Gluster 实例

    MySQL + Gluster 实例


    **************************************************

    HBase  加载数据 方法 初探

    HBase 加载数据的研究

    数据导入HBase最常用的三种方式





    展开全文
  • 说起分布式文件管理系统,大家可能很容易想到 HDFS、GFS 等系统,前者是 Hadoop 的一部分,后者则是 Google 提供的分布式文件管理系统。除了这些之外,国内淘宝和腾讯也有自己的分布式文件管理系统,都叫 TFS...

    说起分布式文件管理系统,大家可能很容易想到 HDFS、GFS 等系统,前者是 Hadoop 的一部分,后者则是 Google 提供的分布式文件管理系统。除了这些之外,国内淘宝和腾讯也有自己的分布式文件管理系统,都叫 TFS(Taobao File SystemTencent File System)。

    相对于上面提到的这些分布式文件管理系统而言,FastDFS 可能离我们 Java 工程师更近一些,因为文件上传这个功能太常见了,而想要搭建独立的分布式文件管理系统,FastDFS+Nginx 组合无疑是最佳方案。因此,松哥今天就来和大家简单聊一聊这个问题。

    如果小伙伴们还不懂在传统的开发环境下如何进行文件上传,可以参考松哥之前发的文件上传教程:

    1.什么是 FastDFS

    1.1 FastDFS 简介

    FastDFS 由淘宝的余庆大佬在 2008 年开源的一款轻量级分布式文件管理系统,FastDFS 用 C 语言实现,支持 Linux、FreeBSD、MacOS 等类 UNIX 系统。FastDFS 类似 google FS,属于应用级文件系统,不是通用的文件系统,只能通过专有 API 访问,目前提供了 C 和 Java SDK ,以及 PHP 扩展 SDK。

    这款开源软件从发布至今,历经数十年,这款开源软件的生命力依然旺盛,在业界依然备受推崇,当然这也得益于作者一直在不断完善该软件。

    FastDFS 专为互联网应用量身定做,解决大容量文件存储问题,追求高性能和高扩展性,它可以看做是基于文件的 key/value 存储系统,key 为文件 ID,value 为文件内容,因此称作分布式文件存储服务更为合适。

    1.2 为什么需要 FastDFS

    传统的企业级开发对于高并发要求不是很高,而且数据量可能也不大,在这样的环境下文件管理可能非常 Easy。

    但是互联网应用访问量大、数据量大,在互联网应用中,我们必须考虑解决文件大容量存储和高性能访问的问题,而 FastDFS 就特别适合干这件事情,常见的图片存储、视频存储、文档存储等等我们都可以采用 FastDFS 来做。

    1.3 FastDFS 架构

    作为一款分布式文件管理系统,FastDFS 主要包括四个方面的功能:

    • 文件存储
    • 文件同步
    • 文件上传
    • 文件下载

    这个方面的功能,基本上就能搞定我们常见的文件管理需求了。

    下面这是一张来自 FastDFS 官网的系统架构图:

    从上面这张图中我们可以看到,FastDFS 架构包括 Tracker 和 Storage 两部分,看名字大概就能知道,Tracker 用来追踪文件,相当于是文件的一个索引,而 Storage 则用来保存文件。

    我们上传文件的文件最终保存在 Storage 上,文件的元数据信息保存在 Tracker 上,通过 Tracker 可以实现对 Storage 的负载均衡。

    Storage 一般会搭建成集群,一个 Storage Cluster 可以由多个组构成,不同的组之间不进行通信,一个组又相当于一个小的集群,组由多个 Storage Server 组成,组内的 Storage Server 会通过连接进行文件同步来保证高可用。

    2.FastDFS 安装

    介绍完 FastDFS 之后,相信小伙伴已经摩拳擦掌跃跃欲试了,接下来我们就来看下 FastDFS 的安装。

    我这里为了测试方便,就不开启多台虚拟机了,Tracker 和 Storage 我将安装在同一台服务器上。

    图片上传我们一般使用 FastDFS,图片上传成功之后,接下来的图片访问我们一般采用 Nginx,所以这里的安装我将从三个方面来介绍:

    • Tracker 安装
    • Storage 安装
    • Nginx 安装

    2.1 Tracker 安装

    安装,我们首先需要准备一个环境两个库以及一个安装包。

    1.一个环境

    先来看一个环境,由于 FastDFS 采用 C 语言开发,所以在安装之前,如果没有 gcc 环境,需要先安装,安装命令如下:

    yum install gcc-c++
    

    2.两个库

    再来看两个库,由于 FastDFS 依赖 libevent 库,安装命令如下:

    yum -y install libevent
    

    另一个库是 libfastcommon,这是 FastDFS 官方提供的,它包含了 FastDFS 运行所需要的一些基础库。

    libfastcommon 下载地址:https://github.com/happyfish100/libfastcommon/archive/V1.0.43.tar.gz

    考虑到 GitHub 访问较慢,松哥已经把安装文件下载好了,放在百度网盘上,小伙伴们可以在松哥公众号后台回复 fastdfs 获取下载链接。

    将下载好的 libfastcommon 拷贝至 /usr/local/ 目录下,然后依次执行如下命令:

    cd /usr/local
    tar -zxvf V1.0.43.tar.gz
    cd libfastcommon-1.0.43/
    ./make.sh
    ./make.sh install
    

    3.一个安装包

    接下来我们下载 Tracker,注意,由于 Tracker 和 Storage 是相同的安装包,所以下载一次即可(2.2 小节中不用再次下载)。

    安装文件可以从 FastDFS 的 GitHub 仓库上下载,下载地址:https://github.com/happyfish100/fastdfs/archive/V6.06.tar.gz

    考虑到 GitHub 访问较慢,松哥已经把安装文件下载好了,放在百度网盘上,小伙伴们可以在松哥公众号后台回复 fastdfs 获取下载链接。

    下载成功后,将下载文件拷贝到 /usr/local 目录下,然后依次执行如下命令安装:

    cd /usr/local
    tar -zxvf V6.06.tar.gz
    cd fastdfs-6.06/
    ./make.sh
    ./make.sh install
    

    安装成功后,执行如下命令,将安装目录内 conf 目录下的配置文件拷贝到 /etc/fdfs 目录下:

    cd conf/
    cp ./* /etc/fdfs/
    

    4.配置

    接下来进入 /etc/fdfs/ 目录下进行配置:

    打开 tracker.conf 文件:

    vi tracker.conf
    

    修改如下配置:

    默认端口是 22122,可以根据实际需求修改,我这里就不改了。然后下面配置一下元数据的保存目录(注意目录要存在)。

    5.启动

    接下来执行如下命令启动 Tracker:

    /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start
    

    如此之后,我们的 Tracker 就算安装成功了。

    2.2 Storage 安装

    简单起见,这里我们搭建一个 Storage 实例即可。Storage 安装也需要 libevent 和 libfastcommon,这两个库的安装参考上文,这里我不在细说。

    Storage 本身的安装,也和 Tracker 一致,执行命令也都一样,因为我这里将 Tracker 和 Storage 安装在同一台服务器上,所以不用再执行安装命令了(相当于安装 Tracker 时已经安装了 Storage 了)。

    唯一要做的,就是进入到 /etc/fdfs 目录下,配置 Storage:

    vi storage.conf
    

    这里一共配置三个地方,分别是 base_path、store_path0 以及 tracker_server ,tracker_server 模板有两个地址,我们这里只有一个,配置完成后,记得注释掉另外一个不用的。

    配置完成后,执行如下命令启动 Storage:

    /usr/bin/fdfs_storaged /etc/fdfs/storage.conf start
    

    这两个启动完成后,现在就可以做文件的上传了,但是一般如果是图片文件,我们还需要提供一个图片的访问功能,目前来说最佳方案当然是 Nginx 了,所以我们这里连同 Nginx 一起配置好,再来做测试。

    2.3 Nginx 安装

    Nginx 可以算是 FastDFS 的重要搭档。

    Nginx 的安装分为两个步骤:

    • 安装 Nginx
    • 首先在 Storage 下安装 fastdfs-nginx-module

    第一步简单,松哥之前专门写过一篇文章扫盲 Nginx,所以 Nginx 安装大家直接参考这里:Nginx 极简入门教程!

    接下来看第二步。

    首先下载 fastdfs-nginx-module,下载地址:https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.22.tar.gz

    考虑到 GitHub 访问较慢,松哥已经把安装文件下载好了,放在百度网盘上,小伙伴们可以在松哥公众号后台回复 fastdfs 获取下载链接。

    下载完成后,将下载的文件拷贝到 /usr/local 目录下。然后进入 /usr/local 目录,分别执行如下命令:

    cd /usr/local
    tar -zxvf V1.22.tar.gz
    

    然后将 /usr/local/fastdfs-nginx-module-1.22/src/mod_fastdfs.conf 文件拷贝到 /etc/fdfs/ 目录下,并修改该文件的内容:

    vi /etc/fdfs/mod_fastdfs.conf
    

    接下来,回到第一步下载的 nginx 安装文件的解压目录中,执行如下命令,重新配置编译安装:

    ./configure --add-module=/usr/local/fastdfs-nginx-module-1.22/src
    make
    make install
    

    安装完成后,修改 nginx 的配置文件,如下:

    vi /usr/local/nginx/conf/nginx.conf
    

    在这里配置 nginx 请求转发。

    配置完成后,启动 nginx,看到如下日志,表示 nginx 启动成功:

    ngx_http_fastdfs_set pid=9908
    

    疑问:fastdfs-nginx-module 有啥用

    看了整个安装过程之后,很多小伙伴有疑问,到头来还是 nginx 本身直接找到了图片文件目录,fastdfs-nginx-module 到底有啥用?

    前面我们说过,Storage 由很多组构成,每个组又是一个小的集群,在每一个组里边,数据会进行同步,但是如果数据还没同步,这个时候就有请求发来了,该怎么办?此时fastdfs-nginx-module 会帮助我们直接从源 Storage 上获取文件。

    安装成功了。

    3.Java 客户端调用

    安装成功后,接下来我们就用 Java 客户端来测试一下文件上传下载。

    首先我们来创建一个普通的 Maven 工程,添加如下依赖:

    <dependency>
        <groupId>net.oschina.zcx7878</groupId>
        <artifactId>fastdfs-client-java</artifactId>
        <version>1.27.0.0</version>
    </dependency>
    

    然后,在项目的 resources 目录下添加 FastDFS 的配置文件 fastdfs-client.properties,内容如下:

    fastdfs.connect_timeout_in_seconds = 5
    fastdfs.network_timeout_in_seconds = 30
    fastdfs.charset = UTF-8
    fastdfs.http_anti_steal_token = false
    fastdfs.http_secret_key = FastDFS1234567890
    fastdfs.http_tracker_http_port = 80
    fastdfs.tracker_servers = 192.168.91.128:22122
    fastdfs.connection_pool.enabled = true
    fastdfs.connection_pool.max_count_per_entry = 500
    fastdfs.connection_pool.max_idle_time = 3600
    fastdfs.connection_pool.max_wait_time_in_ms = 1000
    

    这里的配置基本上都能见名知义,我就不挨个解释了。这里先配置下 fastdfs.tracker_servers,这是 Tracker 的地址,根据实际情况配置即可。

    fastdfs.http_secret_key 配置这里先不用管它,后面我会跟大家解释。

    3.1 文件上传

    配置完成后,先来看文件上传,代码如下:

    @Test
    void testUpload() {
        try {
            ClientGlobal.initByProperties("fastdfs-client.properties");
            TrackerClient tracker = new TrackerClient();
            TrackerServer trackerServer = tracker.getConnection();
            StorageServer storageServer = null;
            StorageClient1 client = new StorageClient1(trackerServer, storageServer);
            NameValuePair nvp[] = null;
            //上传到文件系统
            String fileId = client.upload_file1("C:\\Users\\javaboy\\Pictures\\picpick\\1.png", "png",
                    nvp);
            logger.info(fileId);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    

    这里,首先加载配置文件,然后构造一个 TrackerClient 对象,接着再根据这个对象获取到一个 TrackerServer,然后创建一个 StorageClient1 实例。NameValuePair 中保存的是文件的元数据信息,如果有的话,就以 key/value 的方式来设置,如果没有的话,直接给一个 null 即可。

    最后,调用 client 的 upload_file1 方法上传文件,第一个参数是文件路径,第二个参数是文件的扩展名,第三个参数就是文件的元数据信息,这个方法的返回值,就是上传文件的访问路径。执行该方法,打印日志如下:

    2020-02-29 17:46:03.017  INFO 6184 --- [           main] o.j.fastdfs.FastdfsApplicationTests      : group1/M00/00/00/wKhbgF5aMteAWy0gAAJkI7-2yGk361.png
    

    group1/M00/00/00/wKhbgF5aMteAWy0gAAJkI7-2yGk361.png 就是文件的路径,此时,在浏览器中输入 http://192.168.91.128/group1/M00/00/00/wKhbgF5aMteAWy0gAAJkI7-2yGk361.png 就可以看到上传的图片了。

    3.2 文件下载

    @Test
    void testDownload() {
        try {
            ClientGlobal.initByProperties("fastdfs-client.properties");
            TrackerClient tracker = new TrackerClient();
            TrackerServer trackerServer = tracker.getConnection();
            StorageServer storageServer = null;
            StorageClient1 client = new StorageClient1(trackerServer, storageServer);
            byte[] bytes = client.download_file1("group1/M00/00/00/wKhbgF5aMteAWy0gAAJkI7-2yGk361.png");
            FileOutputStream fos = new FileOutputStream(new File("C:\\Users\\javaboy\\Pictures\\picpick\\666.png"));
            fos.write(bytes);
            fos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    

    这段代码就很好理解了,直接调用 download_file1 方法获取到一个 byte 数组,然后通过 IO 流写出到本地文件即可。

    4.安全问题

    现在,任何人都可以访问我们服务器上传文件,这肯定是不行的,这个问题好解决,加一个上传时候的令牌即可。

    首先我们在服务端开启令牌校验:

    vi /etc/fdfs/http.conf
    

    配置完成后,记得重启服务端:

    ./nginx -s stop
    ./nginx
    

    接下来,在前端准备一个获取令牌的方法,如下:

    @Test
    public void getToken() throws Exception {
        int ts = (int) Instant.now().getEpochSecond();
        String token = ProtoCommon.getToken("M00/00/00/wKhbgF5aMteAWy0gAAJkI7-2yGk361.png", ts, "FastDFS1234567890");
        StringBuilder sb = new StringBuilder();
        sb.append("?token=").append(token);
        sb.append("&ts=").append(ts);
        System.out.println(sb.toString());
    }
    

    这里,我们主要是根据 ProtoCommon.getToken 方法来获取令牌,注意这个方法的第一个参数是你要访问的文件 id,**注意,这个地址里边不包含 group,千万别搞错了;**第二个参数是时间戳,第三个参数是密钥,密钥要和服务端的配置一致。

    将生成的字符串拼接,追加到访问路径后面,如:http://192.168.91.128/group1/M00/00/00/wKhbgF5aMteAWy0gAAJkI7-2yGk361.png?token=7e329cc50307000283a3ad3592bb6d32&ts=1582975854此时访问路径里边如果没有令牌,会访问失败。

    好了,大功告成!下次和大家讲我如何在 Spring Boot 中玩这个东西。

    展开全文
  • 1.HDFS(Hadoop Distributed File System )分布式文件管理系统 1.1.1 概述 在现代的企业环境中,单机容量往往无法存储大量数据,需要跨机器存储。统一管理分布在集群上的文件系统称为分布式文件系统 。 ​ HDFS...

    1.HDFS(Hadoop Distributed File System )分布式文件管理系统

    1.1.1 概述

    在现代的企业环境中,单机容量往往无法存储大量数据,需要跨机器存储。统一管理分布在集群上的文件系统称为分布式文件系统

    ​ HDFS(Hadoop Distributed File System)是 Apache Hadoop 项目的一个子项目. Hadoop 非常适于存储大型数据 (比如 TB 和 PB), 其就是使用 HDFS 作为存储系统. HDFS 使用多台计算机存储文件, 并且提供统一的访问接口, 像是访问一个普通文件系统一样使用分布式文件系统.
    分布式文件系统解决的问题就是大数据存储。它们是横跨在多台计算机上的存储系统。分布式文件系统在大数据时代有着广泛的应用前景,它们为存储和处理超大规模数据提供所需的扩展能力。
    在这里插入图片描述
    设计目标:
    1:HDFS可以解决硬件故障问题,通过副本机制
    2:不适合和用户实时交互,适合大数据量存储
    3:HDFS合适存大文件,不适合存小文件
    4:HDFS的文件数据,一旦写入,不要修改,HDFS理论上只支持追加写入,不支持随机修改

    1.1.2 架构(掌握)

    HDFS:Hadoop Distributed File System 分布式文件管理系统	
    	一个文件(不管大小为 1k 还是 1T)150字节
    	
    	架构: 主从架构,一旦主节点挂了,将无法工作.
    架构组件:
    	
    Client
    	1:对上传文件进行切片,每片128M
    	2:当客户端要上传或者下载文件时,先要和和NameNode进行交互
    	3:具体的文件上传和下载的操作是需要和DataNode之间进行交互
    	4:客户端需要提供一些命令:hadoop fs -put 
    NameNode
    	1:是HDFS的主节点,管理元数据信息
    	2:Name可以对外将每个文件都封装一个路径,用户只要访问这个路径就能下载该文件
    	3:管理每一个Block块所在的主机列表
    	4:管理副本策略,NameNode用来决定每一个副本都放在哪一台主机
    DataNode
    	1:是HDFS从节点
    	2:DataNode存储具体的数据
    	3:执行具体的数据读写操作
    	4:  定时向NameNode汇报Block块信息
    SecondaryNameNode
    	帮助NameNode管理元数据
    

    在这里插入图片描述

    1.1.3 HDFS的副本机制

    HDFS被设计成能够在一个大集群中跨机器可靠地存储超大文件。它将每个文件存储成一系列的数据块,这个数据块被称为block,除了最后一个,所有的数据块都是同样大小的。
    为了容错,文件的所有block都会有副本。每个文件的数据块大小和副本系数都是可配置的。
    所有的文件都是以 block 块的方式存放在 HDFS 文件系统当中,作用如下
    1、一个文件有可能大于集群中任意一个磁盘,引入块机制,可以很好的解决这个问题
    2、使用块作为文件存储的逻辑单位可以简化存储子系统
    3、块非常适合用于数据备份进而提供数据容错能力
    4、副本优点是安全,缺点是占空间。

    (要理解掌握哦):
    
    1.每一个文件上传时都会被切成很多个block(),每一个block最多
    		   是128M,最少1个字节,设置在hdfs.site.xml中.
    2. block只是一个逻辑单位,不够128M也算是一个block.
    3. 每一个block副本数默认为3,设置在 hdfs-site.xml中.
    		   (cd /export/server/hadoop-2.7.5/etc/hadoop/;
    		   vim hdfs-site.xml)
    		   
    例如一个 300M的文件上传到HDFS  会有3个Block
    			一个 100M的文件上传到HDFS  只有1个Block   但是都有3个副本(每一个主机上一个)
    

    在这里插入图片描述

    1.1.4 HDFS副本放置策略(机架感知)

    HDFS分布式文件系统的内部有一个副本存放策略,默认副本数为3,在这里以副本数=3为例:
    第一副本:优先放置到离写入客户端最近的DataNode节点,如果上传节点就是DataNode,则直接上传到该节点,如果是集群外提交,则随机挑选一台磁盘不太满,CPU不太忙的节点。
    第二个副本:放置在于第一个副本不同的机架的节点上(随机选择)
    第三个副本:与第二个副本相同机架的不同节点中。
    

    在这里插入图片描述

    2 .HDFS的Shell命令行使用

    2.1.1 Shell命令行客户端

    HDFS是存取数据的分布式文件系统,那么对HDFS的操作,就是文件系统的基本操作,比如文件的创建、修改、删除、修改权限等,文件夹的创建、删除、重命名等。对HDFS的操作命令类似于Linux的shell对文件的操作,如ls、mkdir、rm等。

    (要理解掌握哦):
    
    HDFS的shell命令操作:
    		-ls:
    			1.hadoop fs -ls /   显示 hdfs 下的 / 的文件列表
    			2.hadoop fs -lsr /   递归显示  会出现已经过时
    			3.hadoop fs -ls -R   递归显示  新的写法
    			
    		-mkdir:
    			1.hadoop fs -mkdir /aaa    创建文件夹
    			2.hadoop fs -mkdir -p /aaa/bbb/ccc  递归创建
    		
    		-put 上传(复制 上传本地不会消失):
    			1.hadoop fs -put a.txt(目录或者文件名字) / 
    		
    		-moveFromLocal类似put (剪切 上传本地会消失): 
    			1.hadoop fs -moveFromLocal a.txt / (了解)
    			
    		-get: 从HDFS下载文件到本地
    			1.hadoop fs -get /a.txt /root(目标路径)
    				ll -lh(linux中) : 查看文件大小
    				
    		-mv: HDFS文件之间的移动
    			1.hadoop fs -mv /a.txt(文件路径) /aaa(目标路径)
    			
    		
    		-rm: 删除 HDFS上的文件
    			1.hadoop fs -rm /a.txt 实际是移动到了回收站 指定时间可以恢复(我设置的7) 
    			2.hadoop fs -rm -r -skipTrash /ccc/ddd/ffff   递归删除
    		
    		-cp: 文件在HDFS上复制
    			1.hadoop fs -cp /a.txt  /aaa/bbb/ccc
    			
    		-cat: 显示HDFS文件的内容
    			1.hadoop fs -cat /a.txt
    			
    		-du: 显示文件或者文件夹大小
    			1.hadoop fs -du /
    			
    		-chmod: 修改HDFS文件权限
    			1.hadoop fs -chmod 777 /a.txt
    			
    		-chown: 改变HDFS所属用户和所属用户组
    			先创建用户: useradd liuafu
    			设置用户密码: passwd  123456
    			创建新的用户组: groupadd bigdata
    			
    			将a.txt的用户和用户组设置成 liuafu:bigdata
    			1.hadoop fs -chown liuafu:bigdata /a.txt
    			
    		
    		-appendToFile: 将本地小文件合并成大文件 上传到HDFS
    			1.hadoop fs -appendToFile *.txt /a.txt 
    	
    

    2.1.2 HDFS的原理

    1:NameNode内存的容量决定了整个HDFS集群的规模
       64G的内容理论上,HDFS可以存放4亿个文件
    2:DataNode是存放具体的文件数据,存放的路径是由hdfs-site.xml来设置
    

    2.1.2 HDFS的读写流程(掌握)

    写流程: 顺序写
    在这里插入图片描述

    读流程: 并发读
    在这里插入图片描述

    3. HDFS的其他功能(掌握)

    3.1 HDFS的元数据管理

    在这里插入图片描述

    3.2 Archive归档

    意义:
    1:HDFS不适合小文件存储,因为每个小文件都需要占用一条元数据
    2:如何处理这些小文件,最理想的办法是将这些小文件进行归档
    3:归档之后,我们既可以访问其中每一个小文件,又使这个归档文件只占用一条元数据
    4:以后我们还可以解压归档文件

    具体操作:

    命令: hadoop archive -archiveName test.har -p /config/outputdir
    解释:
    	hadoop archive  -archiveName 固定写法;
    	test.har 归档名字  随意  .har结尾
    	-p /config 要将哪一个文件归档  名字随意
    	/outputdir  归档后存在哪一个目录  名字随意
    
    
    具体步骤:
    1. 将hadoop配置文件的xml都上传到aaa文件夹
    	hadoop fs -put *.xml /aaa   #*.xml代表所有以xml结尾的文件
    	
    2. 将aaa文件夹下的所有小文件进行归档
    	hadoop archive -archiveName ach.har -p /aaa  /outputdir
    	此时aaa 文件夹可以删除了  因为已经归档  占空间.
    
    3: 查看归档文件中的所有小文件名字
    	hadoop fs -ls har://hdfs-afu01:8020/outputdir/ach.har
    
    4. 查看归档文件中某一个小文件的具体内容:
    	hadoop fs -cat har://hdfs-afu01:8020/outputdir/ach.har/a.txt
    	或者
    	hadoop fs -cat har:///outputdir/ach.har/core-site.xml
    
    5. 解压归档文件:
    	5.1 在HDFS的/创建一个文件夹:
    			hadoop fs -mkdir /input
    	5.2 开始解压:
    			hadoop fs -cp har:///outputdir/ach.har/* /input
    
    

    3.3 HDFS的快照功能

    意义: 快照可以帮助我们恢复原来目录文件的状态

    1、开启指定目录的快照功能
    hdfs dfsadmin  -allowSnapshot  路径 
    
    2、禁用指定目录的快照功能(默认就是禁用状态)
    hdfs dfsadmin  -disallowSnapshot  路径
    
    3、给某个路径创建快照snapshot
    hdfs dfs -createSnapshot  路径
    
    4、恢复快照
    hdfs dfs -cp -ptopax  快照路径  恢复路径
    
    5、删除快照snapshot
    hdfs dfs -deleteSnapshot <path> <snapshotName> 
    
    
    具体操作:
    	1. 开启允许快照的功能:
    			hdfs dfsadmin -allowSnapshot /input
    	2. 拍快照
    			hdfs dfs -createSnapshot /input
    			拍的快照会被保存在HDFS的.snapshot目录下,该目录为隐藏目录 看不见的		
    

    在这里插入图片描述

    3. 恢复快照
    	hdfs dfs -cp -ptopax /input/.snapshot  /input1
    
    4. 删除快照
    	hdfs dfs -deleteSnapshot <path> <snapshotName> 
    
    
    展开全文
  • 分布式文件管理系统——HDFS 什么是分布式文件系统 HDFS的优缺点 HDFS的组成 HDFS写数据流程 HDFS读数据流程 DataNode工作机制 什么是分布式文件系统 由于单机的存储能力有限,难以存储日益增长的数据,于是我们便将...

    分布式文件管理系统——HDFS

    什么是分布式文件系统
    HDFS的优缺点
    HDFS的组成
    HDFS写数据流程
    HDFS读数据流程
    DataNode工作机制
    什么是分布式文件系统
    由于单机的存储能力有限,难以存储日益增长的数据,于是我们便将数据分配到多个机器中进行存储,因此我们迫切需要一种系统方便管理和维护多台机器上的存储数据的文件,这就是分布式文件系统。HDFS只是分布式文件系统中的一种。

    HDFS的优缺点
    优点:
    1、高容错性
    (1)数据自动保存多个副本。它通过增加副本的形式,提高容错性。
    (2)某个副本丢失后,它可以自动恢复
    2、适合大数据处理
    (1)数据规模:能够处理数据规模达到GB、TB甚至PB级别的数据
    (2)文件规模:能处理百万规模以上的文件数量。
    (3)可构建在廉价的机器上,通过多副本机制,提高可靠性
    缺点:
    1、不适合低延时数据访问,比如毫秒级的数据存储是做不到的
    2、无法高效的对大量小文件进行存储
    3、不支持并发写入,文件随机修改

    HDFS的组成
    架构主要由四部分组成:Client、NameNode、DataNode、secondaryNameNode
    一、Client
    (1)文件切分。文件上传HDFS的时候,Client将文件切分成一个一个的Block,然后进行存储
    (2)与NameNode进行交互,获取文件的存储位置
    (3)与DataNode进行交互,读取或者写入数据
    二、NameNode
    (1)管理HDFS的名称空间-namespace
    (2)管理数据块(Block)的映射信息
    (3)配置副本策略,默认 3
    (4)处理客户端的请求
    三、DataNode
    (1)存储实际的数据块
    (2)执行数据块的读写操作
    四、SecondaryNameNode
    (1)辅助NameNode,分担其工作量
    (2)定期合并NameNode的fsimage和Edits,并推送给NameNode
    (3)在紧急情况辅助帮助恢复NameNode
    注:SecondaryNameNode并非NameNode的热备,在NameNode宕机的时候并不能马上替换NameNode提供服务

    展开全文
  • hadoop 分布式文件管理系统 通过管理系统,可以将文件分布式存放在不同的Linux系统上 这样的优势在于本地文件的读取过程,虽然是需要网络传输,但是更多的是本地化的运算的过程 软件的运行本质还是本地化程序的运行的...
  • FastDFS-分布式文件管理系统: FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件...
  • FastDFS简介FastDFS是由阿里巴巴采用C语言开发的轻量级的开源的分布式文件管理系统
  •   随着数据量越来越大,在一个操作系统管辖的范围内存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。HDFS只是...
  • 一款小巧的分布式文件管理系统JDFS,在一个用vmware player搭建的虚拟集群上,JDFS客户端可以把本地文件分片,并流式、冗余地存储到集群上,显示特定文件元信息,从集群上读取文件,删除文件等。
  • 1.分布式文件管理系统介绍 分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连。分布式文件系统的设计基于客户机/服务器模式。一...
  • 配置hadoop分布式文件管理系统hadoop配置 hadoop配置 配置核心文件core-site.xml 需注意tmp文件夹的位置,此处存放的是namenode的相关信息 <configuration> <property> <name>fs.defaultFS...
  • hadoop之分布式文件管理系统HDFS

    千次阅读 2020-07-02 15:10:07
    hadoop之分布式文件管理系统HDFS 0.什么是HDFS HDFS(Hadoop Distributed File System),它是一个文件系统,用于存储文件,通过目录树来定位文件;其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的...
  • 搭建hadoop分布式文件管理系统(HDFS)
  • 分布式文件系统与 HDFS数据量越来越大,在一个操作系统管辖的范围存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统 ...
  • 文章目录一、获取项目资料二、项目技术1、通用mapper2、tk.mybatis中的Example、Criteria查询对象3、公共异常的处理思维三、分布式文件管理系统1、FastDFS介绍2、文上传流程3、环境搭建4、代码实现5、文件上传、下载...
  • FastDFS概述 FastDFS是一个开源的轻量级的分布式文件系统,他对文件进行管理。功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等。解决了大量的存储和负载均衡的问题。特别适合以文件为载体的在线...
  • 12014年7月30日研究一下分布式文件管理系统 2 MQ 3 搜索
  • 分布式文件系统与 HDFS数据量越来越大,在一个操作系统管辖的范围存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统 ...
  • 分布式计算中数据存储管理的基础,是基于流数据模式访问和处理超大文件的需求而开发的,可以运行于廉价的商用服务器上 pc server高容错性 :自动保存多个副本来增加容错性 如果某一个副本丢失,HDFS机制会复制其他...
  • 现在的项目是个老项目,项目里的附件上传都是放在项目tomcat下,这样很乱影响业务系统性能还不便于迁移维护,空闲之余决定在linux上搭建一个分布式文件管理系统管理附件。这里选择了国产开源大名鼎鼎的的fastDfs。 ...
  • FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,851
精华内容 3,940
关键字:

分布式文件管理系统