hadoop中的配置属性非常多,这里只讨论关键属性,它们分散在3个文件中:core-site.xml、hdfs-site.xml、mapred-site.xml。
1. core-site.xml
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://Route:9000</value>
<final>true</final>
</property>
</configuration>
运行HDFS需要指定一台机器为namenode,通过参数 fs.default.name 来设置。它还指定了文件系统为HDFS。
2. hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>/home/tianyc/hadoop-1.0.4/dir_namenode/dir1,/home/tianyc/hadoop-1.0.4/dir_namenode/dir2</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/home/tianyc/hadoop-1.0.4/dir_datanode/dir1,/home/tianyc/hadoop-1.0.4/dir_datanode/dir2</value>
</property>
<property>
<name>dfs.checkpoint.dir</name>
<value>/home/tianyc/hadoop-1.0.4/dir_secondarynamenode/dir1,/home/tianyc/hadoop-1.0.4/dir_secondarynamenode/dir2</value>
</property>
</configuration>
-
dfs.replication:确定数据块被复制的份数。
-
dfs.name.dir:指定一系列目录来供namenode存储永久性的文件系统元数据(编辑日志和文件系统映像),这些元数据文件会同时备份在所有指定的目录中,形成冗余。建议指定一个本地磁盘目录,指定一个远程磁盘目录(例如NFS挂载磁盘),这样本地磁盘故障或namenode节点宕机后,都可以恢复并重构新的namenode。注意secondrynamenode只是定期保存namenode的检查点,并不提供namenode的最新备份。
-
dfs.data.dir:指定datanode存储数据的一系列目录。注意这里不是为了冗余,而是循环地在各个目录中写数据。因此,为了提高性能,最好分别为各个本地磁盘指定一个存储目录,使得数据块跨磁盘分布。这样,针对不同数据块的读操作可以并发执行,从而提升读性能。另一个显著提升的操作是在mount这些磁盘时,使用noatime选项,使得不刷新所读文件的最新访问时间。
-
dfs.checkpoint.dir:指定一系列目录来存储secondarynamenode的检查点映像文件。与namenode相同,这里的一系列目录也是为了冗余。
注意:如果不设置这些属性,HDFS的存储目录默认存放在hadoop的临时目录中(由core-site.xml文件中的 Hadoop.tmp.dir属性指定)。而如果清除了系统的临时目录,数据就会丢失。Hadoop.tmp.dir 属性的参考设置如下:
[tianyc@Route bin]$ cat ../conf/core-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://Route:9000</value>
</property>
<property>
<name>Hadoop.tmp.dir</name>
<value>/tmp/hadoop-tianyc</value>
</property>
</configuration>
3. mapred-site.xml
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>Route:9001</value>
<final>true</final>
</property>
<property>
<name>mapred.local.dir</name>
<value>/home/tianyc/hadoop-1.0.4/dir_local/dir1,/home/tianyc/hadoop-1.0.4/dir_local/dir2</value>
</property>
<property>
<name>mapred.system.dir</name>
<value>/tmp/hadoop-tianyc/dir_system</value>
</property>
<property>
<name>mapred.tasktracker.map.tasks.maximum</name>
<value>2</value>
</property>
<property>
<name>mapred.tasktracker.reduce.tasks.maximum</name>
<value>2</value>
</property>
<property>
<name>mapred.child.java.opts</name>
<value>-Xmx200m</value>
</property>
</configuration>
-
mapred.job.tracker:指定jobtracker节点。这里不是URL格式,而是“主机:端口”格式。
-
mapred.local.dir:临时本地文件的一系列目录,存储mapreduce作业执行过程中产生的中间数据和工作文件。由于这里也存储map任务的输出数据,数据量可能非常大,因此必须保证这里的容量足够大。这些目录最好分散到各个本地磁盘以提升I/O,通常会使用与datanode相同的磁盘和分区(但不同目录)。
-
mapred.system.dir:指定一个目录,来存储运行mapreduce任务的各个tasktracker的共享文件(例如作业JAR文件)。
-
mapred.tasktracker.map.tasks.maximum:最大map任务数。
-
mapred.tasktracker.reduce.tasks.maximum:最大reduce任务数。
-
mapred.child.java.opts:tasktracker中子JVM的有效内存大小。
(责任编辑:IT) |