知识点
相关文章
更多最近更新
更多Hadoop1.0.3的start-dfs.sh系列脚本分析
2019-03-28 13:23|来源: 网络
熟悉脚本的启动过程,也就熟悉了Hadoop的执行过程。所以研究并学习hadoop的脚本启动过程是非常有意义的。
对shell命令不是太熟悉,学的比较辛苦,里面还有些地方不明白,或者有错误的地方,希望如果有错误,能有人帮我指出来,谢谢。
(1)start-dfs.sh脚本
1)说明
start-dfs.sh可以单独运行,也可以启动start-all.sh时启动dfs进程。
start-dfs.sh的作用在于启动主节点的namenode,启动secondnamenode,以及各从节点的datanode进程。
脚本注释中有以下三句话:
start-dfs支持upgrage和rollback两个参数,来更改系统的状态。其中upgrage用于升级hdfs文件系统;如果升级失败,可以用rollback对系统进行回滚。具体情况还不太明了。
最后,Run this on master node说明了必须在namenode进程运行的节点上运行该脚本。如果不在core-size.xml文件定义的fs.default.name变量的机器名运行start-dfs.sh或者start-daemon.sh或者hadoop namenode,是无法成功启动namenode守护进程的。已经经过验证。stop-dfs也是一样的。原因:在hadoop脚本中可以看出namenode进程是在本地启动的,所以如果不在core-site.xml定义的节点上运行start-dfs脚本,不会ssh到该节点上去启动namenode。这部分在后续会进行介绍。
2)脚本执行过程
由于脚本不长,而且其它脚本前面的处理也一致,所以对这个脚本作详细说明。后面的几个脚本就挑主要部分进行解释。
#说明:定义usage变量,即start-dfs.sh的使用说明,在后面的内容可以看到,当参数输入错误时,会打印该消息。
usage="Usage: start-dfs.sh[-upgrade|-rollback]"
#说明:定义bin变量,即hadoop home目录中bin所在目录,也即运行start-dfs所在的目录。写这段脚本的作用在于,当不是在bin目录下运行该脚本时,采用绝对路径的方式,获取hadoop home目录,并在后面的脚本中,使用该路径来读取配置文件、运行其它脚本等。
bin=`dirname"$0"`
bin=`cd"$bin"; pwd`
#说明:运行配置脚本配置脚本主要定义了一些环境变量;并且得到HADOOP根目录,变量名为:HADOOP_PREFIX。(HADOOP_HOME环境变量已经过时)
if [ -e"$bin/../libexec/hadoop-config.sh" ]; then
."$bin"/../libexec/hadoop-config.sh
else
. "$bin/hadoop-config.sh"
fi
#说明:处理脚本命令的参数。如果参数个数>=1,将第一个参数赋值给nameStartOpt变量。如果该变量不为-upgrage和-rollback中的任何一个,就打印usage变量消息(前面第一行就是usage的变量定义),并且退出,不再继续执行。
# get arguments
if [ $# -ge 1 ]; then
nameStartOpt=$1
shift
case $nameStartOpt in
(-upgrade)
;;
(-rollback)
dataStartOpt=$nameStartOpt
;;
(*)
echo $usage
exit 1
;;
esac
fi
#说明:启动dfs的所有后台进程。
# start dfs daemons
# start namenode afterdatanodes, to minimize time namenode is up w/o data
# note: datanodes willlog connection errors until namenode starts
#说明:首先运行hadoop-daemon.sh脚本,通过参数’start namenode’启动namenode,后面将介绍hadoop-daemons.sh脚本介绍namenode的启动脚本的执行过程。
"$bin"/hadoop-daemon.sh--config $HADOOP_CONF_DIR start namenode $nameStartOpt
#说明:然后运行hadoop-daemons.sh脚本,通过参数’start datanode启动所有的datanode,后面将介绍hadoop-daemons.sh脚本介绍datanode的启动脚本的执行过程。
"$bin"/hadoop-daemons.sh--config $HADOOP_CONF_DIR start datanode $dataStartOpt
#说明:最后运行hadoop-daemons.sh脚本,通过参数’—hosts masters start secondarynamenode启动secondarynamenode,后面将介绍hadoop-daemons.sh脚本介绍secondarynamenode的启动脚本的执行过程。
"$bin"/hadoop-daemons.sh--config $HADOOP_CONF_DIR --hosts masters start secondarynamenode
相关问答
更多-
mahout哪个版本兼容hadoop1.0.3[2024-01-05]
现在最新编译好的0.9的不改pom的话就是基于hadoop 1.2.1的,你说的1.0.3是一个hadoop不稳定版本,但本质都是1.x系列的 还有就是1.0.3是一个hadoop不稳定版本,还是换个稳定版本用吧 -
第一解决方案 设置Hadoop环境变量 $cd ~ $vi .bashrc paste following to the end of the file #Hadoop variables export JAVA_HOME=/usr/lib/jvm/jdk/ export HADOOP_INSTALL=/usr/local/hadoop export PATH=$PATH:$HADOOP_INSTALL/bin export PATH=$PATH:$HADOOP_INSTALL/sbin expor ...
-
无法在Hadoop Multinode集群中启动start-dfs.sh(unable to start start-dfs.sh in Hadoop Multinode cluster)[2022-04-04]
我想你错过了这一步“将SSH公钥添加到目标主机上的authorized_keys文件” 只需正确重做无密码的ssh步骤。 按照这个: 生成公钥和私钥SSH密钥 ssh-keygen 将SSH公钥( id_rsa.pub ) id_rsa.pub到目标主机上的root帐户 .ssh/id_rsa .ssh/id_rsa.pub 将SSH公钥添加到目标主机上的authorized_keys文件中 cat id_rsa.pub >> authorized_keys 根据您的SSH版本,您可能需要在目标主机上 ... -
通常,每个Hadoop发行版/版本都应该有几个基本脚本文件,如果您有纱线,则可以将此JAVA_HOME环境变量设置为yarn-env.sh文件。 另外,根据您的hadoop版本,您的* -site.xml文件中也可能有路径,例如hdfs-site.xml,core-site.xml,yarn-site.xml,mapred-site.xml和其他一些文件取决于你有什么服务。 很可能您的hadoop-env.sh更新没有重新生成客户端配置文件,除非您通过群集管理器应用程序执行了重新部署的客户端配置文件。 有时 ...
-
没有JobTracker和TaskTracker了。 我们有NodeManager和resourceManager。 在这里你刚开始dfs服务没有启动纱线服务,启动纱线服务运行start-yarn.sh然后只有纱线相关服务才会启动。 如果你想启动所有服务运行start-all.sh (不是一个好习惯) There is no JobTracker and TaskTracker anymore. We have NodeManager and resourceManager. Here you just s ...
-
我同意Chris Gerken的评论,你正在运行start-dfs.sh脚本,它只启动HDFS服务。 如果您想要地图缩减服务(作业跟踪器和任务跟踪器),则需要运行start-mapred.sh 。 此外,来自start-all.sh的已弃用消息提示: echo "This script is Deprecated. Instead use start-dfs.sh and start-mapred.sh" I agree with Chris Gerken's comment, you're runnin ...
-
找出原因,我使用的RHEL的默认shell是csh。 我已经设置了一个自动脚本来将其更改为登录时的bash。 不知何故,它与“#!/ usr / bin / env bash”这一行发生冲突。 一旦我注释掉自动bash开关,它工作正常。 Found out why, the default shell for the RHEL I am using is csh. And I have put an automatic script to change it to bash at login. Someho ...
-
在.bashrc和hadoop-env.sh中设置环境变量 export HADOOP_HDFS_HOME=$HADOOP_HOME set the environmental variable in your .bashrc and hadoop-env.sh export HADOOP_HDFS_HOME=$HADOOP_HOME
-
看起来你错过了hadoop home env var。 export HADOOP_HOME=/opt/hadoop 然后尝试是否有任何工作 hadoop version 像你的问题取决于缺乏env var。 Looks like you are missing the hadoop home env var. export HADOOP_HOME=/opt/hadoop then try is anything working hadoop version Issues like yours ...
-
文档说这是针对getconf 从配置目录中获取配置信息 这是namenodes标志 获取集群中的名称节点列表。 资料来源: https : //hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-hdfs/HDFSCommands.html#getconf Documentation says this for getconf Gets configuration information from the configuration direct ...