Shell脚本----安装Hadoop过程小结

启动$HADOOP_HOME/bin或者$HADOOP_HOME/sbin下的脚本,shell终端会显示输出信息;

根据输出信息,利用bash -x [script-name]的信息以及脚本本身,可以定位出错误是从什么位置开始的;

以下是在这些过程中,自己遇到的问题,以及是如何解决的;

1.在调用stop-yarn.sh脚本,关闭ResourceManager以及NodeManger的时候,会出现no NodeManager to stop;

但是自己ssh到自己的slave节点,jps之后仍然显示有NodeManager进程;

解决如下:

要点一: HADOOP_PID_DIR, 配置该环境变量,会在master节点的该目录下生成NameNode进程的PID文件(文件名的格式由脚本指定),该文件保存着NameNode进程的pid号;同理会在各个slave节点的该目录下生成DataNode进程的PID文件;以及SecondaryNameNode节点;

YARN_PID_DIR,配置该环境变量,会在master节点的该目录下生成ResourceManager进程的PID文件,同理会在各个slave节点的该目录下生成NodeManager进程的PID文件;

这两者的默认值为: /tmp;

要点二:  kill进程的时候,根据发出的信号值的不同,对进程的操作不同,比如kill 15 PID与kill 9 PID,在yarn-deamon.sh中:

(stop)
   if [ -f $pid ]; then
      TARGET_PID=`cat $pid`
      if kill -0 $TARGET_PID > /dev/null 2>&1; then  #kill -0 应该是判断进程是否存在
        echo stopping $command
        kill $TARGET_PID             #此处kill默认信号选项为15,term信号
        sleep $YARN_STOP_TIMEOUT
        if kill -0 $TARGET_PID > /dev/null 2>&1; then #发送term信号之后,并sleep之后,查看进程是否仍然存在
          echo "$command did not stop gracefully after $YARN_STOP_TIMEOUT seconds: killing with kill -9"
          kill -9 $TARGET_PID  #发送kill信号,给进程,强行杀死进程;
        fi
      else
        echo no $command to stop
      fi
      rm -f $pid
    else
      echo no $command to stop
    fi
    ;;

要点三:显示no NodeManager to stop; 一种是/tmp目录下的NodeManger的PID文件不存在,一种就是NodeManager的PID文件存在,但是当前没有NodeManager启动;排除后一种情况,因为slave节点仍然有NodeManager进程;可以通过更改这两个环境变量,自己分别指定生成PID的目录;

2. 在一个脚本中,调用另外一个脚本的多种方式:

1 # 不会产生sub-shell(子shell),就在当前进程中加载执行,执行完成后,其生成的变量,仍有效,执行完毕后会返回上一个脚本调用该脚本之后的命令2 . $path/yarn-config.sh   #相当于source, 注意 .与路径之间有空格;
3
4 # 会产生sub-shell,脚本在新建的进程中执行,相当于fork(),exec();其对变量的改变不会反应到父shell;5 # 父shell在子shell执行完毕之后,仍继续执行
6 $path/yarn-daemon.sh   7
8 #不会产生sub-shell,脚本在当前进程中执行完成之后,退出;不会返回上一个脚本继续执行后面的命令9 #可以做个试验: exec ls;会发现执行完毕以后,shell就退出了;
10 exec java -cp $path [classname]

3.  bash -x [script-name]

#!/usr/bin/env bash#hello.class在$HOME目录下

build_command(){   java -cp $HOME hello   return 3} 

var=`build_command`   ++ build_command                      ++ java -cp /home/mickeysun hello                      ++ return 3                      + var=‘Hello World!‘

echo $?               + echo 3                      3echo $var             + echo Hello ‘World!‘                      Hello World!  

显示结果如下:3Hello World!

分析:echo $? 显示的是build_command的返回值;echo $var 显示的是build_command向标准输出中写入的内容;

右边是使用bash -x [script-name],显示的结果如右面所示;

4. CMD=():关于CMD的用法

6. IFS

7. while condition;do

cmd

...

cmd

done < <()

8. read -d ‘‘ -r ARG

9.  $#   [email protected]  shift   $0  $1  $?(在3中已有解释)

#!/usr/bin/env bash
                        #[email protected]:~$ ./test.sh mickey sun name
echo [email protected]              #   mickey sun nameecho $#              #   3
echo $0              #   ./test.shecho $1              #   mickey
echo $2              #   sun
shift
echo $1              #   sun
echo [email protected]              #   sun nameecho $#              #   2
时间: 2025-01-02 17:55:53

Shell脚本----安装Hadoop过程小结的相关文章

Shell脚本安装成服务加入系统启动-service XX does not support chkconfig

背景:Shell脚本是linux运维人员必备利器,怎么样把shell脚本安装成服务且加入系统启动,然后就可以使用服务来管理,这是一个很重要的问题. 当我们运行安装服务的命令时候,假设服务名为myservice #chkconfig --add myservice 常常会出现 service myservice does not support chkconfig 下面讲解正确方法: 1.1给服务脚本添加注释. #vim /etc/init.d/myservice 添加下面两句到 #!/bin/b

shell脚本安装python、pip--不需要选择安装项目

shell脚本安装python.pip--不需要选择安装项目--不管用总报错,必须带上判断符号,while没有这种用法,写在这里为了以后少走弯路,所以不要用下面的执行了 首先把pip-18.0.tar.gz .Python-3.6.5.tgz 安装包放在 /usr/local 下面,按照顺序先安装pip,再安装python.不要先安装或只安装python,否则很容易出错, #!/bin/bash func1(){ while true do echo "安装依赖包" yum -y in

linux (centos) 安装tomcat (用shell脚本安装为服务)

1.下载tomcat 从http://tomcat.apache.org/download-70.cgi链接下载linux版本(tar.gz) 2.解压,上传及赋权限 解压,用WinSCP把解压的安装文件上传到/home/software/tomcat目录 并用   chmod -R 755 /home/software/tomcat命令账权限. 3.编写安装为服务的脚本并运行 shell脚本如下: #! /bin/sh #shell script takes care of starting

zabbix通过shell脚本安装异常问题定位

htxk-106主机信息现象如下: 通过zabbix_get命令 zabbix_get [7189]: Check access restrictions in Zabbix agent configuration 解决方法:通过查看zabbix相关的文件,发现在usr/local/sbin目录下存在zabbix_agend文件,查看文件的时间是7月份的,应该是次机器上以前安装过zabbix导致的, 删除改文件后重启即可: 到这里以为问题已经解决了,可以当通过shell脚本再次安装192.168

shell脚本安装DHCP

#! /bin/bash #这是安装DHCP的shell脚本 echo "安装DHCP"yum -y install dhcp echo "修改配置文件"cat << EOF > /etc/dhcp/dhcpd.confoption domain-name "crushlinux.com";option domain-name-servers 114.114.114.114, 8.8.8.8; default-lease-tim

安装hadoop过程详解

wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-1.2.1/hadoop-1.2.1.tar.gz  hadoop的下载文件 安装jdk http://www.linuxidc.com/Linux/2014-08/105906.htm 安装hadoop 进入 /root/zby/hadoop/hadoop-1.2.1/conf 配置hadoop,主要是配置core-site.xml,hdfs-site.xml,mapred-si

Shell脚本完成hadoop的集群安装

虽然整体实现的自动安装,但还是有很多需要完善的地方,比如说: 1. 代码目前只能在root权限下运行,否则会出错,这方面需要加权限判断: 2.另外可以增加几个函数,减少代码冗余: 3.还有一些判断不够智能: ...... 苦于能力和时间都有限,只能写到这里了. installHadoop文件代码如下: #!/bin/bash # root_password="123456" jdk_tar=jdk-8u65-linux-i586.tar.gz jdk_url=http://downlo

用Shell脚本过滤Hadoop中不能访问的节点

最近使用的一个集群hp1,因为维护集群的人不给力,节点总是过一段时间就掉一两个.今天发现重启hadoop时,HDFS已经进入保护模式了. 决定把slaves节点中的无法访问的节点全部过滤掉,所以写了一个小脚本,在这里记录一下,以后方便直接拿来使用. PS:用C Shell编写的 代码如下: #!/bin/csh if ( $#argv < 1 ) then echo "Usage: $0 host_file" exit 1 endif set NODES = `cat $1` f

shell脚本安装LAMP架构(一键执行)

一键安装代码(可ctr+c哦) 1.挂载的主机IP.密码自行更改 #!/bin/bash #一键自动构建LAMP架构(请使用source执行或者使用.命令执行) #数据库默认密码为123123 #远程挂载 df -hT | grep -o "cifs" if [ $? -ne 0 ];then echo "Start mount" yum install expect -y read -p "请输入提供硬盘主机IP:" gongip /usr/b