hadoop的配置文件主要有这样几个:

hadoop-env.sh设置环境参数

core-site.xml,hdfs-site.xml,mapred-site.xmlHadoop核心的一些参数

masters运行SNN,secondarynamenode,的机器名,默认是本机,但是实际环境里建议用其他机器

slaves所有从机的名字都在这里

hadoop-metrics.prpperties,log4j.properties


hadoop-env.sh里面:

HADOOP_LOG_DIR日志存放的目录


XML文件里主要的参数:

core-site.xml

fs.default.name,namenodeRPC服务运行的地址和端口,默认端口是8020,一般它的值是hdfs:开头指向namenode加端口号

hadoop.tmp.dir,默认是放在/tmp的一个子目录,建议设置在别的目录

dfs.name.dir  是namenode块存放等信息的元数据,它的值可以设为多个目录,这样在每一个目录里都会有一个拷贝,建议的方式是在一台备用namenode机器上NFS共享出一个目录,挂在主namenode上,这样元数据有一个备份。

手工备份namenode的办法:只要备份dfs.name.dir目录下的两个文件fsp_w_picpathandedits文件

可以通过WEb界面备份,方法是:

curlhttp://master1:50070/getp_w_picpath?getp_w_picpath=1>$BACKUP_DIR/fsp_w_picpath

curlhttp://master1:50070/getp_w_picpath?getedit=1>$BACKUP_DIR/edits

恢复的时候,先停掉namenode:hadoop-deamon.shstopnamenode

把文件拷回去,再启动:hadoop-deamon.shstartnamenode

一般要用hadoopfsck检查完整性。

现在新版的hadoop这个属性改为dfs.namenode.name.dir


dfs.data.dir每个slave上数据放哪里,新版的里面这个属性改为dfs.datanode.data.dir

fs.checkpoint.dircheckpoint数据放哪里

上面3个在hdfs-site文件里,hdfs-site里还有一个重要参数:

dfs.hots.exclude默认没有,手工添加并指向一个文本文件,这个文件一开始是空的,里面可以加入要移除的hostsname,这主要是当机器荡了或者需要维护时这样做。如果你一开始没有配这个参数,就要shutdownhadoop,添加参数后再启动才能用这个功能。

还有一个dfs.replication,默认集群是3,是指每个块要3个拷贝,以防丢失数据。


使用secondarynamenode来恢复故障的namenode,

是这样的,在SNN上面使用命令

hadoop-daemon.sh stop secondarynamenode

安装配置一台新的namenode,和原来的一模一样。

把SNN上面fs.checkpoint.dir里面的东西拷贝到新机器的dfs.name.dir里面

新机器上:hadoop-daemon.sh start namenode

SNN上:hadoop-daemon.sh start secondarynamenode


mapred-site.xml里面:

mapredjob.trackerjobtracker的RPC服务器地址和端口

mapred.tasktracker.map.tasks.maximum

mapred.tasktracker.reduce.tasks.maximum一台机器的tasktracker最多同时运行几个map及reduce任务,默认两个词参数都是2

mapred.child.java.opts,mapreduce.map.java.opts,mapreduce.reduce.java.opts分配给每个任务的JVM的内存大小,默认都是Xmx200m即200M

XML参数的默认值都在src目录下子目录里找对应的default文件。

hadoop说是廉价机器组成的集群,但是对内存要求不低,每个从机上的datanode和tasktracker各自要1000M内存,运行mapreduce任务还要增加内容消耗。一般来说普通的集群每个机器配8G比较合适。


常用命令

hadoop fsck /     扫描检查文件系统

hadoop dfsadmin -report    报告各个DN主机的磁盘利用情况。