zoukankan      html  css  js  c++  java
  • 1. hadoop使用启动命令时报错之分析解决

           今天在学习hadoop启动命令的时候,先jps看了下,发现namenode、datanode都开着,所以想要先停止这些服务,结果输入命令后报错:“WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable”。

           进入lib/native里一看,是空的。。。空的。。。。

           下载的时候,cloudera里的下载链接已经是直接跳转到hadoop的官方网址上,所以直接在链接地址后面加上需要下载的版本号下载下来。去网上搜了下,也有人在cloudera中下载的hadoop也是native是空的情况(不清楚是不是一直都是如此),不管了,问题总得解决吧:直接下载个native然后将原先的覆盖试试。

      在官网找了半天,只发现2.6.5;好吧,还是按照之前的方法,在2.6.5的下载URL中直接修改成2.6.0,顺利的下载了hadoop-2.6.0.tar.gz;通过filezilla将压缩包上传到虚拟机master中,并解压缩(tar -zxvf xxxxx.gz),将解压缩后的native文件夹覆盖到原先的native文件夹中(cp )。再次使用 sbin/stop-dfs.sh命令,已经不报错了,但是,但是,但是服务依旧没有停止,提示“

    Stopping namenodes on [master]
    master: no namenode to stop
    slave2: no datanode to stop
    slave1: no datanode to stop
    master: no datanode to stop
    Stopping secondary namenodes [slave2]
    slave2: no secondarynamenode to stop

    ”。

       不管怎么样,已经解决了一个问题,这是个好事啊,接着继续解决下一个;度娘是不是万能的,我不清楚;广告很多,这是个事实,很多时候出来的前面几个都是广告;不过感觉技术类的搜索稍微好些。很幸运,找到了这个文章 《解决关闭Hadoop时no namenode to stop异常》(地址在此:https://blog.csdn.net/gyqjn/article/details/50805472)。

      按照文章中方法,

        首先,打开shell命令的脚本文件,在最后几行找到了如下的代码,显示如果缺少pid就会显示no XXX to stop

      if [ -f $pid ]; then
        ...#省略几行
        else echo no $command to stop fi rm -f $pid else echo no $command to stop fi ;;

        然后,找到了pid默认存储在 ./tmp中,但貌似tmp是一个临时文件,系统会定时清理这里面的文件,所以pid放在这里面是不安全的,时间一长,文件就会被干掉。

    #   HADOOP_PID_DIR   The pid files are stored. /tmp by default.
    

        最后,用 ps命令(ps -ef)获取namenode等的pid,再用kill命(kill -9 pid)杀死目前运行的namenode等进程。

    ==========================================================================================================================================

      问题解决了,但是pid放在 ./tmp中总归风险比较大,所以,

        方法一,将pid换到不会被定时清理的文件夹中存放,具体方法如下:

          在关闭hadoop的情况下,打开hadoop-daemon.sh和yarn-daemon.sh,找到

    if [ "$HADOOP_PID_DIR" = "" ]; then
      HADOOP_PID_DIR=/tmp
    fi

          将/tmp修改为新的文件夹,比如我修改到了/modules/hadoop-2.6.0-cdh5.11.1/pid中;

        方法二,可以让系统清理 ./tmp时,不去清除 *.pid的文件,具体方法如下:

          由于linux系统会通过定时任务每天执行/etc/cron.daily/tmpwatch脚本,所以在这个脚本里添加一个排除条件,即可解决。

    -X '/tmp/*.pid'

    ==========================================================================================================================================

      以上的方法二只不过是照搬别人写的,并没有实际操作,因为所装的linux系统并无tmpwatch这个脚本,所以pid的位置并没有做修改。

    另外再次感谢以下的几篇文章,给我指明方向啊:

    https://www.cnblogs.com/lexiaofei/p/6358359.html?utm_source=itdadao&utm_medium=referral (下载下来了2.6.0的native,虽然最后并没有使用)

    https://blog.csdn.net/whbo111/article/details/45693753 (编译本地库的命令,也没有用到,不过多学习了一个命令)

    https://blog.csdn.net/yanhe156/article/details/79832877(检查本地库的命令,这个用到了,不错)

    https://blog.csdn.net/gyqjn/article/details/50805472(解决关闭Hadoop时no namenode to stop异常)

    http://www.cnblogs.com/peida/archive/2012/12/19/2824418.html(ps命令)

    https://www.cnblogs.com/peida/archive/2012/12/20/2825837.html(kill命令)

    虽然我是一只爬两天停三天的蜗牛,但是我也会朝着我的目标,爆发我的能量,一直前行,________________留下我印迹
  • 相关阅读:
    JavaEE基础(01):Servlet实现方式,生命周期执行过程
    Spring 框架基础(06):Mvc架构模式简介,执行流程详解
    Spring 框架基础(05):事务管理机制,和实现方式
    多线程搜索与排序
    mybatis的Mapper代理原理
    spring的RestTemplate使用指南
    探索CAS无锁技术
    两年Java的面试经验
    HashMap多线程并发的问题
    解析Mybaits的insert方法返回数字-2147482646的原因
  • 原文地址:https://www.cnblogs.com/xl-201710/p/9451681.html
Copyright © 2011-2022 走看看