Hadoop集群设置

jopen 10年前

Hadoop集群配置部分参数:

设置dfs.name.dir 时,通过逗号分隔多个值,可以使namenode将元数据存储到多个副本,以便namenode出错时恢复。
dfs.data.dir也可设置多个目录,但是其目的不是为了冗余容错,而是可以循环写入,提高性能。
fs.checkpoint.dir也可设置多个目录,以保存检查点。和namenode一样,其支持冗余备份。
以上设置的目录,默认在hadoop.tmp.dir目录下,即/tmp/hadoop-${user.name},需要确保该目录不被操作系统清理,或者另外指定到其他目录。


MapReduce的中间输出文件将存放在mapred.local.dir设置的目录下,需要确保改目录具有足够大的可用空间,因为有时候中间输出文件会非常大。


mapred.system.dir指定一个目录,MapReduce将在该目录下存放需要共享的文件,比如作业的jar文件。


通过设置mapred.tasktracker.map.tasks.maximum和mapred.task
tracker.reduce.tasks.maximum以充分反映tasktracker所在节点的可用CPU核心数。通过设置mapred.child.java.opts来指定分配给每个子JVM的内存数。


某些设置值中,你会发现IP地址设置为0.0.0.0,这表示将地址绑定到该机器所有的可用地址。当然你也可以指定绑定到某一个具体地址。端口号设置为0,表示由服务器选择一个空闲的端口号。但这种做法通常不推荐,因为可能会和防火墙的设置规则不兼容。


修改core-site.xml中的mapred.child.java.opts值来指定IO缓冲区大小,默认为4KB。(具体应该根据机器而定)


修改hdfs-site.xml中的dfs.block.size属性值来指定HDFS的文件块大小,默认为64M。


默认情况下,datanode的HDFS文件系统将利用所有可用的磁盘空间。如果你想保留一部分作为它用,可以指定dfs.datanode.du.reserved属性值,单位为字节。


Hadoop文件系统提供回收站的功能,即被删除的文件不会立即做物理删除,而是可以存放在回收站中,并保留一定时间。这个保留时间可以通过设置fs.trash.interval来指定,单位是分钟。默认值为0,表示不启用该功能。
注意:如果文件是由程序删除的,则文件会立即删除,不会存放到回收站中。当然,你可显式调用Trash类在程序中实现该功能。每个用户有自己单独的回收站目录。


当Map运行时间比Reduce时间长很多时,需要考虑提高mapred.reduce.slowstart.completed.maps的值,比如 0.80(80%)。该值的意思是,当已完成的Map数占到Map总数达到某一比例时,开始启动Reduce的数据拉取。默认值为0.05(5%)。


YARN是新一代MapReduce框架。在此框架下,不再需要运行jobtracker和Tasktracker。取而代之的是一个Resource manager(一般情况下运行在namenode节点,也可指定到专用节点上),以及Node manager(运行在每一个worker node上)。


运行YARN start-all.sh脚本会启动Resource manager和Node manager(在slavers文件中列出)。


YARN提供了一个Job history server,一般情况下运行在Resource manager节点上。通过这个服务,用户可以访问已经完成的job的具体信息。


mapred-site.xml配置文件仍然会被YARN利用,但其中大部分配置信息不会被YARN利用,除了mapred.child.java.opts以及相关的几个配置。


Yarn-site.xml文件中几个比较重要的配置项:
mapreduce.framework.name yarn
yarn.resourcemanager.address Resource manager的地址及端口号
yarn.nodemanager.local-dirs 等价于MapReduce 1中的mapred.local.dir
yarn.nodemanager.aux-services YARN没有tasktracker来负责Map的输出与Reduce的输入的衔接。基于YARN的多用途设计,需要明确指定其值为mapreduce.shuffle。
yarn.nodemanager.resource.memory-mb 分配给node manager的可用内存。
yarn.nodemanager.vmem-pmemratio 虚拟内存基于物理内存的倍数,默认2.1,表示每使用1单位的物理内存,最多可使用2.1个单位的虚拟内存。
不同于MapReduce1的以固定数目的槽位来管理内存,YARN提供了对内存的更精细粒度的分配与管理方式。
传统的MapReduce中区分了Map 槽位和Reduce槽位,并且设置了固定数目的槽位来进行管理。但是实际作业运行时,开始阶段仅仅Map是需要的,而Reduce槽位不需要;同理,在作业的后期,仅仅Reduce是需要的。这样就造成了资源利用率比较低。
YARN不再区分Map或Reduce槽位,它通过内存池的管理方式来分配内存资源。yarn.nodemanager.resource.memory-mb属性设定了池中总的可用内存。


namenode在启动后,会进入安全模式。安全模式下文件文件系统只读不可写。如果检查结果显示99.9%的块满足最小复本级别后,默认在30秒(可通过dfs.safemode.extension更改,单位为毫秒)后退出安全模式。当然你也可通过命令明确指定进入或退出安全模式。另一种让 namenode进入安全模式的方法是,设置dfs.safemode.threshold.pct的值大于1,这样namenode启动后就会一直停留在安全模式。安全模式在集群升级或维护时非常实用。


namenode启动后,会先载入image file(映像文件),然后执行edits(编辑日志)中的各项操作。成功后会生成一个新的image file和空的edits。


HDFS通过log4j来记录审计日志。默认记录级别阈值为WARN,可通过更改log4j.logger.org.apache.hadoop.hdfs.server.namenode.FSNamesystem.audit属性值为INFO来记录更多的日志。


可以通过运行命令 hadoop fsck / 来检查文件系统健康状况。(/表示根目录)


默认情况下,datanode每3周(可通过dfs.datanode.scan.period.hours属性更改)会调用一次块扫描器来检查本节点下所有的文件块,如果发现错误就会报告给namenode并被及时修复。


Hadoop后台运行一个balancer(均衡器)进程。它将块从忙碌的节点移动到相对空闲的节点,以维持整个集群的均衡。均衡器所能使用的资源是受限制的,以免其影响到用户进程,比如均衡器可使用的网路带宽只有1MB/s,当然可以通过dfs.balance.bandwidthPerSec更改。


有些数据是不可再生的,所以需要定期备份。而且考虑到各种可能丢失数据的风险,最好能将重要数据备份到另外一个集群(最好是不同软件版本的集群,这样可防止软件本身故障导致数据丢失)。


namenode的本地文件系统中有一个文件(该文件名由dfs.hosts属性指定),其中记录了可以连接到namenode的所有datanode。同理,可以连接到jobtracker的所有tasktracker也在同一个文件中指定(该文件名由mapred.hosts指定)。


添加一个新节点步骤如下:
1)将新节点IP地址添加到include文件中。
2)通过命令更新namenode:hadoop dfsadmin –refreshNodes
3)通过命令更新jobtracker:hadoop mradmin -refreshNodes
4)更新slavers文件。
5)启动新的datanode。
6)通过UI检查新的datanode是否已运行。


移除一个节点步骤如下:
1)添加要移除节点的地址到exclude文件
2)通过命令更新namenode:hadoop dfsadmin –refreshNodes
3)通过命令更新jobtracker:hadoop  mapred –refreshNodes
4)通过UI检查节点状态,如果显示“decommission in progress”,表示Hadoop正在处理中,比如复制待移除节点上的文件块到其他节点。
5)当对应节点状态为“decommissioned”时,表示移除准备工作已完成,此时可关闭对应的节点。
6)再次运行第二步和第三步中的命令,更新namenode和jobtracker。

7)从slavers文件中移除对应的节点信息。

备注:以上配置摘自官方文档,部分没有验证,仅供参考,需读者自行验证。