今天来看下hadoop dfs 的启动过程都做了些什么。
启动hdfs的时候,一般都是使用命令./start-dfs.sh,那就从这个sh文件入手:
"$bin"/hadoop-daemon.sh --config $HADOOP_CONF_DIR start namenode $nameStartOpt "$bin"/hadoop-daemons.sh --config $HADOOP_CONF_DIR start datanode $dataStartOpt "$bin"/hadoop-daemons.sh --config $HADOOP_CONF_DIR --hosts masters start secondarynamenode
在脚本的最后调用了这3命令,分别是启动namenode,datanode和secondarynamenode。
接着看hadoop-daemon.sh脚本:
case $startStop in (start) mkdir -p "$HADOOP_PID_DIR" if [ -f $pid ]; then if kill -0 `cat $pid` > /dev/null 2>&1; then echo $command running as process `cat $pid`. Stop it first. exit 1 fi fi if [ "$HADOOP_MASTER" != "" ]; then echo rsync from $HADOOP_MASTER rsync -a -e ssh --delete --exclude=.svn --exclude='logs/*' --exclude='contrib/hod/logs/*' $HADOOP_MASTER/ "$HADOOP_HOME" fi hadoop_rotate_log $log echo starting $command, logging to $log cd "$HADOOP_PREFIX" //关键的在这里,又去调用hadoop这个脚本 nohup nice -n $HADOOP_NICENESS "$HADOOP_PREFIX"/bin/hadoop --config $HADOOP_CONF_DIR $command "$@" > "$log" 2>&1 < /dev/null & echo $! > $pid sleep 1; head "$log" ;;
看到上面的代码,发现这里有执行了hadoop这个脚本,执行了命令hadoop --config configfile namenode,接着看hadoop的脚本吧:
elif [ "$COMMAND" = "namenode" ] ; then CLASS='org.apache.hadoop.hdfs.server.namenode.NameNode' HADOOP_OPTS="$HADOOP_OPTS $HADOOP_NAMENODE_OPTS"
终于找到了启动namenode所调用的类了,同样的流程,也可以找到datanode,secondarynamenode的启动类。
接着看NameNode类:
在注释中看到:
* The NameNode controls two critical tables:
* 1) filename->blocksequence (namespace)
* 2) block->machinelist ("inodes")
namenode维护了2个关键表,一个是文件和块序列的对应关系,一个是块和datanode对象关系,就是保存了一个文件对应了哪些块,一个块存储在哪些机器上。
首先通过main方法
public static void main(String argv[]) throws Exception { try { StringUtils.startupShutdownMessage(NameNode.class, argv, LOG); NameNode namenode = createNameNode(argv, null); if (namenode != null) namenode.join(); } catch (Throwable e) { LOG.error(StringUtils.stringifyException(e)); System.exit(-1); } }
调用createNameNode方法创建namenode,该方法中通过NameNode namenode = new NameNode(conf)来创建,再看看构造方法中调用了 initialize(conf),截取initialize方法中一些主要的内容:
............. this.namesystem = new FSNamesystem(this, conf); .............
FSNamesystem才是用来保存有节点信息的,包括:
1) valid fsname --> blocklist (kept on disk, logged)
* 2) Set of all valid blocks (inverted #1)
* 3) block --> machinelist (kept in memory, rebuilt dynamically from reports)
* 4) machine --> blocklist (inverted #2)
* 5) LRU cache of updated-heartbeat machines
加载fsimge,edits,启动监听进程接收datanode的信息,启动rpc底层通信服务,namenode的启动主要就是做的这些事情,可以看到主要工作在加载fsimage,和接收datanode的信息。如果fsimage比较大的话,那么启动过程会较慢,同样,如果集群比较大,那么接收datanode的block信息同样也是非常耗时的地方。
关于加载fsimge和datanode的rpc通信下一次在分析吧。
相关推荐
在部署Hadoop集群的过程中,用户可能会遇到Datanode启动失败的情况。这一问题通常表现为,在尝试启动Hadoop集群时,Datanode无法正常启动,并且在访问NameNode的Web界面时发现缺少Datanode的相关信息。这种情况会...
本文档提供了 Hadoop 集群维护的详细指南,涵盖了集群的启动、停止、增加存储量、平衡数据、升级 Hadoop 版本等多方面的内容。 一、Hadoop 集群启动和停止命令 Hadoop 集群可以使用 start-all.sh 命令启动,使用 ...
自动启动 Hadoop 集群可以使用命令 start-all.sh,启动过程将自动启动 HDFS 和 YARN 模块。 五、总结 Hadoop 分布式集群初次启动是大数据处理的重要步骤,涉及到多个知识点,包括 ssh 免密登录、HDFS 格式化、...
6. **启动Hadoop服务**:在Master节点上执行`start-dfs.sh`和`start-yarn.sh`命令启动Hadoop服务。 #### 六、验证Hadoop集群 完成上述步骤后,可以通过以下几个方法来验证Hadoop集群是否正确安装和配置: 1. **...
完成以上步骤后,可以通过以下命令启动Hadoop服务: ```bash $HADOOP_HOME/bin/hdfs namenode -format $HADOOP_HOME/sbin/start-dfs.sh $HADOOP_HOME/sbin/start-yarn.sh ``` 至此,您已经成功搭建了一个基本的...
可以使用`start-dfs.sh`和`start-yarn.sh`脚本启动Hadoop集群。 8. **验证安装**:最后,可以通过浏览器访问`http://localhost:50070`和`http://localhost:8088`来查看NameNode和ResourceManager的Web界面,确保...
### Hadoop 1.2.1 配置过程详解 #### 一、环境搭建与配置 **1. 创建目录** mkdir /app 在Linux环境下创建一个 `/app` 目录,用于存放JDK和Hadoop等软件。 **2. 解压 JDK 和 Hadoop 到 `/app` 目录** tar -...
在配置完成后,你可以使用`hadoop dfs -mkdir`命令创建HDFS目录,`hadoop dfs -put`上传文件,`hadoop fs -ls`查看目录内容,以及运行MapReduce任务。为了运行MapReduce,你需要将你的Java程序打包成JAR文件,然后...
2. **启动Hadoop服务**:通过执行`start-dfs.sh`和`start-mapred.sh`启动Hadoop的DataNode、NameNode、JobTracker和TaskTracker。 3. **运行WordCount示例**:将Hadoop自带的WordCount程序提交到集群,通过`hadoop ...
Hadoop集群的启动过程涉及多个组件的协同工作,任何组件出现问题都可能导致整个集群无法正常工作。因此,当遇到启动问题时,需要根据错误提示和Hadoop的日志信息,仔细分析原因并采取相应的解决措施。一般情况下,...
5. **启动Hadoop服务**:运行`start-dfs.cmd`和`start-yarn.cmd`来启动Hadoop的分布式文件系统(DFS)和资源管理器(YARN)。 6. **检查运行状态**:使用`jps`命令查看是否成功启动了Hadoop的进程,如DataNode、...
启动Eclipse后,检查是否能在"Window"菜单中看到"Hadoop Map/Reduce"选项,这表明插件已成功安装。 为了创建Hadoop项目,我们需要在Eclipse中创建一个Map/Reduce Project。这将生成一个包含标准目录结构的项目。...
云计算Hadoop2集群搭建过程涉及多个关键组件,包括NameNode、DataNode、JournalNode、ZooKeeper和ZKFC等。在此过程中,我们将使用4台机器进行示范搭建,这四台机器分别承担不同的职责。搭建过程将包括复制编译后的...
解决方法:NameNode启动时,首先进入安全模式,如果DataNode丢失的block达到一定的比例(1-dfs.safemode.threshold.pct),则系统一直处于安全模式状态,即只读状态。可以通过dfsadmin -safemode leave命令强制离开...
本文档主要讲解了Hadoop分布式集群的初次启动过程,包括配置SSH免密登录、格式化HDFS、启动HDFS和YARN模块等步骤。 一、配置SSH免密登录 在Hadoop分布式集群中,需要配置集群中各个节点之间的SSH免密登录,以便于...
### 使用VMware安装Hadoop全过程详解 #### 一、前言 随着大数据技术的发展,Hadoop作为处理海量数据的重要工具之一,在数据存储与处理领域占据了举足轻重的地位。为了更好地学习和掌握Hadoop平台,本文将详细介绍...
7. **启动Hadoop服务**:通过`start-dfs.sh`和`start-yarn.sh`命令启动Hadoop的各个服务,如DataNode、NameNode、ResourceManager等。 8. **验证安装**:使用`jps`命令查看各节点上的进程,确保Hadoop服务正常运行...
可以使用hadoop自带的一些工具如start-dfs.sh和start-yarn.sh来启动集群,然后通过访问集群的Web界面来检查各个组件的状态是否正常。 5. SSH免密钥登录:Hadoop集群中各个节点间通常需要进行无密码SSH登录以便进行...
- 接着,可以使用start-all.sh(在旧版本Hadoop中)或者start-dfs.sh和start-yarn.sh(在新版本中)来启动Hadoop的各个守护进程。 - 最后,可以通过访问namenode页面或者使用jps命令查看进程,检查Hadoop是否成功...
hadoop是一个大数据处理的基础架构,但是在实际使用过程中经常会碰到各种各样的问题,以下是解决hadoop配置运行错误的一些经验总结: 一、hadoop集群在namenode格式化后重启集群会出现Incompatible namespaceIDS...