Hadoop守护进程的关键属性(参考《Hadoop权威指南》)


Hadoop的配置属性很多,其中关键的属性分散在三个文件之中,包括core-site.xml、hdfs-site.xml和mapred-site.xml。


1、HDFS


     运行HDFS需要将一台机器指定为namenode。其中属性fs.default.name描述HDFS文件系统的URI,其主机是namenode的主机名称或IP地址,端口是namenode监听RPC的端口。如果没有指定端口,那么默认端口是8020 。其中HDFS(或MapReduce)守护进程并不用masters文件(Hadoop 2.x 是没有这个文件的)来确定主机名称。由于masters文件只供控制脚本使用,如果不使用控制脚本,可忽略改文件。


     属性fs.default.name也指定了默认文件系统,可以解析相对路径。相对路径的长度更短,使用更便捷(不需要了解特定namenode的地址)。当用户在运行HDFS时,鉴于fs.default.name指定了HDFS的namenode和默认文件系统,则HDFS必须是服务器配置的默认文件系统。值得注意的是,为了操作方便,也允许在客户端配置中将其他文件系统指定为默认的文件系统。例如,假设系统使用HDFS和S3两种文件系统,则可以在客户端配置中将任一文件系统指定为默认文件系统。这样的话,就能用相对路径URI指向默认文件系统,用绝对URI指向其他文件系统。


     HDFS守护进程的关键属性:


     


属性名称

类型

默认值

说明

fs.default.name

URI

file:///

默认文件系统。URI定义主机名称和namenode的RPC服务器工作的端口号,默认值是8020 。本属性保存在core-site.xml中

dfs.name.dir

以逗号分隔的目录名称

${hadoop.tmp.dir}/dfs/name

namenode存储永久性的元数据的目录列表。namenode在列表上的各个目录中均存放相同的元数据文件

dfs.data.dir

以逗号分隔的目录名称

${hadoop.tmp.dir}/dfs/data

datanode存放数据块的目录列表。各个数据块分别存放于某一个目录中

fs.checkpoint.dir

以逗号分隔的目录名称

${hadoop.tmp.dir}/dfs/namesecondary

辅助namenode存放检查点的目录列表。在所列的每个目录中均存放一份检查点文件的副本

     在默认情况下,HDFS的存储目录放在Hadoop的临时目录中(即hadoop.tmp.dir属性,默认值为/tmp/hadoop-${user.name})。因此,正确设置这些属性的重要性在于,即使清除了系统的临时目录。数据也不会丢失。


2、MapReduce


     用户需要指派一台机器为jobtracker以运行MapReduce 。在小型集群中,可以把jobtracker和namenode设置与同一台机器上。设置mapred.jon.tracker属性,指定jobtracker的主机名或IP地址,以及监听端口。该属性并非URI格式,而是“主机:端口”格式。通常情况下,端口号设为8021


     在执行MapReduce作业的过程中所产生的中间数据和工作文件  写到临时本地文件之中。由于这些数据包括map任务的输出数据,数据量可能非常大,因此必须保证本地临时存储空间(有mapred.local.dir属性设置)的容量足够大。mapred.local.dir属性使用一个逗号分隔的目录名称列表,最好将这些目录分散到所有本地磁盘,以提升磁盘I/O操作的效率。通常情况下,会使用与datanode相同的磁盘和分区(但是不同的目录)存储MapReduce的临时数据。如前所述,datanode的数据存储目录由dfs.data.dir属性项指定


     MapReduce使用分布式文件系统来和运行MapReduce任务的各个tasktracker共享文件(例如作业JAR文件)。属性mapred.system.dir指定这些文件的存储目录,可以是针对默认文件系统的相对路径(默认文件系统由fs.default.name属性设定),一般为HDFS。


     最后,设置mapred.tasktracker.map.tasks.maximum和mapred.tasktracker.Reduce.tasks.maximum属性时必须考虑到tasktracker所在机器上还剩多少可以使用的核,设置mapred.child.java.opts属性时必须考虑tasktracker各子JVM允许使用的内存大小。


     HDFS的关键配置属性



属性名称

类型

默认值

说明

mapred.job.tracker

主机名和端口

local

运行jobtracker的RPC服务器的主机名和端口。如果设为 默认值local,则运行一个MapReduce作业时,jobtracker以处理时模式运行(换言之,用户无需启动jobtracker;如果试图在该模式下启动jobtracker还会引发错误)

mapred.local.dir

逗号分隔的目录名称

${hadoop.tmp.dir}/mapred/local

存储作业的中间数据的目录列表。作业终止时,数据被清除

mapred.system.dir

URI

${hadoop.teml.dir}/mapred/system

在作业运行期间存储共享文件的目录,相对于fs.default.name

mapred.tasktracker.map.tasks.maximum

int

2

在任一时刻,允许在tasktracker上运行的map任务的最大数量

mapred.tasktracker.reduce.tasks.maximum

int

2

在任一时刻,允许在tasktracker上运行的reduce任务的最大数量

mapred.child.java.opts

String

-Xmx200m

JVM选项,用于启动运行map和reduce任务的tasktracker子进度。该属性可以针对每个作业进行设置。例如,可以设置JVM的属性,以支持调试

mapreduce.map.java.opts

String

-Xmx200m

JVM选项,针对运行map任务的子进程(在1.x版本中不出现)

mapreduce.reduce.java.opts

String

-Xmx200m

JVM选项,针对运行reduce任务的子进程(在1.x版本中不出现)