002-hadoop二次开发-NameNode启动流程-NameNode启动流程
NameNode是什么,有哪些职责
首先namenode是一个服务中心,管理文件系统命名空间的,比如当前文件名叫什么,以及管理的元数据,blockID,block大小,块池列表,在哪些机器上。
在WEB-UI界面50070端口,Utilities下Browse Directory查看hdfs文件信息。
当在客户端输入hadoop fs -ls /命令后,通过rpc发送给namenode,执行操作,返回结果到客户端上,那么namenode还有协调客户端进行访问的操作。
怎么管理元数据信息?
在hadoop的sbin目录下,输入find / -name "edits_*"查找元数据文件
在当前/dfs/nn/current/edits_000000000000000000-000000000000008888,记录了操作流程,增删该,
还有一个fsimage镜像文件,包括一些文件映射,文件属性等信息。
两者组成了元数据信息。namenode对两者进行管理。
总结
1、维护命名空间:文件明细,文件大小,元数据信息
2、对外提供服务(对client端提供服务操作)
3、协调客户端对文件的访问
4、保存数据块在哪台机器的信息(datanode)
NameNode如何启动的(通过脚本)
在hadoop安装包(可以是apache的也可以使cdh的等)下sbin目录下有个hadoop-daemon.sh脚本文件。
当执行hadoop-daemon.sh start/stop namenode命令时,匹配到下面的脚本命令,就开始启动了
case $command in
namenode|secondarynamenode|datanode|journalnode|dfs|dfsadmin|fsck|balancer|zkfc)
if [ -z "$HADOOP_HDFS_HOME" ]; then
hdfsScript="$HADOOP_PREFIX"/bin/hdfs
else
hdfsScript="$HADOOP_HDFS_HOME"/bin/hdfs
fi
nohup nice -n $HADOOP_NICENESS $hdfsScript --config $HADOOP_CONF_DIR $command "$@" > "$log"
2>&1 < /dev/null &
;;
(*)
nohup nice -n $HADOOP_NICENESS $hadoopScript --config $HADOOP_CONF_DIR $command "$@" > "$log
" 2>&1 < /dev/null &
;;
esac
执行到if-else脚本就会转到hdfs文件,在bin目录下
匹配到namenode执行命令
133 if [ "$COMMAND" = "namenode" ] ; then
134 CLASS='org.apache.hadoop.hdfs.server.namenode.NameNode'
135 # Set SENTRY_HOME if possible and add Sentry plugin jars to classpath
136 if [[ -z "$SENTRY_HOME" ]]
137 then
138 # HADOOP_HDFS_HOME should have been set by hadoop-config.sh
139 if [[ -d ${HADOOP_HDFS_HOME}/../sentry ]]
140 then
141 export SENTRY_HOME=`readlink -m ${HADOOP_HDFS_HOME}/../sentry`
142 fi
143 fi
144 if [[ -n "$SENTRY_HOME" ]]
145 then
146 for f in ${SENTRY_HOME}/lib/plugins/*.jar; do
147 CLASSPATH=${CLASSPATH}:${f}
148 done
149 fi
150 HADOOP_OPTS="$HADOOP_OPTS $HADOOP_NAMENODE_OPTS"
151 elif [ "$COMMAND" = "zkfc" ] ; then
通过org.apache.hadoop.hdfs.server.namenode.NameNode进行启动。
下一篇来看进入org.apache.hadoop.hdfs.server.namenode.NameNode的源码执行过程。