精华内容
下载资源
问答
  • HDFS缓存管理操作实战

    千次阅读 2016-01-26 13:40:21
    HDFS缓存管理操作实战 Debugo 2014-12-21 232 阅读 Hadoop HDFS System HDFS提供了一个高效的缓存加速机制——Centralized Cache Management,可以将一些经常被读取的文件(例如Hive中的fact表)pin到内存...

    HDFS缓存管理操作实战

    Debugo 2014-12-21 232 阅读

    HDFS提供了一个高效的缓存加速机制——Centralized Cache Management,可以将一些经常被读取的文件(例如Hive中的fact表)pin到内存中。这些DataNode的缓存也是由NameNode所管理的(NameNode所管理的cache依然是以block形式,而DataNode也会定期向NameNode汇报缓存状态),而客户端可以高效得读取被缓存的数据块;为了能锁定内存,该实现依赖于JNI使用libhadoop.so,所以POSIX资源限制也要进行相应的设置(ulimit -l),并确保下面的参数被设置。
    1

    参数设置

    dfs.datanode.max.locked.memory
    该参数用于确定每个DataNode给缓存使用的最大内存量。设置这个参数和ulimit -l时,需要注意内存空间还需要一些内存用于做其他事情,比如,DataNode和应用程序JVM堆内存、以及操作系统的页缓存,以及计算框架的任务。所以不要使用太高的内存百分比。
    下面是可选参数,可用于调优:
    dfs.namenode.path.based.cache.refresh.interval.ms
    NameNode会使用该参数作为两次子路径缓存重复扫描的时间间隔,单位为毫秒。使用该参数来计算要缓存的块,以及每个DataNode包含一个应该被缓存的块的副本。默认为300000ms(5分钟)
    dfs.datanode.fsdatasetcache.max.threads.per.volume
    DataNode会使用这个参数作为用于缓存新数据的每个卷的最大线程数。默认为4.
    dfs.cachereport.intervalMsec
    DataNode会使用该参数作为两次发送给NameNode的缓存状态报告的时间间隔。单位为毫秒。默认为10000ms(10秒)
    dfs.namenode.path.based.cache.block.map.allocation.percent
    分配给缓存块映射占Java堆内存的百分比。缓存块映射是一个使用hash链接的hash映射。太小的映射空间会导致缓存块太大时访问太过缓慢,而大的映射空间会消耗更多内存。默认为0.25(0.25%)

    Caching Concept

    缓存指令(Cache Directive):一个指令(directive)是一个缓存的path,它可以是目录(仅包含该目录下的文件,不包含子目录),也可以是文件;指令(Directive)有一个参数replication,表示该path被缓存的副本数;另外,可以对一个文件进行多次缓存。
    缓存池(cache pool)是一个管理实体,拥有类UNIX的权限,可以限制哪个用户和组可以访问该缓存池。写权限允许用户向缓存池添加或从中删除缓存指令(directive) 。读权限允许用户列出缓存池内的缓存指令,还有其他元数据。执行权限不能被使用。缓存池也可以添加资源管理。它可以强加一个最大限制值,可以限制写入缓存池中的指令的字节数。通常,缓存池限制值之和约等于为HDFS在集群中做缓存而保留的总内存量。从缓存池中也可以获得许多统计信息,用于集群用户决定应该缓存什么。缓存池也可以强加一个TTL最大值(time to live)。缓存指令由一个唯一的无重复的64位整数ID来标识。即使缓存指令后来被删除了,ID也不会重复使用。而缓存池由一个唯一的字符串名称来标识。

    缓存管理命令—hdfs cacheadmin

    1. 缓存命令

    (1). addDirective:添加指令
    hdfs cacheadmin -addDirective -path path -pool pool-name [-force] [-replication replication] [-ttl time-to-live]
    -path 添加的路径
    -pool 加入的缓冲池名称
    -force 不检查缓存池的资源限制
    -replication 要使用的副本数,默认为1
    -ttl 缓存指令可以保持多长时间。可以按照分钟,小时,天来指定,如30m,4h,2d。有效单位为[smhd]。“never”表示永不过期的指令。如果未指定该值,那么,缓存指令就不会过期。
    (2). removeDirective:通过id删除指令
    hdfs cacheadmin -removeDirective id
    (3). removeDirectives:删除执行path下所有缓存命令
    hdfs cacheadmin -removeDirective path
    (4). listDirectives:显示某一路径下的缓存信息
    hdfs cacheadmin -listDirectives [-stats] [-path path] [-pool pool]
    -stats 显示 列出基于path的缓存指令统计信息。
    2. 缓存池命令
    (1). 添加/修改缓存池:addPool/modifyPool
    hdfs cacheadmin -addPool name [-owner owner] [-group group] [-mode mode] [-limit limit] [-maxTtl maxTtl]
    hdfs cacheadmin -modifyPool name [-owner owner] [-group group] [-mode mode] [-limit limit] [-maxTtl maxTtl]
    其中,
    -owner/group是该pool的属主/组,默认为当前用户
    -mode是POSIX风格权限,默认为0755
    -limit为该pool中可以缓存的最大字节数,默认没有限制
    -maxTtl 最大的生存期,可以是120s, 30m, 4h, 2d等。
    (2). 移除缓冲池:removePool
    hdfs cacheadmin -removePool name
    (3). 列出缓冲池:listPools
    hdfs cacheadmin -listPools [-stats] [name]
    -stats为显示统计信息

    3. 命令实战

    当前参数设置:
    2

    #创建缓存组,默认为cache_data
    hdfs cacheadmin -addPool cache_data -mode 0777
    Successfully added cache pool cache_data.
    #生成一个1GB大小的文件
    dd if=/dev/zero of=/tmp/test.zero bs=1M count=1024
    +0 records in
    +0 records out
    24 bytes (1.1 GB) copied, 1.25545 s, 855 MB/s
    hdfs dfs -put /tmp/test.zero /data
    #生成缓存指令
    hdfs cacheadmin -addDirective -path /data -pool cache_data -ttl 1d
    Added cache directive 1
    #显示缓存池的信息
    hdfs cacheadmin -listPools -stats cache_data
    Found 1 result.
    NAME        OWNER  GROUP  MODE            LIMIT  MAXTTL  BYTES_NEEDED  BYTES_CACHED  BYTES_OVERLIMIT  FILES_NEEDED  FILES_CACHED
    cache_data  hdfs   hdfs   rwxrwxrwx   unlimited   never    1073741824    1073741824                0             1             1
    #统计信息,显示EXP Date
    hdfs cacheadmin -listDirectives -path /data
    
    Found 1 entry
     ID POOL         REPL EXPIRY                    PATH  
     cache_data      1 2014-12-22T15:38:31+0800  /data
    #删除缓存指令和缓存池
    hdfs cacheadmin -removeDirectives -path /data
    Removed cache directive 1
    Removed every cache directive with path /data
    hdfs cacheadmin -removePool cache_data
    Successfully removed cache pool cache_data.

    官方文档http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/CentralizedCacheManagement.html
    网上有位大大的译文:http://www.cnblogs.com/zhangningbo/p/4146398.html
    性能对比和原理描述,可以参考Hadoop Summit 2014的slide
    http://www.slideshare.net/Hadoop_Summit/inmemory-caching-in-hdfs-lower-latency-same-great-taste-33921794
    其中wordcount的对比:
    3

    展开全文
  • HDFS缓存用的是缓存块,HDFS缓存块用的是普通的文件块转换而来,也可以转换回去。缓存使用的是DataNode内存作为缓存。 本节以疑问点的形式分析缓存块: 物理层面缓存块是怎样的? 缓存块的生命周期状态有哪几种...

    HDFS 缓存与缓存块

          HDFS缓存用的是缓存块,HDFS缓存块用的是普通的文件块转换而来,也可以转换回去。缓存使用的是DataNode内存作为缓存。

         本节以疑问点的形式分析缓存块:

    1. 物理层面缓存块是怎样的?
    2. 缓存块的生命周期状态有哪几种?
    3. 哪些情况会触发缓存块、取消缓存块的操作?
    4. CacheBlock UnCacheBlock 缓存块如何确定?
    5. 系统所持有的缓存块列表如何更新?
    6. 缓存块如何被使用?

     

    1.HDFS 物理层面缓存块

    利用mmap、mlock系统调用将块数据锁入内存。

    mmap是将一个文件或其他对象映射进内存。代码实现如下:

    // 加载并映射块到内存,然后检查其checksum
    public static MappableBlock load(long length,
    		FileInputStream blockIn, FileInputStream metaIn,
    		String blockFileName) throws IOException {
    	MappableBlock mappableBlock = null;
    	MappedByteBuffer mmap = null;
    	FileChannel blockChannel = null;
    	try {
    		//获取块数据的FileChannel对象
    		blockChannel = blockIn.getChannel();
    		if(blockChannel == null) {
    			throw new IOException("Block InputStream has no FileChannel.");
    		}
    		//这里开始进行内存的映射操作
    		mmap = blockChannel.map(MapMode.READ_ONLY, 0, length);
    		NativeIO.POSIX.getCacheManipulator().mlock(blockFileName, mmap, length);
    		verifyChecksum(length, metaIn, blockChannel, blockFileName);
    		mappableBlock = new MappableBlock(mmap, length);
    	} finally {
    		IOUtils.closeQuietly(blockChannel);
    		if(mappableBlock == null) {
    			if (mmap != null) {
    				//解除地址区域的对象映射
    				NativeIO.POSIX.munmap(mmap);
    			}
    		}
    	}
    	return mappableBlock;
    }

     

    2.缓存块的生命周期状态

    FSDatasetCache#State, FSDatasetCache#Value, FSDatasetCache#[un]cacheBlock

    四种状态:

    CACHING:缓存中状态

    CACHING_CANCELLED:缓存中的块处于取消缓存状态

    CACHED:缓存状态

    UNCACHING:取消缓存状态

    一种结构(缓存映射图):

    Hash<ExtendedBlockId, Value> mappableBlockMap;

    ExtendedBlockId(blockId, bpid)----bpid:BlockPoolId

    两个方法:

    将文件块信息传入CachingTask/UncachingTask中异步执行

        FSDatasetCache#cacheBlock:添加缓存块

        FSDatasetCache#uncacheBlock:取消缓存块,根据不同状态作不同取消逻辑。

        CACHING---->CACHING_CANCELLED

        CACHED ----->UNCACHING

    3.CacheBlock UnCacheBlock 场景触发(eclipese中open call查看别调用情况)

    CacheBlock动作

    来自NameNode的回复命令

    (BPOfficeService#processCommandFromActive()中DatanodeProtocol.DNA_CACHE)

    UnCacheBlock动作有三种:

    1. 当缓存块执行append写操作时
    2. 把块处理为无效块时
    3. 上层NameNode发送uncache回复命令时

    4.CacheBlock UnCacheBlock 缓存块的确定

         dn.getFSDataset().[un]cache(blockIdCmd.getBlockPoolId(),  blockIdCmd.getBlockIds());

         blockIdCmd是NameNode的回复命令,查看DatanodeManager#handleHeartbeat()中addCacheCommands()函数的调用,其中有获取pendingCacheCommand与pengdingUncacheCommand这两个变量的值,用来更新cmds这个List<DatanodeCommand>对象。

                                                   

                                                                             图 缓存块的确定流程图

     

    5.系统持有的缓存块列表如何更新

               

                                                     图 缓存块列表更新的主类CacheReplicationMonitor

    两条缓存的规则:

    1. 尽量多缓存副本数不足的副本
    2. 移除掉副本数过多的多余缓存

     

    6.缓存块的使用

                                                                                         图 缓存机制流程图

    7.HDFS 缓存相关配置

    <property>

    <name>dfs.datanode.max.locked.memory</name>

    <value>0</value>

    <description> DataNode 用来缓存块的最大内存空间大小 单位用字节表示 系统变量RLIMIT MEMLOCK 至少需要设置得比此配置值要大 否则 DataNode 会出现启动失败的现象 在默认的情况下,此配置值为 表明默认关闭内存缓存的功能</description>

    </property>

     

    在FSDatasetCache的构造函数中会获取这个值,默认是0,表示关闭状态。

    注意:

    1. 此配置项会受系统最大可使用内存大小( RLIMIT _ MEMLOCK )的影响,造成DataNode启动失败,输入错误:configured max locked memorysize...is more than RLIMIT_MEMLOCK.可以通过 ulimit -l <value>命令修改或配置文件/etc/security/limits.conf.
    2. 缓存块与 HDFS LAZY_PERSIST 策略会共享 dfs.datanode.max.locked.memory 配置.

    与HDFS缓存块相关的配置参数:

         dfs.datanode.fsdatasetcache.max.threads.per.volume:用于缓存块数据的最大线程数,默认值为4

         dfs.cachereport.intervalMsec 缓存块上报间隔,默认 10秒

     

    展开全文
  • 为impala开启HDFS缓存

    2021-04-13 18:25:32
    HDFS缓存 集中式缓存管理,由Datanode堆外内存组成,Namenode统一管理 优点: 阻止频繁使用的数据从内存中删除 由于是Namenode统一管理,因此在读可以根据情况调度,提高读性能 客户端可以通过零拷贝技术直接读取...

    HDFS缓存

    集中式缓存管理,由Datanode堆外内存组成,Namenode统一管理

    优点:

    • 阻止频繁使用的数据从内存中删除
    • 由于是Namenode统一管理,因此在读可以根据情况调度,提高读性能
    • 客户端可以通过零拷贝技术直接读取缓存数据
    • 提高集群内存利用率,读某个文件的时候会将

    解决步骤

    • 查看是否开启缓存
      在这里插入图片描述

    • 查看当前是否存在缓存池

    hdfs cacheadmin -listPools
    
    • 创建HDFS缓冲池
    hdfs cacheadmin -addPool idnmk -owner hive
    
    • 设置高速缓存副本
    alter table idnmk.t70_idn_loan_rate set cached in 'idnmk' with replication = 3;
    
    • 查看表状态
    show table stats idnmk.t70_idn_loan_rate;
    
    • 查看HDFS高速缓存池里文件的状态
    hdfs cacheadmin -listPools -stats idnmk
    

    在这里插入图片描述

    展开全文
  • Hadoop 从2.3.0版本开始,对HDFS加入了一个新特性:集中式的缓存管理(HDFS centralized cache management)。这个功能对于提升Hadoop系统和上层应用的执行效率与实时性有很大帮助,本文从原理、架构和代码剖析三个...

    Hadoop 从2.3.0版本开始,对HDFS加入了一个新特性:集中式的缓存管理(HDFS centralized cache management)。这个功能对于提升Hadoop系统和上层应用的执行效率与实时性有很大帮助,本文从原理、架构和代码剖析三个角度来探讨这一功能。

    主要解决了哪些问题

    1. 用户可以根据自己的逻辑指定一些经常被使用的数据或者高优先级任务对应的数据,让他们常驻内存而不被淘汰到磁盘。例如在Hive或Impala构建的数据仓库应用中fact表会频繁地与其他表做JOIN,显然应该让fact常驻内存,这样DataNode在内存使用紧张的时候也不会把这些数据淘汰出去,同时也实现了对于 mixed workloads的SLA。
    2. centralized cache是由NameNode统一管理的,那么HDFS client(例如MapReduce、Impala)就可以根据block被cache的分布情况去调度任务,做到memory-locality。
    3. HDFS原来单纯靠DataNode的OS buffer cache,这样不但没有把block被cache的分布情况对外暴露给上层应用优化任务调度,也有可能会造成cache浪费。例如一个block的三个replica分别存储在三个DataNote 上,有可能这个block同时被这三台DataNode的OS buffer cache,那么从HDFS的全局看就有同一个block在cache中存了三份,造成了资源浪费。
    4. 加快HDFS client读速度。过去NameNode处理读请求时只根据拓扑远近决定去哪个DataNode读,现在还要加入speed的因素。当HDFS client和要读取的block被cache在同一台DataNode的时候,可以通过zero-copy read直接从内存读,略过磁盘I/O、checksum校验等环节。
    5. 即使数据被cache的DataNode节点宕机,block移动,集群重启,cache都不会受到影响。因为cache被NameNode统一管理并被被持久化到FSImage和EditLog,如果cache的某个block的DataNode宕机,NameNode会调度其他存储了这个replica的DataNode,把它cache到内存。

    基本概念

    cache directive: 表示要被cache到内存的文件或者目录。 
    cache pool: 用于管理一系列的cache directive,类似于命名空间。同时使用UNIX风格的文件读、写、执行权限管理机制。命令例子:

    hdfs cacheadmin -addDirective -path /user/hive/warehouse/fact.db/city -pool financial -replication 1

    以上代码表示把HDFS上的文件city(其实是Hive上的一个fact表)放到HDFS centralized cache的financial这个cache pool下,而且这个文件只需要被缓存一份。

    系统架构与原理


    用户可以通过hdfs cacheadmin命令行或者HDFS API显式指定把HDFS上的某个文件或者目录放到HDFS centralized cache中。这个centralized cache由分布在每个DataNode节点的off-heap内存组成,同时被NameNode统一管理。每个DataNode节点使用mmap/mlock把存储在磁盘文件中的HDFS block映射并锁定到off-heap内存中。


    DFSClient读取文件时向NameNode发送getBlockLocations RPC请求。NameNode会返回一个LocatedBlock列表给DFSClient,这个LocatedBlock对象里有这个block的replica所在的DataNode和cache了这个block的DataNode。可以理解为把被cache到内存中的replica当做三副本外的一个高速的replica。

    注:centralized cachedistributed cache的区别:

    distributed cache将文件分发到各个DataNode结点本地磁盘保存,并且用完后并不会被立即清理的,而是由专门的一个线程根据文件大小限制和文件数目上限周期性进行清理。本质上distributed cache只做到了disk locality,而centralized cache做到了memory locality

    实现逻辑与代码剖析

    HDFS centralized cache涉及到多个操作,其处理逻辑非常类似。为了简化问题,以addDirective这个操作为例说明。

    1.NameNode处理逻辑


    NameNode内部主要的组件如图所示。FSNamesystem里有个CacheManager是centralized cache在NameNode端的核心组件。我们都知道BlockManager负责管理分布在各个DataNode上的block replica,而CacheManager则是负责管理分布在各个DataNode上的block cache。

    DFSClient给NameNode发送名为addCacheDirective的RPC, 在ClientNamenodeProtocol.proto这个文件中定义相应的接口。

    NameNode接收到这个RPC之后处理,首先把这个需要被缓存的Path包装成CacheDirective加入CacheManager所管理的directivesByPath中。这时对应的File/Directory并没有被cache到内存。

    一旦CacheManager那边添加了新的CacheDirective,触发CacheReplicationMonitor.rescan()来扫描并把需要通知DataNode做cache的block加入到CacheReplicationMonitor. cachedBlocks映射中。这个rescan操作在NameNode启动时也会触发,同时在NameNode运行期间以固定的时间间隔触发。

    Rescan()函数主要逻辑如下:

    rescanCacheDirectives()->rescanFile():依次遍历每个等待被cache的directive(存储在CacheManager. directivesByPath里),把每个等待被cache的directive包含的block都加入到CacheReplicationMonitor.cachedBlocks集合里面。

    rescanCachedBlockMap():调用CacheReplicationMonitor.addNewPendingCached()为每个等待被cache的block选择一个合适的DataNode去cache(一般是选择这个block的三个replica所在的DataNode其中的剩余可用内存最多的一个),加入对应的DatanodeDescriptor的pendingCached列表。

    2.NameNode与DataNode的RPC逻辑

    DataNode定期向NameNode发送heartbeat RPC用于表明它还活着,同时DataNode还会向NameNode定期发送block report(默认6小时)和cache block(默认10秒)用于同步block和cache的状态。

    NameNode会在每次处理某一DataNode的heartbeat RPC时顺便检查该DataNode的pendingCached列表是否为空,不为空的话发送DatanodeProtocol.DNA_CACHE命令给具体的DataNode去cache对应的block replica。

    3.DataNode处理逻辑


    DataNode内部主要的组件如图所示。DataNode启动的时候只是检查了一下dfs.datanode.max.locked.memory是否超过了OS的限制,并没有把留给Cache使用的内存空间锁定。

    在DataNode节点上每个BlockPool对应有一个BPServiceActor线程向NameNode发送heartbeat、接收response并处理。如果接收到来自NameNode的RPC里面的命令是DatanodeProtocol.DNA_CACHE,那么调用FsDatasetImpl.cacheBlock()把对应的block cache到内存。

    这个函数先是通过RPC传过来的blockId找到其对应的FsVolumeImpl (因为执行cache block操作的线程cacheExecutor是绑定在对应的FsVolumeImpl里的);然后调用FsDatasetCache.cacheBlock()把这个block封装成MappableBlock加入到mappableBlockMap里统一管理起来,然后向对应的FsVolumeImpl.cacheExecutor线程池提交一个CachingTask异步任务(cache的过程是异步执行的)。

    FsDatasetCache有个成员mappableBlockMap(HashMap)管理着这台DataNode的所有的MappableBlock及其状态(caching/cached/uncaching)。目前DataNode中”哪些block被cache到内存里了”也是只保存了soft state(和NameNode的block map一样),是DataNode向NameNode 发送heartbeat之后从NameNode那问回来的,没有持久化到DataNode本地硬盘。

    CachingTask的逻辑: 调用MappableBlock.load()方法把对应的block从DataNode本地磁盘通过mmap映射到内存中,然后通过mlock锁定这块内存空间,并对这个映射到内存的block做checksum检验其完整性。这样对于memory-locality的DFSClient就可以通过zero-copy直接读内存中的block而不需要校验了。

    4.DFSClient读逻辑:

    HDFS的读主要有三种: 网络I/O读 -> short circuit read -> zero-copy read。网络I/O读就是传统的HDFS读,通过DFSClient和Block所在的DataNode建立网络连接传输数据。

    当DFSClient和它要读取的block在同一台DataNode时,DFSClient可以跨过网络I/O直接从本地磁盘读取数据,这种读取数据的方式叫short circuit read。目前HDFS实现的short circuit read是通过共享内存获取要读的block在DataNode磁盘上文件的file descriptor(因为这样比传递文件目录更安全),然后直接用对应的file descriptor建立起本地磁盘输入流,所以目前的short circuit read也是一种zero-copy read。

    增加了Centralized cache的HDFS的读接口并没有改变。DFSClient通过RPC获取LocatedBlock时里面多了个成员表示哪个DataNode把这个block cache到内存里面了。如果DFSClient和该block被cache的DataNode在一起,就可以通过zero-copy read大大提升读效率。而且即使在读取的过程中该block被uncache了,那么这个读就被退化成了本地磁盘读,一样能够获取数据。

    对上层应用的影响

    对于HDFS上的某个目录已经被addDirective缓存起来之后,如果这个目录里新加入了文件,那么新加入的文件也会被自动缓存。这一点对于Hive/Impala式的应用非常有用。

    HBase in-memory table:可以直接把某个HBase表的HFile放到centralized cache中,这会显著提高HBase的读性能,降低读请求延迟。

    和Spark RDD的区别:多个RDD的之间的读写操作可能完全在内存中完成,出错就重算。HDFS centralized cache中被cache的block一定是先写到磁盘上的,然后才能显式被cache到内存。也就是说只能cache读,不能cache写。

    目前的centralized cache不是DFSClient读了谁就会把谁cache,而是需要DFSClient显式指定要cache谁,cache多长时间,淘汰谁。目前也没有类似LRU的置换策略,如果内存不够用的时候需要client显式去淘汰对应的directive到磁盘。

    现在还没有跟YARN整合,需要用户自己调整好留给DataNode用于cache的内存和NodeManager的内存使用。


    展开全文
  • HDFS中心缓存管理

    万次阅读 2016-05-22 19:45:35
    前言众所周知,HDFS作为一个分布式文件系统.存储着海量的数据,每天的IO读写操作次数当然是非常高的.所以在之前的文章中,我们提到了用HDFS的异构存储来做冷热数据的分类存储,但比较好的一点是,他们还是隶属于同一个...
  • 集中的HDFS缓存管理,该机制可以让用户缓存特定的hdfs路径,这些块缓存在堆外内存中。namenode指导datanode完成这个工作。Centralized cache management in HDFS has many significant advantages.Explicit pinning ...
  • HDFS 中心缓存管理 中心缓存管理器(CacheManager)和缓存块监控服务(CacheReplicationMonitor) 适用场景、中心缓存管理的原理、命令使用。 1.HDFS 缓存适用场景 公共资源文件 短期临时的热 数据文件 2.HDFS...
  • HDFS缓存机制 问:请描述HDFS的缓存机制。 答: HDFS提供了一个高效的缓存加速机制—— Centralized Cache Management ,它允许用户指定要缓存的HDFS路径。NameNode会和保存着所需Block数据的所有DataNode通信,并...
  • 转载:http://dongxicheng.org/mapreduce-nextgen/hadoop-distributedcache-details/  ...HDFS提供了一个高效的缓存加速机制—— Centralized Cache Management ,可以将一些经常被读取的文件(例如
  • HDFS缓存配置和使用 一、 概述 HDSF缓存是hadoop自带的一个数据缓存机制,可以将常用的数据缓存到内存中,这样查询数据不必从磁盘中获取数据,减少了IO传输时间,对查询性能有一定的提升,在实际测试中,impala...
  • 1.1 Hadoop-impala十大优化之(8)—HDFS缓存最佳实践 1) HDFS缓存的Impala的概述 2) 设置缓存为HDFS的Impala 3) 使用HDFS的Impala表和分区缓存 ...5) HDFS的缓存管理和Impala 6) HDFS的缓
  • HDFS集中化缓存管理

    千次阅读 2015-11-25 12:12:56
    1.HDFS集中化缓存管理具有哪些优势? 2.HDFS中的集中化缓存管理有哪些使用场景? 3.缓存管理有哪些命令? 概述 HDFS中的集中化缓存管理是一个明确的缓存机制,它允许用户指定要缓存的HDFS路径。NameNode会...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,464
精华内容 12,585
关键字:

hdfs缓存管理