`
twtbgn
  • 浏览: 45181 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hadoop dfs 启动过程

阅读更多

今天来看下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安装目录权限的问题

    在部署Hadoop集群的过程中,用户可能会遇到Datanode启动失败的情况。这一问题通常表现为,在尝试启动Hadoop集群时,Datanode无法正常启动,并且在访问NameNode的Web界面时发现缺少Datanode的相关信息。这种情况会...

    hadoop集群维护手册.pdf

    本文档提供了 Hadoop 集群维护的详细指南,涵盖了集群的启动、停止、增加存储量、平衡数据、升级 Hadoop 版本等多方面的内容。 一、Hadoop 集群启动和停止命令 Hadoop 集群可以使用 start-all.sh 命令启动,使用 ...

    大数据之hadoop分布式集群初次启动.pdf

    自动启动 Hadoop 集群可以使用命令 start-all.sh,启动过程将自动启动 HDFS 和 YARN 模块。 五、总结 Hadoop 分布式集群初次启动是大数据处理的重要步骤,涉及到多个知识点,包括 ssh 免密登录、HDFS 格式化、...

    centos安装配置hadoop超详细过程.docx

    6. **启动Hadoop服务**:在Master节点上执行`start-dfs.sh`和`start-yarn.sh`命令启动Hadoop服务。 #### 六、验证Hadoop集群 完成上述步骤后,可以通过以下几个方法来验证Hadoop集群是否正确安装和配置: 1. **...

    最详尽的Hadoop安装过程

    完成以上步骤后,可以通过以下命令启动Hadoop服务: ```bash $HADOOP_HOME/bin/hdfs namenode -format $HADOOP_HOME/sbin/start-dfs.sh $HADOOP_HOME/sbin/start-yarn.sh ``` 至此,您已经成功搭建了一个基本的...

    hadoop搭建过程.docx

    可以使用`start-dfs.sh`和`start-yarn.sh`脚本启动Hadoop集群。 8. **验证安装**:最后,可以通过浏览器访问`http://localhost:50070`和`http://localhost:8088`来查看NameNode和ResourceManager的Web界面,确保...

    hadoop1.2.1配置过程

    ### Hadoop 1.2.1 配置过程详解 #### 一、环境搭建与配置 **1. 创建目录** mkdir /app 在Linux环境下创建一个 `/app` 目录,用于存放JDK和Hadoop等软件。 **2. 解压 JDK 和 Hadoop 到 `/app` 目录** tar -...

    hadoop2.8 window支持bin文件

    在配置完成后,你可以使用`hadoop dfs -mkdir`命令创建HDFS目录,`hadoop dfs -put`上传文件,`hadoop fs -ls`查看目录内容,以及运行MapReduce任务。为了运行MapReduce,你需要将你的Java程序打包成JAR文件,然后...

    搭建单机hadoop环境的过程

    2. **启动Hadoop服务**:通过执行`start-dfs.sh`和`start-mapred.sh`启动Hadoop的DataNode、NameNode、JobTracker和TaskTracker。 3. **运行WordCount示例**:将Hadoop自带的WordCount程序提交到集群,通过`hadoop ...

    笔记1日常hadoop启动遇到的解决.doc

    Hadoop集群的启动过程涉及多个组件的协同工作,任何组件出现问题都可能导致整个集群无法正常工作。因此,当遇到启动问题时,需要根据错误提示和Hadoop的日志信息,仔细分析原因并采取相应的解决措施。一般情况下,...

    hadoop2.7.3 在windows下需要的hadoop.dll winutils.exe等文件(bin目录)

    5. **启动Hadoop服务**:运行`start-dfs.cmd`和`start-yarn.cmd`来启动Hadoop的分布式文件系统(DFS)和资源管理器(YARN)。 6. **检查运行状态**:使用`jps`命令查看是否成功启动了Hadoop的进程,如DataNode、...

    hadoop集群安装过程

    启动Eclipse后,检查是否能在"Window"菜单中看到"Hadoop Map/Reduce"选项,这表明插件已成功安装。 为了创建Hadoop项目,我们需要在Eclipse中创建一个Map/Reduce Project。这将生成一个包含标准目录结构的项目。...

    云计算hadoop2集群搭建过程

    云计算Hadoop2集群搭建过程涉及多个关键组件,包括NameNode、DataNode、JournalNode、ZooKeeper和ZKFC等。在此过程中,我们将使用4台机器进行示范搭建,这四台机器分别承担不同的职责。搭建过程将包括复制编译后的...

    hadoop常见问题及解决方法

    解决方法:NameNode启动时,首先进入安全模式,如果DataNode丢失的block达到一定的比例(1-dfs.safemode.threshold.pct),则系统一直处于安全模式状态,即只读状态。可以通过dfsadmin -safemode leave命令强制离开...

    大数据之hadoop分布式集群初次启动.docx

    本文档主要讲解了Hadoop分布式集群的初次启动过程,包括配置SSH免密登录、格式化HDFS、启动HDFS和YARN模块等步骤。 一、配置SSH免密登录 在Hadoop分布式集群中,需要配置集群中各个节点之间的SSH免密登录,以便于...

    使用VMware安装Hadoop全过程

    ### 使用VMware安装Hadoop全过程详解 #### 一、前言 随着大数据技术的发展,Hadoop作为处理海量数据的重要工具之一,在数据存储与处理领域占据了举足轻重的地位。为了更好地学习和掌握Hadoop平台,本文将详细介绍...

    vmware虚拟机下hadoop集群安装过程

    7. **启动Hadoop服务**:通过`start-dfs.sh`和`start-yarn.sh`命令启动Hadoop的各个服务,如DataNode、NameNode、ResourceManager等。 8. **验证安装**:使用`jps`命令查看各节点上的进程,确保Hadoop服务正常运行...

    hadoop平台的搭建过程简介

    可以使用hadoop自带的一些工具如start-dfs.sh和start-yarn.sh来启动集群,然后通过访问集群的Web界面来检查各个组件的状态是否正常。 5. SSH免密钥登录:Hadoop集群中各个节点间通常需要进行无密码SSH登录以便进行...

    hadoop的安装

    - 接着,可以使用start-all.sh(在旧版本Hadoop中)或者start-dfs.sh和start-yarn.sh(在新版本中)来启动Hadoop的各个守护进程。 - 最后,可以通过访问namenode页面或者使用jps命令查看进程,检查Hadoop是否成功...

    hadoop配置运行错误

    hadoop是一个大数据处理的基础架构,但是在实际使用过程中经常会碰到各种各样的问题,以下是解决hadoop配置运行错误的一些经验总结: 一、hadoop集群在namenode格式化后重启集群会出现Incompatible namespaceIDS...

Global site tag (gtag.js) - Google Analytics