Hadoop手动启动过程

注:不失一般性,我们这里以dfs的启动为例子,mapred的启动道理是一样的。
Dfs的启动脚本实际上是$HADOOP_HOME/bin/start-dfs.sh,start-all.sh也正是通过调用这个脚本来达到启动整个 HDFS的目的。start-dfs.sh会按顺序启动namenode, datanode(s)和secondnamenode,我在这里将一一说明:

1. 启动NameNode
【start-dfs.sh】:对于start-dfs.sh来说启动NameNode仅仅就是调用hadoop-daemon.sh [...] start namenode [...]。([]内为省略的参数。)start表示启动namenode,同理stop表示关闭namenode。namenode告诉hadoop- daemon.sh他将启动的是那种类型的节点。
【hadoop-daemon.sh】:hadoop-daemon.sh的工作相对start-dfs.sh复杂一点。他虽然接受两个参数,但实际关心的仅仅只是start/stop这一个。他会更具start或stop采取不同的措施。我们此处仅关心start的过程。在hadoop- daemon.sh发现动作参数是start以后,它会调用hadoop [...] namenode [...]同时把该脚本的output内容导向一个日志文件(位于$HADOOP_HOME/logs下的文件就是这么来的)。
【hadoop】:hadoop脚本是真正办事情的人,就是它启动了namenode。实际上所有的Hadoop的做事的节点:namenode,datanode,secondnamenode,jobtracker,tasttracker都是hadoop脚本启动的—— 这是后话。hadoop脚本会根据namenode决定相应的java main class(org.apache.hadoop.hdfs.server.namenode.NameNode)然后初始化classpath,最后调用java命令启动namenode。
【最终的java命令】:java -Xmx1000m -Dhadoop.log.dir=[$HADOOP_HOME]/logs -Dhadoop.home.dir=[$HADOOP_HOME] -classpath [$HADOOP_HOME/conf+$HADOOP_HOME/hadoop-*-core.jar+$HADOOP_HOME/lib下的所有 jar] org.apache.hadoop.hdfs.server.namenode.NameNode

2.启动DataNode(s)
【start-dfs.sh】:start-dfs.sh启动datanode的时候调用的是hadoop-daemons.sh [...] start datanode [...]。被调用的脚本名字变成的复数,奇迹上它做的事情也是hadoop-daemon.sh的n次(n由datanode的个数决定)。
【hadoop-daemons.sh】:这个脚本只是把请求传递给slaves.sh,当然同时传递一组命令,这组命令的具体用途在slaves.sh中说明。
【slaves.sh】:slaves.sh脚本会根据$HADOOP_HOME/conf/slaves的文件的内容,通过ssh向每个slave发送hadoop-daemons.sh传入的命令。命令很简单:1.cd到$HADOOP_HOME;2.调用hadoop-daemon.sh start datanode,现在一切又都和启动namenode的时候相同了。
【hadoop-daemon.sh】:调用hadoop [...] datanode [...]
【hadoop】:找到java main class(org.apache.hadoop.hdfs.server.datanode.DataNode)运行java命令
【最终的java命令】:java -Xmx1000m -Dhadoop.log.dir=[$HADOOP_HOME]/logs -Dhadoop.home.dir=[$HADOOP_HOME] -classpath [$HADOOP_HOME/conf+$HADOOP_HOME/hadoop-*-core.jar+$HADOOP_HOME/lib下的所有 jar] org.apache.hadoop.hdfs.server.datanode.DataNode

3.启动SecondNameNode
SecondNameNode没有任何复杂的,类似于启动DataNodes,区别就是脚本将根据$HADOOP_HOME/conf/masters文件内的地址启动SecondNameNode。
【最终的java命令】:java -Xmx1000m -Dhadoop.log.dir=[$HADOOP_HOME]/logs -Dhadoop.home.dir=[$HADOOP_HOME] -classpath [$HADOOP_HOME/conf+$HADOOP_HOME/hadoop-*-core.jar+$HADOOP_HOME/lib下的所有 jar] org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode

到这里整个start-dfs.sh就分析完了。可以看出最终脚本都是执行了一个java命令,起动了一个java程序。实际上,你完全可以自己到各个节点上手工敲入上面的java命令启动所有节点。最终的结果都是一样的。
### Hadoop 启动命令的具体步骤 在启动 Hadoop 集群时,通常需要执行一系列命令来初始化并运行 NameNode、DataNode、ResourceManager 和 NodeManager 等组件。以下是具体的启动过程及相关说明: #### 1. 格式化 HDFS 文件系统 在首次使用 Hadoop 或者重新配置集群前,需对 HDFS 进行格式化操作。此操作会清除现有的元数据并创建新的文件系统结构。 ```bash hdfs namenode -format ``` 这一步骤非常重要,在实际部署过程中应谨慎操作,因为一旦完成格式化,原有数据将不可恢复[^3]。 #### 2. 启动 HDFS 服务 通过脚本批量启动 HDFS 的核心组件(NameNode 和 DataNode)。进入 `$HADOOP_HOME/sbin` 目录下执行如下命令: ```bash start-dfs.sh ``` 该命令会在后台依次启动 NameNode 和所有的 DataNode 实例。如果仅想单独启动某个节点,则可以分别调用对应的守护进程管理工具,例如: ```bash [hadoop@slave1 hadoop]$ hadoop-daemon.sh start datanode [^1] ``` 上述指令用于手动开启单台机器上的 DataNode 服务。 #### 3. 启动 YARN 资源调度框架 同样地,可以通过统一入口脚本来激活整个 YARN 架构下的 ResourceManager 及其下属的 NodeManager 组件: ```bash start-yarn.sh ``` 对于个别情况需要单独控制某类角色的状态时,可采用特定语法实现,比如下面这条语句就是用来触发单一 NodeManager 的上线动作: ```bash [atguigu@hadoop101 hadoop-2.7.2]$ sbin/yarn-daemon.sh start nodemanager [^2] ``` 至此,基本完成了分布式计算环境的基础搭建工作。 --- ### 注意事项 为了验证各模块是否成功加载以及正常运转,建议查看日志记录或者利用 jps 命令确认 Java 进程的存在状态。此外,访问 Web UI 页面也是监测健康状况的有效手段之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值