整套大数据学习资料(视频+笔记)百度网盘无门槛下载:http://www.edu360.cn/news/content?id=3377

9.4.5 Hadoop的其他属性

hadoop 小红牛 9℃ 0评论

本节讨论其他一些可能会用到的Hadoop属性。

1.集群成员

为了便于在将来添加或移除节点,可以通过文件来指定一些允许作为

datanode或tasktracker加入集群的经过认证的机器。属性dfs.hosts记录允许作为datanode加入集群机器列表;属性mapred.hosts记录允许作

为tasktracker加入集群的机器列表。与之相对应的,属性dfs.hosts. exclude和mapred.hosts.exclude所指定的文件分别包含待移除的机器列表。更深入的讨论可参见10.3.2节。

2.缓冲区大小

Hadoop使用一个4

KB(4096字节)的缓冲区辅助I/O操作。对于现代硬件和操作系统来说,这个容量实在过于保守了。增大缓冲区容量会显著提高性能,例如128KB(131072字节)更为常用。可以通过core-site.xml文件中的
io.file, buffer. size属性来设置缓冲区大小。

3. HDFS块大小

默认情况下,HDFS块大小是64
MB,但是许多集群把块大小设为128 MB(134 217 728 字节)或 256 MB(268 435 456 字节)以降低
namenode 的内存 压力,并向mapper传输更多数据。可以通过hdfs-site.xml文件中的
dfs.block. size属性设置块的大小。

4.保留的存储空间

默认情况下,datanode能够使用存储目录上的所有闲置空间。如果计划将 部分空间留给其他应用程序(非HDFS),则需要设置 dfs. datanode . du. reserved属性来指定待保留的空间大小(以字节为单位)。

5.回收站

Hadoop文件系统也有回收站设施,被删除的文件并未被真正删除,仅只转

移到回收站(一个特定文件夹)中。回收站中的文件在被永久删除之前仍会至少保留一段时间。该信息由core-site.xml文件中的fs.trash.interval属
性(以分钟为单位)设置。默认情况下,该属性的值是0,表示回收站特性无效。

与许多操作系统类似,Hadoop的回收站设施是用户级特性,换句话说,
只有由文件系统shell直接删除的文件才会被放到回收站中,用程序删除
的文件会被直接删除。当然,也有例外的情况,如使用Trash类。构造一个Trash实例,调用moveToTrashO方法会把指定路径的文件移到回收站中。如果操作成功,该方法返回一个值,否则,如果回收站特性未被启动,或该文件已经在回收站中,该方法返回false。

当回收站特性被启用时,每个用户都有独立的回收站目录,目:home目录下的Trash目录。恢复文件也很简易:在.Trash的子目录中找到文件,并将其移出.Trash目录。

HDFS会自动删除回收站中的文件,但是其他文件系统并不具备这项功能。 对于这些文件系统,必须定期手动删除。执行以下命令可以删除已在回收 站中超过最小时限的所有文件:

% hadoop fs -expunge

Trash类的expunge()方法也具有相同效果。

6.作业调度

在针对多用户的MapReduce设置中,可以考虑将默认的FIFO作业调度器 替换为一个具有更多特性的调度器。参见6.3.1节中对作业调度的讨论。

7.慢启动reduce

在默认情况下,调度器将会一直等待,直到该作业的5%的map任务已经结束才会调度reduce任务。对于大型作业来说,这可能会降低集群的利用率,因为在等待map任务执行完毕的过程之中,占用了
reduce槽。可以将 mapred.reduce.slowstart.completed.maps 的值设得更大,例如
0.80(80%),能够提升吞吐率。

8.任务的内存限制

在共享集群上,不允许由于存在有纰漏的MapReduce程序而影响集群中各 个节点的正常工作。然而,如果map或reduce任务出现内存泄露,则这种 情况很可能会发生。例如,假设一台运行tasktracker的机器的可用内存耗尽,则会影响其他正在运行的进程。

 考虑另一种情况。用户将mapred.child.java.opts设为一个大值,则其他正在运行的任务由于内存紧张将导致更多磁盘换页操作。若以final修饰
这个属性,将能够阻止该属性在作业中被用户任意修改。但由于总有一些
合理因素允许部分作业占用更多内存,因此上述方案并不总是可行的。此外,即使将mapred.child.java.opts参数锁定,也无法解决该问题,因为
有些任务能够创建新进程,且其内存的使用不受该参数约束。例如, Streaming和管道作业就是如此。

为了防范此类事故,需要采取-些措施来加强任务的内存限制管理。

Hadoop提供了两种机制。最简单的机制是使用Linux和ulimit的命令,它能在操作系统级别完成(在limits.conf文件中,一般可以在/etc/security中发现)

或在Hadoop配置中设置mapred.child.ulimit项。该值以千字节为单位,且应明显高于JVM内存(由mapred.child.java.opts设置),否则子
JVM可能无法启动。

另外一种机制是Hadoop的任务内存监控特性®。基本思路是由管理员为集群中的任务设置虚拟内存限制;用户在作业配置中指定他们的作业的最大
内存需求。如果用户不为其作业设置内存需求,则使用默认设置 (mapred.job.map.memory.mb 和 mapred. job.
reduce.memory.mb)。

该机制相对于ulimit方法具有多项优势。首先,它加强了整个任务进程树
的内存利用率,包括由任务创建的进程。其次,它具有内存感知的调度能
力,各个任务会被安排在拥有足够空闲内存的tasktracker上运行。例如,容量调度器会根据内存设置来计算槽的利用率。如果某个作业的
mapred.job.map.memory.mb设置超过mapred.cluster.map.memory.mb,就

该调度器就会为该作业在tasktracker上分配多个槽以运行各个map任务。

为了启用任务内存监控,需要设置表9-7中的所有6项属性。默认值均为-1, 表明此项特征未被启用。

表9-7.MapReduce任务内存监控的属性

属性名称

类型

默认值

说明

mapred.cluster.map. memory.mb

int

-1

定义每个map槽的虚拟内存量(以MB为 单位)。如果map任务所需内存超过该 值,则需要使用多个map槽

mapred.cluster.reduce, memory.mb

int

-1

定义每个reduce槽的虚拟内存量(以MB 为单位)。如果reduce任务所需内存超过 该值,则需要使用多个reduce槽

mapred.job.map.memory.mb

int

-1

定义每个map任务运行时所需的虚拟内存 量(以MB为单位)。如果某个map任务超 过该值,则该任务终止,且被标记为失败

mapred.job.reduce.memory.mb

int

-1

定义每个reduce任务运行时所需的虚拟内 存量(以MB为单位)。如果某个reduce任 务过该值,则该任务终止,且被标记为失败

mapred.cluster.max.map. memory.mb

int

-1

允许用户设置的 mapred . job .map . memory . mb的最大值

mapred.cluster.max.reduce. memory.mb

int

-1

允许用户设置的 mapred . job . reduce . memory . mb的最大值

转载请注明:全栈大数据 » 9.4.5 Hadoop的其他属性

喜欢 (0)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址