博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Shell脚本----安装Hadoop过程小结
阅读量:5028 次
发布时间:2019-06-12

本文共 2932 字,大约阅读时间需要 9 分钟。

启动$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   78 #不会产生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 3 echo $var + echo Hello 'World!' Hello World!

显示结果如下: 3 Hello 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.  $#   $@  shift   $0  $1  $?(在3中已有解释)

#!/usr/bin/env bash                        #mickeysun@mickeysun:~$ ./test.sh mickey sun nameecho $@              #   mickey sun name echo $#              #   3echo $0              #   ./test.sh echo $1              #   mickeyecho $2              #   sunshift                 echo $1              #   sunecho $@              #   sun name echo $#              #   2

 

 

 

 

 

  

转载于:https://www.cnblogs.com/sklpool/p/6194407.html

你可能感兴趣的文章
StackExchange.Redis 官方文档(一) Basics
查看>>
nupkg 之破解 nodejs+electron-packager 打包exe的解包
查看>>
Objective-C 使用 C++类
查看>>
浅谈之高级查询over(partition by)
查看>>
Notes: CRM Analytics–BI from a CRM perspective (2)
查看>>
graphite custom functions
查看>>
列出所有的属性键
查看>>
js获取请求地址后面带的参数
查看>>
[原创]使用java批量修改文件编码(ANSI-->UTF-8)
查看>>
设计模式のCompositePattern(组合模式)----结构模式
查看>>
二进制集合枚举子集
查看>>
磁盘管理
查看>>
SAS学习经验总结分享:篇二—input语句
查看>>
UIImage与UIColor互转
查看>>
RotateAnimation详解
查看>>
系统管理玩玩Windows Azure
查看>>
c#匿名方法
查看>>
如何判断链表是否有环
查看>>
【小程序】缓存
查看>>
ssh无密码登陆屌丝指南
查看>>