当搭建好了hadoop环境,我们迫不及待的就开始执行start-all.sh脚本,那么这个脚本具体做什么呢
1:hadoop-config.sh //想使用自己的配置的,需要在这里设置了 2:start-dfs.sh //start dfs daemons 3:start-mapred.sh //start mapred daemons
好吧,看来干活的都是小弟,而且分工明确。
首先来看start-dfs.sh
1:hadoop-daemon.sh //start namenode 2:hadoop-daemons.sh //start datanode 3:hadoop-daemons.sh //masters start secondarynamenode
这个分工也很明确,我们来细看里面的
hadoop-daemon.s
主要是生成namenode的日志文件,然后将具体的操作请求转发给 org.apache.hadoop.hdfs.server.namenode.NameNode 这个类。
hadoop-daemons.sh
1:启动datanade时 调用 slaves.sh 同时将本地的hadoop_home传递过去(所以说slaves和master的hadoop路径要一致了) 2: 启动seconddarynamenode 时将具体的请求转发给 org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode 这个类
再来看下slaves.sh做了什么
1:读取slaves文件里ip配置 2:ssh 每个slave机器 3:到HADOOP_HOME目录下 4:执行hadoop-daemon.sh脚本 5:传递的启动参数为start datanode 6:使用的conf文件为slave机器HADOOP_HOME下的。
再看slaves机器上的执行情况,其实是把请求转交给
org.apache.hadoop.hdfs.server.datanode.DataNode
这个类来处理了。
好现在来看 start-mapred.sh
1:hadoop-config.sh //mapreduce的配置相关 2:hadoop-daemon.sh //start jobtracker 3:hadoop-daemons.sh //start tasktracker
再看对mapred的处理,其实是把请求转给以下2个类。
org.apache.hadoop.mapred.JobTracker //master机器上 org.apache.hadoop.mapred.TaskTracker //slaves机器上。
其实hadoop的启动脚本注释都很明确了,我这里只是理清一下过程,所以这里总结下就是;
org.apache.hadoop.hdfs.server.namenode.NameNode org.apache.hadoop.mapred.JobTracker org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode 这3个主要运行在master机器上 org.apache.hadoop.hdfs.server.datanode.DataNode org.apache.hadoop.mapred.TaskTracker 这2个主要是运行在slaves机器上,由ssh连接过去然后在相对应的目录下执行脚本。