【Hadoop学习】HDFS中的集中化缓存管理

Hadoop版本:2.6.0

本文系从官方文档翻译而来,转载请尊重译者的工作,注明以下链接:

http://www.cnblogs.com/zhangningbo/p/4146398.html

概述

HDFS中的集中化缓存管理是一个明确的缓存机制,它允许用户指定要缓存的HDFS路径。NameNode会和保存着所需快数据的所有DataNode通信,并指导他们把块数据缓存在off-heap缓存中。

HDFS集中化缓存管理具有许多重大优势:

1.明确的锁定可以阻止频繁使用的数据被从内存中清除。当工作集的大小超过了主内存大小(这种情况对于许多HDFS负载都是司空见惯的)时,这一点尤为重要。

2.由于DataNode缓存是由NameNode管理的,所以,在确定任务放置位置时,应用程序可以查询一组缓存块位置。把任务和缓存块副本放在一个位置上可以提高读操作的性能。

3.当块已经被DataNode缓存时,客户端就可以使用一个新的更高效的零拷贝读操作API。因为缓存数据的checksum校验只需由DataNode执行一次,所以,使用这种新API时,客户端基本上不会有开销。

4.集中缓存可以提高整个集群的内存使用率。当依赖于每个DataNode上操作系统的buffer缓存时,重复读取一个块数据会导致该块的N个副本全部被送入buffer缓存。使用集中化缓存管理,用户就能明确地只锁定这N个副本中的M个了,从而节省了N-M的内存量。

使用场景

集中化缓存管理对于重复访问的文件很有用。例如,Hive中的一个较小的fact表(常常用于joins操作)就是一个很好的缓存对象。另一方面,对于一个全年报表查询的输入数据做缓存很可能就没有多大作用了,因为,历史数据只会读取一次。

集中化缓存管理对于带有性能SLA的混合负载也很有用。缓存正在使用的高优先级负载可以保证它不会和低优先级负载竞争磁盘I/O。

架构

在这个架构中,NameNode负责协调集群中所有DataNode的off-heap缓存。NameNode周期性地接收来自每个DataNode的缓存报告(其中描述缓存在给定DN中的所有块)。NameNode通过借助DataNode心跳上的缓存和非缓存命令来管理DataNode缓存。

NameNode查询自身的缓存指令集来确定应该缓存那个路径。缓存指令永远存储在fsimage和edit日志中,而且可以通过Java和命令行API被添加、移除或修改。NameNode还存储了一组缓存池,它们是用于把资源管理类和强制权限类的缓存指令进行分组的管理实体。

NameNode周期性地重复扫描命名空间和活跃的缓存指定以确定需要缓存或不缓存哪个块,并向DataNode分配缓存任务。重复扫描也可以又用户动作来触发,比如,添加或删除一条缓存指令,或者删除一个缓存池。

当前,我们不缓存construction、corrupt下的块数据,或者别的不完整的块。如果一条缓存指令包含一个符号链接,那么该符号链接目标不会被缓存。

当前,我们只实现了文件或目录级的缓存。块和子块缓存是未来的目标。

概念

缓存指令

缓存池

缓存管理命令接口

缓存管理命令

addDirective

removeDirective

removeDirectives

listDirectives

缓存池命令

addPool

modifyPool

removePool

listPools

help

配置

本地库

为了把块文件锁定在内存,DataNode需要依赖本地JNI代码(Linux系统为libhadoop.so,Windows系统为hadoop.dll)。如果你正在使用HDFS集中化缓存管理,请确保使能JNI

配置属性

必选属性

属性名称 默认值 描述
dfs.datanode.max.locked.memory   该参数用于确定DataNode给缓存使用的最大内存量。DataNode用户的“locked-in-memory size”ulimit(ulimit -l)也需要增加以匹配该参数(详见下文OS限制)。当设置了该值时,请记住你还需要一些内存空间用于做其他事情,比如,DataNode和应用程序JVM堆内存、以及操作系统的页缓存。

可选属性

以下属性不是必选的,但可能用于调优:

属性名称 默认值 描述
dfs.namenode.path.based.cache.refresh.interval.ms 300000 NameNode使用该参数作为两次子路径缓存重复扫描的动作之间的时间间隔,单位为毫秒。该参数计算要缓存的块和每个DataNode包含一个该块应当缓存的副本。
dfs.datanode.fsdatasetcache.max.threads.per.volume 4 DataNode使用该参数作为缓存新数据时每个卷要用的最大线程数。
dfs.cachereport.intervalMsec 10000 DataNode使用该参数作为两次发送缓存状态报告给NameNode的动作之间的时间间隔。单位为毫秒。
dfs.namenode.path.based.cache.block.map.allocation.percent 0.25 分配给已缓存块映射的Java堆内存的百分比。它是hash map,使用链式hash。如果缓存块的数目很大,那么map越小,访问速度越慢;map越大,消耗的内存越多。

OS限制

如果你遇到错误“Cannot start datanode because the configured max locked memory size... is more than the datanode‘s available RLIMIT_MEMLOCK ulimit,”,就意味着操作系统对用户可以锁定的内存使用量强加了一个限制,该限制值比用户设置的值更低一些。要修复这个问题,必须使用“ulimit -l”命令来调整DataNode运行需要锁定的内存值。通常,该值是在/etc/security/limits.conf文件中配置的。然而,它也会因用户所用的操心系统和分发版的不同而变化。

当你从shell中运行“ulimit -l”并得到一个比你用属性dfs.datanode.max.locked.memory设置的值更高的值,或者字符串“ulimited”(表示没有限制)时,你就会明白你已经正确配置了该值。值得注意的是,ulimit -l命令通常以KB为单位输出内存锁定限制值,但是dfs.datanode.max.locked.memory的值必须以字节为单位。

这些信息不适用于Windows环境部署。Windows没有和“ulimit -l”相对应的命令。

时间: 2025-01-08 11:09:14

【Hadoop学习】HDFS中的集中化缓存管理的相关文章

Hadoop 学习 HDFS

1.HDFS的设计 HDFS是什么:HDFS即Hadoop分布式文件系统(Hadoop Distributed Filesystem),以流式数据访问模式来存储超大文件,运行于商用硬件集群上,是管理网络中跨多台计算机存储的文件系统. HDFS不适合用在:要求低时间延迟数据访问的应用,存储大量的小文件,多用户写入,任意修改文件. 2.HDFS的概念 HDFS数据块:HDFS上的文件被划分为块大小的多个分块,作为独立的存储单元,称为数据块,默认大小是64MB. 使用数据块的好处是: 一个文件的大小可

hadoop学习;hdfs操作;运行抛出权限异常: Permission denied;api查看源码方法;源码不停的向里循环;抽象类通过debug查找源码

eclipse快捷键alt+shift+m将选中的代码封装成方法:alt+shift+l将选中的代码添加对应类型放回参数 当调用一个陌生方法时,进入源码不停的向里循环,当找不到return类似方法的时候,可以看到最原始的方法 package com.kane.hdfs; import java.io.InputStream; import java.net.URL; import org.apache.hadoop.fs.FsUrlStreamHandlerFactory; import org

Hadoop学习-hdfs安装及其一些操作

hdfs:分布式文件系统 有目录结构,顶层目录是:  /,存的是文件,把文件存入hdfs后,会把这个文件进行切块并且进行备份,切块大小和备份的数量有客户决定. 存文件的叫datanode,记录文件的切块信息的叫namenode Hdfs的安装 准备四台linux服务器 先在hdp-01上进行下面操作 配置域名映射 vim /etc/hosts 主机名:hdp-01  对应的ip地址:192.168.33.61 主机名:hdp-02  对应的ip地址:192.168.33.62 主机名:hdp-0

Hadoop 从 hdfs 中拷出文件权限不够

问题:使用-get命令从hdfs中拷出文件时,提示权限不够,如下: ? ? 分析: 可能有三方面原因: hdfs 中的文件或文件夹 没有读取权限: hdfs 的配置中未允许拷出文件: linux 文件夹没有写入权限 解决办法: 针对3种可能,分别解决办法如下: 1 增加hdfs文件夹权限 hadoop fs -chmod 777 /user/hadoop 2 修改hdfs配置文件 # 在 $HADOOP_HOME/etc/hadoop/目录中,找到hdfs-site.xml,添加或更改以下属性:

hadoop学习---hdfs

hdfs默认基本存储单元为64mb,hdfs的块比磁盘的块大得多,是为了减少寻址开销.如块大小是100mb,寻址时间在10ms,传输速率是100mb/s,则寻址时间是传输时间的1% hdfs的三个重要角色:client,datanode,namenode namenode相当于hdfs中的管理者,管理文件系统的命名空间.它维护着这个文件系统树以及树内所有的文件和索引目录.它会存储文件系统的metadata在内存中. datdanode相当于hdfs中的工作者,是文件存储的基本单元.周期性地向na

hadoop的hdfs中的javaAPI操作

package cn.itcast.bigdata.hdfs; import java.net.URI; import java.util.Iterator; import java.util.Map.Entry; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileSystem; import org.apache

hadoop hdfs中删除文件恢复

hadoop的hdfs中删除的文件恢复原理和回收站原理是一样的,就是在删除hdfs文件时,被删除的文件存在了hdfs的.Trash文件夹中,恢复时只需要将该文件夹中文件拿出即可.具体操作如下: 1 设置trash 如果需要恢复hdfs中文件,就需要设置trash,hadoop的trash默认是关闭的.具体设置如下: <property>          <name>fs.trash.interval</name>          <value>10080

Hadoop学习之路(一)——Hadoop家族学习路线图

主要介绍Hadoop家族产品,常用的项目包括Hadoop, Hive, Pig, HBase, Sqoop, Mahout, Zookeeper, Avro, Ambari, Chukwa,新增加的项目包括,YARN, Hcatalog, Oozie, Cassandra, Hama, Whirr, Flume, Bigtop, Crunch, Hue等. 从2011年开始,中国进入大数据风起云涌的时代,以Hadoop为代表的家族软件,占据了大数据处理的广阔地盘.开源界及厂商,所有数据软件,无

Hadoop学习路线图

Hadoop家族产品,常用的项目包括Hadoop, Hive, Pig, HBase, Sqoop, Mahout, Zookeeper, Avro, Ambari, Chukwa,新增加的项目包括,YARN, Hcatalog, Oozie, Cassandra, Hama, Whirr, Flume, Bigtop, Crunch, Hue等. 从2011年开始,中国进入大数据风起云涌的时代,以Hadoop为代表的家族软件,占据了大数据处理的广阔地盘.开源界及厂商,所有数据软件,无一不向Ha