新手指导:hadoop-搭建集群必备知识:集群及内存配置介绍

1.集群配置常用配置文件有哪些?
2.有哪些控制脚本,如何查看这些配置脚本?
3.有哪些守护进程?
4.hadoop的内存该如何设置?
5.如何单独配置namenode内存?

集群介绍
1. 配置文件列表如下:
[tianyc@Route conf]$ pwd
/home/tianyc/hadoop-1.0.4/conf
[tianyc@Route conf]$ ll
总用量 76
-rw-rw-r--. 1 tianyc NEU 7457 3月 6 10:38 capacity-scheduler.xml
-rw-rw-r--. 1 tianyc NEU 535 3月 6 10:38 configuration.xsl
-rw-rw-r--. 1 tianyc NEU 371 3月 6 14:26 core-site.xml
-rw-rw-r--. 1 tianyc NEU 327 3月 6 10:38 fair-scheduler.xml
-rw-rw-r--. 1 tianyc NEU 2233 3月 6 10:38 hadoop-env.sh
-rw-rw-r--. 1 tianyc NEU 1488 3月 6 10:38 hadoop-metrics2.properties
-rw-rw-r--. 1 tianyc NEU 4644 3月 6 10:38 hadoop-policy.xml
-rw-rw-r--. 1 tianyc NEU 258 3月 6 10:38 hdfs-site.xml
-rw-rw-r--. 1 tianyc NEU 4441 3月 6 10:38 log4j.properties
-rw-rw-r--. 1 tianyc NEU 2033 3月 6 10:38 mapred-queue-acls.xml
-rw-rw-r--. 1 tianyc NEU 270 3月 7 14:45 mapred-site.xml
-rw-rw-r--. 1 tianyc NEU 19 3月 7 11:52 masters
-rw-rw-r--. 1 tianyc NEU 19 3月 6 10:38 slaves
-rw-rw-r--. 1 tianyc NEU 1243 3月 6 10:38 ssl-client.xml.example
-rw-rw-r--. 1 tianyc NEU 1195 3月 6 10:38 ssl-server.xml.example
-rw-rw-r--. 1 tianyc NEU 382 3月 6 10:38 taskcontroller.cfg


2. 常用配置文件:
  • hadoop-env.sh:记录脚本要用的环境变量。
  • core-site.xml:Hadoop核心配置项
  • hdfs-site.xml:Hadoop守护进程配置项,例如namenode,secondarynamenode和datanode等。
  • mapred-site.xml:MapReduce守护进程配置项,包括jobtracker和tasktracker。
  • master:运行secondarynamenode(而不是namenode)的机器列表(每行一个)。只在namenode或jobtracker节点上使用,无需同步到各节点。
  • slave:运行datanode和tasktracker的机器列表(每行一个)。只在namenode或jobtracker节点上使用,无需同步到各节点。


3. 配置管理
hadoop支持为所有的节点采用同一套配置文件,这样管理会变得非常简单,不过这对于某些集群来说并不适合。例如在扩展集群时,如果新机器的硬件和现有机器不同,则需要为新机器创建一套新的配置文件,以充分利用新硬件资源。所以,非常推荐在每个节点保存一套配置文件,并由管理员完成这些配置文件的同步工作。hadoop提供了一个基本工具来进行同步配置,即rsync。
这种情况下,需要引入“机器类”的概念,为不同的机器类分别维护一套配置文件。不过hadoop并没有提供执行这个操作的工具,需要借助外部工具,例如Chef,Puppet,cfengine和bcfg2等。


4. 控制脚本
  • start-dfs.sh:在本地节点启动namenode,在slave文件指定的每个节点启动datanode,在master文件指定的每个节点启动secondarynamenode
  • start-mapred.sh:在本地节点启动jobtracker,在slave文件指定的每个节点启动tasktracker。
  • start-all.sh:依次调用start-dfs.sh和start-mapred.sh
  • stop-dfs.sh/stop-mapred.sh/stop-all.sh:前面的start脚本对应的关闭脚本。
  • hadoop-daemon.sh:上述脚本调用它来执行启动和终止hadoop守护进程。如果用户需要从其他系统或自己编写脚本控制hadoop守护进程,可以调用它。
  • hadoop-daemons.sh:用于在多个主机上启动同一hadoop守护进程。


5. 守护进程管理
对于小型集群(几十个节点),可以将namenode、secondarynamenode、jobtracker放到单独一台机器上,但对于大型集群,最好分别放到不同的机器上。
  • namenode:在内存中保存整个命名空间的所有文件和块元数据,它的内存需求很大。
  • secondnamenode:保存一份最新的检查点,记录文件系统的元数据,有助于在数据丢失或系统崩溃时恢复namenode的元数据;它在大多时候空闲,但它创建检查时的内存需求和namenode差不多。一旦文件系统包含大量文件,单台主机可能无法同时运行namenode和secondarynamenode。
  • jobtracker:在一个运行大量mapreduce作业的高负载集群上,jobtracker会使用大量内存和CPU资源,因此它最好运行在一个专用节点上。
HDFS控制脚本需要在namenode机器上运行;mapreduce控制脚本需要在jobtracker机器上运行。



内存设置


1. 内存
hadoop为各个守护进程(namenode,secondarynamenode,jobtracker,datanode,tasktracker)统一分配的内存在hadoop-env.sh中设置,参数为HADOOP_HEAPSIZE,默认为1000M。

大部分情况下,这个统一设置的值可能并不适合。例如对于namenode节点,1000M的内存只能存储几百万个文件的数据块的引用。如果我想单独设置namenode的内存,可以通过HADOOP_NAMENODE_OPTS来设置。

同样的,可以通过HADOOP_SECONDARYNAMENODE_OPTS来设置secondrynamenode的内存,使得它与namenode保持一致。

当然,还有HADOOP_DATANODE_OPTS、HADOOP_BALANCER_OPTS、HADOOP_JOBTRACKER_OPTS变量供你使用。

此外,tasktracker启动独立的子JVM以运行map和reduce任务,分配给每个子JVM的内存量由mapred.child.java.opts属性(mapred-site.xml)控制,默认值为200M。


2. 最大map任务数
一个tasktracker能够同时运行最大map任务数,由mapred.tasktracker.map.tasks.maximum属性(mapred-site.xml)控制,默认为2。


3. 最大reduce任务数
一个tasktracker能够同时运行最大reduce任务数,由mapred.tasktracker.reduce.tasks.maximum属(mapred-site.xml)性控制,默认为2。


4. 小总结:计算节点的内存占用量。
默认情况下,一个同时运行了namenode,secondarynamenode和jobtracker的主节点,各自使用1000M内存,所以总计使用3000M。
默认情况下,一个从节点运行了如下守护进程:
  • 1个datanode:默认占用1000M内存。
  • 1个tasktracker:默认占用1000M内存。
  • 最多2个map任务:2*200M=400M。
  • 最多2个reduce任务:2*200M=400M。

即默认情况下,一个从节点需要使用2800M内存量。

在一个tasktracker上能够同时运行的任务数取决于这台机器上有多少个处理器。由于mapreduce作业通常是I/O-bound,因此将任务数设定为超出处理器数也有一定道理,可以获得更好的利用率。经验法则是任务总数(map任务数与reduce任务数之和)与处理器的比值在1和2之间。

例如,假设一台8个处理器的工作节点,每个处理器上运行2个进程,则可以将最大map任务数和最大reduce任务数分别设置成7(因为还有datanode和tasktracker进程,所以不能设置为8),各个JVM子任务可用内存设置为400M,则总内存开销=1000M(datanode)+1000M(tasktracker)+7*400M(map)+7*400M(reduce)=7600M
这样配置是否合理,还需要考虑是否给这台机器上的其他进程预留了足够内存,否则可能导致各进程在系统中不断切换,导致性能恶化。可以使用一些工具来监控集群的内存使用情况来进行优化,例如Ganglia工具。

hadoop也可以设置mapreduce操作所能使用的最大内存量,这是分别针对各项作业进行设置的。

你可能感兴趣的:(大数据)