1:hadoop-env.sh
1):统一设置hadoop为各个守护进程(namenode,secondarynamenode,jobtracker,datanode,tasktracker)的jvm内存
对于tasktracker来说,如果一个tasktracker的有2个map任务(默认的:在mapred.tasktracker.map.tasks.maximum )和2个reduce任务(mapred.tasktracker.reduce.tasks.maximum ),每个任务所占用的内存由mapred.child.java.opts配置(默认200M),所以每个tasktracker默认会占用1.8G(tasktracker:1G;map:2*200;reduce:2*200),当然这没包括dataname占用的内存(默认1G)
对于一台机器运行多少个mapreduce任务取决于机器的cpu核心数(http://heipark.iteye.com/blog/1146838)
2):设置namenode内存(一个文件或目录大约占150字节,一百万个大约占300M内存)
HADOOP_SECONDARYNAMENODE_OPTS
其它进程序也可以单独配置,可参拷hadoop-env.sh
3):java设置(可以保证集群使用一个java版本)
4):系统日志(建意设置在其它目录)
日志分类:以log结尾的正常运行日志(不会自动删除)
以out结尾的错误日志(一般只保存5个)
5):ssh(可以传入一些参数)
可以同步配置文件到其它机器(所有slaves向master发送rsync同步请求)
集群众多时rsync请求会使用主机瘫痪,可以设置请求间隔
2:HDFS
1)指定namenode主机
<property>
<name>fs.default.name</name>
<value>hdfs://hadoop1:8020</value>
</property>
</configuration>
2)指定存放namenode编辑日志与文件系统映像目录
<name>dfs.name.dir</name>
<value>/hadoop/data,/a/b</value> #写多个方便恢复
</property>
3)指定datanode数据存放目录
<name>dfs.data.dir</name>
<value>/disk2/data,/disk1/data</value> #为了提高性能写多个磁盘目录
</property>
4)指定辅助namenode存放检查点目录
<name>fs.checkpoint.dir</name>
<value>/hadoop/data</value> #支持多目录备份
</property>
数据冗余
<name>dfs.replication</name>
<value>2</value>
</property>
注:默认这些都存在${hadoop.tmp.dir}/dfs目录下,tmp默认在/tmp/hadoop-${user.name}下
3:mapreduce
1)指定一台jobtracker来分配任务(小集群可与namenode一起)
<name>mapred.job.tracker</name>
<value>hadoop1:8021</value>
</property>
2)指定存放mapreduce过程中的中间数据(map任务的输出,数据量可能非常大)
<name>mapred.local.dir</name>
<value>/disd1/map,/disd2/map</value>
</property>
3)指定tasktracker共享文件(如作业jar)
<name>mapred.system.dir</name>
<value>/hadoop/system</value>
</property>
4 : 守护进程地址和端口
1)rpc
dfs.datanode.ipc.address datanode的(默认50020)
mapred.job.tracker jobtracker的(默认8021)
mapred.task.tracker.report.address tasktracker的(默认使用空闲的)
别外datanode的块传输使用tcp(dfs.datanode.address 默认50010)
2)http
mapred.task.tracker.http.address tasktracker的(默认50060)
dfs.http.address namenode的(默认50070)
dfs.datanode.http.address datanode的(默认50075)
dfs.secondary.http.address 辅助nn的(默认50090)
5:其它
1)集群成员
mapred.hosts tasktracker加入集群列表
dfs.hosts.exclude 移除
mapred.hosts.exclude
2)缓冲区(辅助io操作,默认4K,增大可以显著提升性能)
3)hdfs块大小(大块nn占用内存少,并向mapper传输更多数据)
4)保留存储空间(datanode上预留多少空间)
5)回收站(hadoop的文件删除后会放入特殊的目录即回收站中,可以指定保留时间)
只在由shell删除的才会放到回收站,由程序删除的会直接删掉;API的Trash.moveToTrash()也会放到回收站中。
删除的文件被放到/home/.Trash目录下,恢复移出文件即可
别外只有hdfs会自动删除过期文件,其它文件系统还须调用(hadoop fs -expunge)删除
6)任务内存限制(tasktracker的内存)
它要高于(mapred.child.java.opts)
别外还可以在系统级限制(limits.conf)
7)作业调度
默认为FIFO(先入先出队列)
8) 创建用户帐号
hadoop fs -chown gbz:gbz /user/gbz #给权限
hadoop dfsadmin -setSpaceQuota 1t /user/gbz #限制容量为1T
9)安全
早期版本(0.22之前)hadoop的认证只是防止用户不小心删除数据,不能防止恶意的root删除所有数据(你告诉它你是谁,hadoop就认为你是谁)
kerberos认证
2:客户用tgt向授权服务器请求一个服务票据
3:客户向服务器(nn,jk)出示票据,证明自己合法,并得到服务
hadoop.security.authentication=kerberos(coresite.xml)
2:启用授权
hadoop.security.authorization=true(coresite.xml)