Hadoop优化与调整

io.file.buffer.size
  hadoop访问文件的IO操做都须要经过代码库。所以,在不少状况下,io.file.buffer.size都被用来设置缓存的大小。不管是对硬盘或者是网络操做来说,较大的缓存均可以提供更高的数据传输,但这也就意味着更大的内存消耗和延迟。这个参数要设置为系统页面大小的倍数,以byte为单位,默认值是4KB,通常状况下,能够设置为64KB(65536byte)。
node

dfs.balance.bandwidthPerSec
  HDFS平衡器检测集群中使用过分或者使用不足的DataNode,并在这些DataNode之间移动数据块来保证负载均衡。若是不对平衡操做进行带宽限制,那么它会很快就会抢占全部的网络资源,不会为Mapreduce做业或者数据输入预留资源。参数dfs.balance.bandwidthPerSec定义了每一个DataNode平衡操做所容许的最大使用带宽,这个值的单位是byte,这是很不直观的,由于网络带宽通常都是用bit来描述的。所以,在设置的时候,要先计算好。DataNode使用这个参数来控制网络带宽的使用,但不幸的是,这个参数在守护进程启动的时候就读入,致使管理员没办法在平衡运行时来修改这个值。
python

dfs.block.size
  不少人都会认为HDFS中块的大小都是同样的,其实这不正确。由于每一个文件在建立的时候,都会肯定相关的数据块大小。参数dfs.block.size定义了全部新建文件的默认数据块大小。这个参数的设定并不会影响文件系统中现有的文件,客户端在建立文件的时候,若是有特殊须要,能够重写该参数。
  dfs.block.size的单位是byte,默认值是67108864 (64MB)。对于不少状况来讲,134217728 (128MB)更加合适。对于一个Mapreduce做业(尤为是用子类FileInputFormat定义输入格式的做业),对文件的每一个数据块会启用一个map任务来处理。这就意味这数据块的大小显著地影响Mapreduce做业的效率。
缓存

dfs.datanode.du.reserved
  当DataNode想NameNode汇报可用的硬盘大小的时候,它会把全部dfs.data.dir所列出的可用的硬盘大小总和发给NameNode。因为mapred.local.dir常常会跟DataNode共享可用的硬盘资源,由于咱们须要为Mapreduce任务保留一些硬盘资源。dfs.datanode.du.reserved定义了每一个dfs.data.dir所定义的硬盘空间须要保留的大小,以byte为单位。默认状况下,该值为0.也就意味着HDFS可使用每一个数据硬盘的全部空间,节点硬盘资源耗尽时就会进入读模式。所以,建议每一个硬盘都为map任务保留最少10GB的空间,若是每一个Mapreduce做业都会产生大量的中间结果,或者每一个硬盘空间都比较大(超过2TB),那么建议相应的增大保留的硬盘空间。
安全

dfs.namenode.handler.count
  NameNode有一个工做线程池用来处理客户端的远程过程调用及集群守护进程的调用。处理程序数量越多意味着要更大的池来处理来自不一样DataNode的并发心跳以及客户端并发的元数据操做。对于大集群或者有大量客户端的集群来讲,一般须要增大参数dfs.namenode.handler.count的默认值10。设置该值的通常原则是将其设置为集群大小的天然对数乘以20,即20logN,N为集群大小。若是前面的描述你仍然以为很不清楚,能够看下面的python程序(其中的200表示集群的大小)
网络

         

1 esammer:~ hadoop01$ python -c 'import math ; print int(math.log(200) * 20)'
2 105

  若是该值设的过小,明显的情况就是DataNode在链接NameNode的时候老是超时或者链接被拒绝,但NameNode的远程过程调用队列很大时,远程过程调用延时就会加大。症状之间是相互影响的,很难说修改dfs.namenode.handler.count就能解决问题,可是在查找故障时,检查一下该值的设置是必要的。并发

dfs.datanode.failed.volumes.tolerated
  当DataNode的任何一个本地磁盘出故障时,它的默认行为认定整个DataNode失效。在一个中到大型的集群中,硬盘故障是至关常见的,因此这种行为不是最优的。一个DataNode的丢失会致使一些数据块备份数降低,所以,NameNode会命令其余DataNode复制这些丢失的数据块来增长被附属。参数dfs.datanode.failed.volumes.tolerated定义整个DataNode声明失败前容许多少个硬盘出现故障。
  不少人会问,为何不能容忍全部磁盘失效的状况,这样就能够把整个DataNode的失效推迟到没有任何可工做的硬盘为止。对于一个永久的时间窗口来讲,这看上去很合理的,可是实际上,对于因此的磁盘来讲,管理员对于磁盘故障的处理都会早于因为正常磨损而出现的故障。只有一种状况例外,因此的硬盘在一个极短的时间内所有出现故障,这种异常状况须要当即调查。在实践中,快速的磁盘故障一般意味着驱动控制器或者某些部件故障。正由于罕见,但若是磁盘在短期内开始出现一连串故障,最好的办法就是当即隔离。先把整个集群设置为不可用,直到找到失败的缘由为止。参数dfs.datanode.failed.volumes.tolerated默认值为0,也就意味着只要有一个磁盘出现故障就会致使整个DataNode不可用,管理员能够增大该值来保证在出现部分磁盘故障时,DataNode仍能持续运行,可是须要保持谨慎的是,在极短的时间范围内出现一个或者两个磁盘故障代表一个更大的问题存在。
负载均衡

dfs.hosts
  全部的DataNode均可以链接到一个NameNode并加入到集群。在第一次链接到NameNode时,DataNode会获取一个命名空间ID,并能够当即接收数据块。管理员能够经过一个含有DataNode主机名列表的文件,来确认容许链接并加入集群的DataNode。在这种状况下,其余DataNode则不容许加入集群。对于安全须要有强烈要求的,或者对于访问权限有控制的,都会用到这个功能。
该文件中dfs.hosts的格式是用换行符来分割主机名或者IP地址,这主要看集群经过什么来识别机器。
oop

dfs.host.exclude
  相似dfs.hosts,HDFS能够经过指定文件把相关节点排除在外,这个文件是一个以换行符分割的列表,每行包括一个主机名或IP地址。若是一台主机先被包含在内,又出如今排除列表中。即,若是一个机器名字同时出如今两个文件中,最终结果是被排除掉的。dfs.host.exclude的参数还有一个做用,它能优雅地卸载DataNode。
spa

fs.trash.interval
  用户常常会意外删除文件。HDFS支持回收站功能,这相似于大多数
操做系统的回收站,当这个功能被启用,文件被移到用户的HDFS主目录中一个名为.Trash目录中,来保留被删除的文件,而不是当即完全删除。
fs.trash.interval定义.Trash目录下文件被永久删除前保留的时间。在文件被从HDFS永久删除前,用户能够自由地把文件从该目录下移出来并当即还原。默认值是0说明垃圾回收站功能是关闭的。
  要清楚,回收站功能不是万能的,推迟删除意味着要文件所占据的空间仍不可用,除非它被永久删除。用户能够经过运行hadoop fs -expunge命令。或者干脆等待指定的时间来明确回收站清空。能够在hadoop fs -rm命令经过指定-skipTrash参数来跳过回收站从而当即删除文件。
操作系统

相关文章
相关标签/搜索