• Spark终结


    1 一、介绍Alluxio
    2 
    3 Tachyon正式改名为alluxio,并发布v1.0.0版本,alluxio是内存高速虚拟分布式存储系统。
    4 
    5 Alluxio是一个以内存为中心的虚拟分布式存储系统,统一数据访问和桥梁的计算框架和底层存储系统。应用程序只需要alluxio就可以把访问存储在任何底层存储系统的数据连接。此外,Alluxio以内存为中心的架构实现数据访问的数量级的速度比现有的解决方案快很多。
    6 
    7 在大数据的生态系统,Alluxio在于计算框架或jobs之间,如Apache的Spark,Apache的 MapReduce,或Apache Flink,和各种各样的存储系统,如Amazon S3,OpenStack Swift,GlusterFS, HDFS,Ceph,或OSS。Alluxio带来显着的改善生态系统的性能;例如,百度使用alluxio提高加速数据分 析管道30倍的吞吐量。

    一、Alluxio是什么?

            Alluxio是一个基于内存的分布式文件系统,它是架构在底层分布式文件系统和上层分布式计算框架之间的一个中间件,主要职责是以文件形式在内存或其它存储设施中提供数据的存取服务。

            Alluxio的前身为Tachyon。

     

      二、Alluxio应用场景

            Alluxio居于传统大数据存储(如:Amazon S3,Apache HDFS和OpenStack Swift等)和大数据计算框架(如Spark,Hadoop Mapreduce)之间,如下图所示:

        在大数据领域,最底层的是分布式文件系统,如Amazon S3、Apache HDFS等,而较高层的应用则是一些分布式计算框架,如Spark、MapReduce、HBase、Flink等,这些分布式框架,往往都是直接从分布式文件系统中读写数据,效率比较低,性能消耗比较大。而如果我们将其架构与底层分布式文件系统与上层分布式计算框架之间,以文件的形式在内存中对外提供读写访问服务的话,那么Alluxio可以为那些大数据应用提供一个数量级的加速,而且它只要提供通用的数据访问接口,就能很方便的切换底层分布式文件系统。

            三、Alluxio系统架构

            与其他诸如HDFS、HBase、Spark等大数据相关框架一致,Alluxio也是一个主从结构的系统。它的主节点为Master,负责管理全局的文件系统元数据,比如文件系统树等,而从节点为Worker,负责管理本节点数据存储服务。另外,Alluxio还有一个组件为Client,为用户提供统一的文件存取服务接口。

            当应用程序需要访问Alluxio时,通过客户端先与主节点Master通讯,或许对应文件的元数据,然后再和对应Worker节点通讯,进行实际的文件存取操作。所有的Worker会周期性地发送心跳给Master,维护文件系统元数据信息和确保自己被Master感知扔在集群中正常提供服务,而Master不会主动发起与其他组件的通信,它只是以回复请求的方式与其他组件进行通信。这与HDFS、HBase等分布式系统设计模式是一致的。


    Alluxio详解

    二、现有的特性

    (1)、灵活的文件API

    Alluxio的原生API与java.io.file类InputStream和OutputStream接口相似,提供高效的支持内存映射的I/O,我们推荐使用这个API来获得 最好的性能alluxio。另外,alluxio提供Hadoop兼容的文件系统接口,允许Hadoop MapReduce和Spark使用alluxio代替HDFS。

    (2)、支持可插拔存储

    (3)、分层存储

    (4)、统一命名空间

    (5)、血统

    (6)、WebUI和命令行

    三、Alluxio层次化存储简介

            一)、分层存储种类

            1、MEM (内存)

            2、SSD (固态硬盘)

            3、HDD (硬盘驱动器)


            二)、分层存储参数
            
            1、alluxio.worker.tieredstore.levels,缺省值1

             Alluxio Worker多层存储中的最大存储级数。当前Alluxio支持1,2,3层。
            
            2、alluxio.worker.tieredstore.level{x}.alias,缺省值MEM (for alluxio.worker.tieredstore.level0.alias)

            每个存储层的别名,x代表存储层序号(顶层为0)。当前有3个别名,MEM,SSD和HDD。

            3、alluxio.worker.tieredstore.level{x}.dirs.path,缺省值/mnt/ramdisk (for alluxio.worker.tieredstore.level0.dirs.path)

            x存储层的底层存储目录路径,以逗号分割。x代表存储层序号(顶层为0)。建议SSD和HDD层每个硬盘设备有一个存储目录。

            4、alluxio.worker.tieredstore.level{x}.dirs.quota,缺省值128MB (for alluxio.worker.tieredstore.level0.dirs.quota)

            x存储层所有存储目录的配额,以逗号分割。x代表存储层序号(从0开始)。对于特定的存储层,如果配额的列表长度比目录列表短,剩余目录的配额使用最后一个定义的配额。配额定义可使用这些后缀:KB,MB,GB,TB,PB。

            5、alluxio.worker.tieredstore.level{x}.reserved.ratio,缺省值0.1

            值在0到1之间,设置了在x存储层预留空间的比例。如果预留空间大小不满足,空间预留器会移出数据块直到预留空间大小满足要求。

            6、alluxio.worker.tieredstore.reserver.enabled,缺省值false

            开启空间预留器服务的标志。

            7、alluxio.worker.tieredstore.reserver.interval.ms
            1000

            空间预留器检查所有存储层是否预留足够空间的时间间隔。

            8、alluxio.worker.allocator.class,缺省值alluxio.worker.block.allocator.MaxFreeAllocator

            Alluxio中新数据块分配策略的类名。

            9、alluxio.worker.evictor.class,缺省值alluxio.worker.block.evictor.LRUEvictor

            当存储层空间用尽时块回收策略的类名。


            三)、分配策略:选择新数据块的写入位置

            1、贪心分配策略

            分配新数据块到首个有足够空间的存储目录。


            2、最大剩余空间分配策略

            分配数据块到有最大剩余空间的存储目录。
            

            3、轮询调度分配策略

            分配数据块到有空间的最高存储层,存储目录通过轮询调度选出。


            四)、回收策略:决定当空间需要释放时,哪些数据块被移到低存储层。

            1、贪心回收策略

            移出任意的块直到释放出所需大小的空间。

            2、LRU回收策略

            移出最近最少使用的数据块直到释放出所需大小的空间。

            3、LRFU回收策略

             基于权重分配的最近最少使用和最不经常使用策略移出数据块。如果权重完全偏向最近最少使用,LRFU回收策略退化为LRU回收策略。

            4、部分LRU回收策略

            基于最近最少使用移出,但是选择有最大剩余空间的存储目录(StorageDir),只从该目录移出数据块。


            五)、举例

            举例而言,如果想要配置Alluxio有两级存储–内存和硬盘–,可以使用如下配置:

            alluxio.worker.tieredstore.levels=2 在Alluxio中配置了两级存储

            alluxio.worker.tieredstore.level0.alias=MEM配置了首层(顶层)是内存存储层

            alluxio.worker.tieredstore.level0.dirs.path=/mnt/ramdisk 定义了/mnt/ramdisk是首层的文件路径

            alluxio.worker.tieredstore.level0.dirs.quota=100GB设置了ramdisk的配额是100GB

            alluxio.worker.tieredstore.level0.reserved.ratio=0.2设置了顶层的预留空间比例是0.2

            alluxio.worker.tieredstore.level1.alias=HDD配置了第二层是硬盘驱动器层

            alluxio.worker.tieredstore.level1.dirs.path=/mnt/hdd1,/mnt/hdd2,/mnt/hdd3配置了第二层3个独立的文件路径

            alluxio.worker.tieredstore.level1.dirs.quota=2TB,5TB,500GB定义了第二层3个文件路径各自的配额

            alluxio.worker.tieredstore.level1.reserved.ratio=0.1设置了第二层的预留空间比例是0.1

  • 相关阅读:
    异步请求 ajax的使用详解
    关于JAVA-JS-JSP之间传值的各种方法
    C# 对List<T>取交集、连集及差集
    MVC解决方案发布IIS 登录页面需要输入两次帐号问题
    sqlserver查看被锁表、解锁
    C#中using关键字的作用及用法
    Bootstrap组件On和Off语法
    HtmlString类创建HTML Hepler 扩展MVC TextBox组件
    Js运算符优先级
    ajax调用webservice(二) 跨域。
  • 原文地址:https://www.cnblogs.com/Vowzhou/p/11021266.html
Copyright © 2020-2023  润新知