`

Hadoop 2.0+YARN启动脚本分析与实战经验

 
阅读更多
start-all.sh脚本现在已经废弃,推荐使用start-dfs.sh和start-yarn.sh分别启动HDFS和YARN。

在新一代的Hadoop里面HDFS称为了统一存储的平台,而YARN成为了统一计算的平台。
(1)调用start-dfs.sh启动HDFS。之后JPS会出现NameNode,DataNode,SecondaryNameNode
(2)调用start-yarn.sh启动YARN。之后JPS会出现ResourceManager,NodeManager
对于每个start脚本首先甚至启动过程中用到的所有脚本,首先都是调用libexec/hadoop-config.sh配置相关环境变量


hadoop-config.sh
设置各种环境变量,包括:
HADOOP_PREFIX   整个Hadoop的安装目录
HADOOP_CONF_DIR   配置文件的目录,一般是Hadoop安装目录下的etc/hadoop/
JAVA_HOME   从操作系统环境变量获取,但是在SSH登陆到slave节点可能会出现问题,所以推荐在hadoop-env.sh中也设置一下。
JAVA_HEAP_MAX   启动每个JVM默认的堆大小,目前是-Xmx1000m
CLASSPATH   找Jar包的地方,一般情况下Jar包存在Hadoop安装目录下的share/hadoop/目录下的common,hdfs,httpfs,mapreduce,tools几个子目录下
HADOOP_LOG_DIR 就是存放日志的地方,默认是Hadoop安装目录下的logs目录,这个很重要,运行中出了问题都是要通过log定位的。
NameNode,DataNode,SecondNameNode,ResourceManager,NodeManager的日志默认都在这个目录下。
不过要注意默认的container的log是在/tmp/logs目录下,害得我找container的log找了很长时间也没找到。
HADOOP_LOGFILE
HADOOP_POLICYFILE
JAVA_LIBRARY_PATH  Java运行时需要通过JNI调用native lib的环境变量。因为在Hadoop代码中与操作系统紧密相关的一些操作和一些压缩算法是有通过C编写的native的系统实现的。就是libhadoop.so和libhdfs.so这样的系统库,通常放在Hadoop安装目录下的lib/native/里面。
HADOOP_OPTS  这个是启动每个JVM时传递过去的参数
HADOOP_COMMON_HOME
HADOOP_HDFS_HOME
YARN_HOME
HADOOP_MAPRED_HOME
这些环境变量是运行Hadoop和YARN程序的环境变量,和我们把Hadoop安装在哪个目录下有关系。
start-dfs.sh
(1)执行hdfs-config.sh设置HDFS专有的环境变量。但是目前貌似没有HDFS专有的环境变量,在这个文件里再次执行了下hadoop-config.sh
(2)启动参数:upgrade,rollback还是正常启动。
(3)然后就是分别调用对应的脚本启动对应的模块
NameNode
DataNode
SecondaryNameNode
ZooKeeper Failover
每个模块都是调用hadoop-daemos.sh启动的。
hadoop-daemons.sh和hadoop-daemon.sh的区别是:前者启动多台机器上的daemon,后者负责在一台机器上启动daemon,前者调用后者。连接这两着的桥梁就是sbin/slave.sh,就是通过ssh登陆到slave机器上,然后在每台slave机器上执行hadoop-daemon.sh。
首先看看hadoop-daemons.sh
这个脚本的参数类似这样:
1
--config /home/orange/hadoop-2.0.0-alpha/etc/hadoop --hostnames localhost --script /home/orange/hadoop-2.0.0-alpha/sbin/hdfs start namenode
因为上面这个例子是启动NameNode,所以带了–hostnames参数,用于指明分别到哪台机器上去运行hadoop-daemon.sh去启动namenode。如果是启动DataNode则不需要这个参数,因为如果不设定这个参数,会通过读取etc/hadoop/slaves文件获取slaves机器信息。
这个脚本的最后有个非常长的命令:
1
exec "$bin/slaves.sh" --config $HADOOP_CONF_DIR cd "$HADOOP_PREFIX" \; "$bin/hadoop-daemon.sh" --config $HADOOP_CONF_DIR "$@"
这个命令表示:在本shell内执行slaves.sh脚本,参数是后面那么一堆东西。
我们去slave.sh那打印出它接收到的参数看看:
1
--config /home/orange/hadoop-2.0.0-alpha/etc/hadoop cd /home/orange/hadoop-2.0.0-alpha ; /home/orange/hadoop-2.0.0-alpha/sbin/hadoop-daemon.sh --config /home/orange/hadoop-2.0.0-alpha/etc/hadoop --script /home/orange/hadoop-2.0.0-alpha/sbin/hdfs start namenode
在这个脚本里面通过ssh登陆到各个slave节点上,然后执行后面的cd进入slave节点的Hadoop安装目录,然后调用hadoop-daemon.sh去执行对应的操作。
hadoop-daemon.sh的参数是
1
localhost: --config /home/orange/hadoop-2.0.0-alpha/etc/hadoop --script /home/orange/hadoop-2.0.0-alpha/sbin/hdfs start namenode
执行hadoop-env.sh设置环境变量,因为即将启动的JVM是由这个shell启动的,所以这个环境变量会传给JVM。
配置启动单点NameNode或者DataNode的运行环境:除了hadoop-config.sh里面的以外还有HADOOP_LOG_DIR,HADOOP_PID_DIR,HADOOP_IDENT_STRING等,这些都是与运行这个daemon的本机相关的变量
最后通过
1
nohup nice -n $HADOOP_NICENESS $hdfsScript --config $HADOOP_CONF_DIR $command "$@" > "$log" 2>&1 < /dev/null &
启动对应的进程,也就是hdfs start namenode命令。其实是调用 bin/hdfs脚本,启动JVM。
hadoop-daemon.sh这个脚本是在每台机器上启动各种JVM前的准备工作,包括设置环境变量什么的。因为每个脚本基本都会调用hadoop-config.sh,这个也不例外,所以我们理解一般情况下hadoop-config.sh里面的环境变量。但是从我的实际使用经验来看,由于操作系统和SSH的问题,会导致SSH登陆到slave节点之后执行shell脚本的时候获取系统环境变量失效的问题。例如,$JAVA_HOME环境变量,看hadoop-config.sh这个文件可知$JAVA_HOME直接从操作系统环境变量获取。但是当hadoop-daemons.sh调用slaves.sh通过ssh登陆到各个slave节点之后去执行hadoop-daemon.sh时,在获取$JAVA_HOME时出现失败的情况。而如果在对应的那台机器上执行 echo $JAVA_HOME是没有问题的。也就是SSH之后的环境变量获取失败。我的debian上就出现了这个问题,这个坑害死人。而在我的CentOS上却没有这样的问题。通过搜索网络得知是因为~/.bashrc不会被SSH调用,而~/.bash_profile或者~/.profile是会被SSH调用的。所以需要在~/.bash_profile或者~/.profile中通过类似下面的语句执行~/.bashrc
1
2
3
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
但是在我的debian上还是搞不定,至今原因未明。有对Debian熟悉的同学如果知道是什么原因可以Email我。
还好hadoop社区为了防止类似的问题,也做了很严谨的策略。在SSH登陆到每台slave之后,都会去调用hadoop-env.sh。这个文件很重要啊。我在看别人的攻略时,看别人在说要在这个hadoop-env.sh文件里设置$JAVA_HOME,但是就在想,我的系统环境变量里已经设置了$JAVA_HOME,难道你一个应用程序的环境变量比我系统的还管用?所以就试了下这个hadoop-env.sh不设置$JAVA_HOME,结果就出现了上面所说的问题。看来hadoop-env.sh正如其名,有关Hadoop的环境变量应该设置在这里,这样才能在社么样的底层系统环境下都能稳定运行。
start-yarn.sh
注意到这个脚本里不再执行hadoop-config.sh,而是执行yarn-config.sh。配置环境变量。(实际上yarn-config.sh还是会调用hadoop-config.sh的)
1
"$bin"/yarn-daemon.sh --config $YARN_CONF_DIR  start resourcemanager
指定日志和pid的格式,也就是:yarn-orange-nodemanager-orange.log
yarn-orange-resourcemanager-orange.log
yarn-orange-nodemanager.pid
yarn-orange-resourcemanager.pid
通过执行下面这行代码,启动ResourceManager对应的JVM
1
nohup nice -n $YARN_NICENESS "$YARN_HOME"/bin/yarn --config $YARN_CONF_DIR $command "$@" &gt; "$log" 2&gt;&amp;1 &lt; /dev/null &amp;
1
"$bin"/yarn-daemons.sh --config $YARN_CONF_DIR  start nodemanager
和启动DataNode类似,也是通过SSH到每台slave节点上之后,执行yarn-daemon.sh启动对应的NodeManager。
1
exec "$bin/slaves.sh" --config $YARN_CONF_DIR cd "$YARN_HOME" \; "$bin/yarn-daemon.sh" --config $YARN_CONF_DIR "$@"
注意这里面也存在和上面一样的问题,所以推荐在yarn-env.sh里面也设置相关环境变量,要不然就会出现启动Job的时候找不到类。。。
总的来说这个启动过程分为多个层次,分别是:整个集群级别的配置,单台机器OS级别的配置,单个JVM级别的配置。
对那句话“系统总是不可靠的,我们要通过软件冗余来使得系统更加可靠”有了更深层次的认识。


摘自:http://www.cnblogs.com/zhwl/p/3670997.html
分享到:
评论

相关推荐

    Python+Spark 2.0+Hadoop机器学习与大数据

    作者林大贵以其丰富的经验,详细介绍了如何利用Python、Spark 2.0以及Hadoop这一组合来构建高效的数据分析解决方案。 Python作为一门强大的脚本语言,因其易读性、丰富的库支持和广泛的应用场景,已经成为数据科学...

    《Python+Spark2.0+Hadoop机器学习与大数据实战》练习.zip

    《Python+Spark2.0+Hadoop机器学习与大数据实战》是一本深入探讨大数据处理和机器学习技术的书籍。在本书的练习部分,作者通过实际案例帮助读者掌握Python、Spark 2.0以及Hadoop的核心概念和技术。这些技术是当前大...

    Hadoop2.0+Kerberos配置

    Hadoop2.0与Kerberos的结合是一种提升Hadoop集群安全性的配置方式,它通过使用Kerberos认证协议来实现服务间的认证。Kerberos是一种网络认证协议,它允许一台主机证明它的身份给另一台主机,而无需共享密钥。以下是...

    Python+Spark2.0+Hadoop机器学习与大数据实战,代码

    《Python+Spark 2.0+Hadoop机器学习与大数据实战》是一本由林大贵所著,清华大学出版社于2018年1月1日出版的书籍。该书主要介绍了Python、Spark 2.0和Hadoop在机器学习与大数据实战中的应用。 从内容上看,该书首先...

    Hadoop2.0开发环境搭建

    涉及到了Hadoop2.0、Hbase、Sqoop、Flume、Hive、Zookeeper的具体环境搭建

    Hadoop 2.0基本架构和发展趋势

    Hadoop 2.0是Apache Hadoop的一个重大升级版本,它引入了YARN(Yet Another Resource Negotiator)作为其核心组件之一,以解决Hadoop 1.x版本中MapReduce框架存在的诸多限制,如扩展性差、资源利用率低以及对多种...

    hadoop2.0安装手册

    hadoop 2.0 详细安装手册。hadoop 2.0 详细安装手册。

    hadoop 2.0

    - **MapReduce**:作为第一代的分布式数据处理模型,在Hadoop 2.0中被优化为运行在YARN之上的一个应用,从而实现了与更多计算框架的共存。 - **YARN**:是Hadoop 2.0的资源管理系统,负责整个集群的资源管理和调度,...

    实战Hadoop2.0 PPT

    【实战Hadoop 2.0】是一套深入学习Hadoop生态系统的PPT文档,涵盖了Hadoop分布式文件系统(HDFS)、资源调度器YARN、数据分析工具Spark、Ambari管理平台等多个关键组件。以下是这些核心知识点的详细解析: 1. **...

    Hadoop 2.0安装部署方法

    Hadoop 2.0作为该框架的一个重要版本,引入了YARN(Yet Another Resource Negotiator)作为资源管理平台,提供了更好的资源管理和任务调度能力。本文档提供了Hadoop 2.0在Linux系统上安装部署的详细步骤和方法。 一...

    Hadoop2.0部署文档

    【Hadoop 2.0 部署详解】 在大数据处理领域,Apache Hadoop 是一个不可或缺的开源框架,尤其在大规模数据存储和处理方面表现出强大的能力。Hadoop 2.0 引入了高可用性(HA)特性,极大地提高了系统的稳定性。本文将...

    实战Hadoop 2.0:从云计算到大数据(第二版)

    实战Hadoop 2.0:从云计算到大数据(第二版)

    Hadoop2.0安装详细步骤

    本文是详细的Hadoop2.0安装方法步骤

    大数据系列-Hadoop 2.0

    0104 实战应用可能涵盖了如何在实际项目中部署和使用Hadoop 2.0,包括数据导入导出、查询分析、容错处理等具体操作。 六、进阶学习 0103 高级Hadoop 2.x、0102 深入Hadoop 2.x这两部分可能涉及更深层次的Hadoop技术...

    Hadoop安装手册_Hadoop2.0.pdf

    hadoop2.0版本安装手册,包含hadoop、hive、hbase、mahout、sqoop、spark、storm、整个体系的安装配置

    Hadoop2.0YARN

    Hadoop 2.0 YARN,全称Yet Another Resource Negotiator,是Apache Hadoop生态系统中的一个核心组件,它在Hadoop 1.0 MapReduce的基础上进行了重大改进,旨在解决资源管理和调度的问题,以提高分布式计算的效率和...

    Hadoop+YARN资源分配+与调度的研究

    ### Hadoop+YARN资源分配+与调度的研究 #### 概述 随着大数据时代的到来,分布式计算成为处理海量数据不可或缺的技术。Hadoop作为一种开源的分布式计算框架,因其高可靠性、可扩展性和容错性等特点,在大数据处理...

    《Hadoop大数据开发实战》教学教案—06Hadoop2.0新特性.pdf

    在课后,可以安排相关的习题以检验学生的学习效果,例如分析HDFS1.0的问题并讨论HDFS2.0是如何解决的,或者让学生设计一个基于YARN的资源调度策略。教学后记应关注学生在课堂上的反应和理解程度,以便于调整后续的...

    Hadoop 2.0部署配置文件示例.zip

    1. YARN(Yet Another Resource Negotiator):Hadoop 2.0引入了YARN作为新的资源管理框架,取代了原有的JobTracker,使得集群资源分配和任务调度更加高效和灵活。 2. HDFS HA(High Availability):为了解决...

    HadoopHA集群 批量启动脚本

    HadoopHA集群 批量启动脚本HadoopHA集群 批量启动脚本HadoopHA集群 批量启动脚本HadoopHA集群 批量启动脚本

Global site tag (gtag.js) - Google Analytics