如何手动启动Hadoop

如何手动启动Hadoop
2009-11-20 11:06

From地址为:http://hi.baidu.com/woodyzhou/blog/item/3cab4139cfa7072497ddd8c1.html

 

Hadoop Cluster的启动可以说十分简单,最简单的一种方法就是运行$HADOOP_HOME/bin/start-all.sh,我也相信绝大多数的人都是这么启动的。但是这个脚本里面到底做了些什么呢?让我们来抽丝剥茧的看一看:

注:不失一般性,我们这里以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移植到SUN的Project Caroline上,而后者却是一个只能执行java命令的云环境。所以我才会有上述需求。虽然最后失败了!(其实HDFS的移植算是成功的,但是由于mapred部分必须需要调用系统脚本,所以不得不放弃)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hadoop是一个开源的分布式计算框架,用于处理大规模数据集的存储和处理。它提供了一个可靠的、可扩展的分布式系统,能够在大量普通计算机的集群上运行。为了方便用户启动Hadoop集群,开发者编写了一键启动脚本Hadoop一键启动脚本的作用是简化Hadoop集群的启动过程。用户只需要运行这个脚本,就能够自动完成所有必要的设置和启动步骤,而不需要手动逐一执行命令和配置文件。一键启动脚本通常会检查系统环境和配置文件,确保一切准备就绪,然后根据用户的需求启动特定的Hadoop服务和组件。 一键启动脚本通常包括以下几个主要步骤: 1. 检查系统依赖:脚本会检查系统环境,包括操作系统、Java版本等,确保满足Hadoop运行的最低要求。 2. 配置文件检查:脚本会检查Hadoop配置文件,如core-site.xml、hdfs-site.xml等,确保配置正确且完整。 3. 启动服务:根据用户输入的命令,脚本启动相应的Hadoop服务,如启动HDFS、启动YARN等。在启动过程中,脚本会在终端显示详细的启动日志,方便用户查看和调试。 4. 验证启动脚本会检查Hadoop集群的启动状态,确认所有服务均已成功启动。如果有错误或异常,脚本会显示相关错误信息,并提供解决方案。 总之,Hadoop一键启动脚本能够极大地简化Hadoop集群的部署和启动过程,提高用户的使用效率和便利性。用户只需准备好必要的配置文件和环境,然后运行一键启动脚本,即可轻松启动Hadoop集群。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值