zoukankan      html  css  js  c++  java
  • <Hadoop重装><centos><NameNode失效>

    Overview

    记一次真真切切的NameNode单点故障

    学校机房着火之后,刀片机上的四台服务器,唯独就NameNode彻底宕掉了,去机房看了下硬盘都坏了。。

    所以只能换一个master咯。基本上改一些配置文件就可以。要修改的配置如下:

    core-site.xml
    yarn-site.xml
    mapred-site.xml
    masters
    slave

    本以为修改完了,格式化一下新的NameNode,在start-dfs.sh和start-yarn.sh就可以了。结果进web页面发现datanode全是failed的。

    曾经的血泪指引着我去看了下df -h,结果果然hadoop所在的那个分区,已经99%了。

    磁盘挂载

    说到这个磁盘挂载,就忍不住吐槽,我们这个服务器的磁盘不知道是谁挂的。

    [root@host99 /home/hadoop-2.6.2]$df -h
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sda3        50G   15G   33G  32% /
    tmpfs            32G  216K   32G   1% /dev/shm
    /dev/sda1       485M   39M  421M   9% /boot
    /dev/sdb1       551G  198M  523G   1% /var/lib/mysql
    /dev/sda6       399G  199M  378G   1% /var/lib/mysql/usbsda6

    把两个超大的磁盘全都挂到mysql路径下是想怎样。。。

    于是强迫症忍不了了,总不能让我把hadoop装到mysql路径下吧,况且多个服务器的大磁盘挂载的路径还完全不一样???

    于是,重新挂载,这个时候我脑子也坑了,我想把/usr挂到/dev/sda6上面,但是我直接umount再mount了,也修改了/etc/fstab,但是我忘记备份/usr数据了。。。

    mkdir /new  ###跳板目录
    
    mount /dev/sdb1 /new  ###首先挂载跳板目录
    
    cp -R /home/*  /new  ###复制/home目录所有数据到/new先
    
    rm -rf /home/*       ####可选,主要为了腾出空间给原来的硬盘
    View Code

    我应该先挂一个空目录上去的。这一切都是因为Linux的VFS(虚拟文件系统)机制导致的,正常登录以后,所看到的各个目录,文件都是内核在加载时候构造在内存中的VFS目录树,而不是直接看到硬盘上的实际目录树。当你挂载某个设备到一个VFS挂载点上时(比如/home),系统就把VFS中的这个挂载点/home指向你最后所挂载的那个设备上。那么你现在访问该挂载点时,就会看到你最后挂载在此处的设备。而之前所挂载的设备依然在那里,只不过挂载点/home已经不再指向之前的设备。所以之前的数据是被隐藏了,但并没有删除,若umount挂载后,数据又重新回来了。

    移动Hadoop

    • 为了利用重新挂载的空间,我移动了hadoop的安装路径。因此修改各种配置,基本上跟重装没什么区别了。
    • 首先是hadoop的环境变量, /etc/profile
    export HADOOP_INSTALL=/home/hadoop-2.6.2
    
    export PATH=$PATH:$HADOOP_INSTALL/bin
    #export PATH=$PATH:$JAVA_HOME/bin
    export PATH=$PATH:$HADOOP_INSTALL/sbin
    
    export HADOOP_MAPRED_HOME=$HADOOP_INSTALL
    export HADOOP_COMMON_HOME=$HADOOP_INSTALL
    export HADOOP_HDFS_HOME=$HADOOP_INSTALL
    export YARN_HOME=$HADOOP_INSTALL
    export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_INSTALL/lib/native
    export HADOOP_OPTS="-Djava.library.path=$HADOOP_INSTALL/lib"
    View Code

      然后这样which hadoop就没问题了。因为我其实最后才做这步,所以导致在启动的时候报错:找不到或无法加载主类:xxx

    • 修改各种配置文件
      • core-site.xml   主要是修改tmp.dir的位置。tmp.dir是临时的本地目录,而且缺省情况下mapred.system.dir被设置成"${hadoop.tmp.dir}/mapred/system"。所以tmp.dir是很多临时文件的根目录。包括dfs.name.dir(存放namenode原数据的地址)缺省是${hadoop.tmp.dir}/dfs/name;dfs.data.dir(存放HDFS block的地址)缺省是${hadoop.tmp.dir}/dfs/data;fs.checkpoint.dir(secondaryNameNode存放checkponits的地址)缺省是${hadoop.tmp.dir}/dfs/namesecondary。
      • <property>
                <name>hadoop.tmp.dir</name>
                <value>file:/home/hadoop-2.6.2/tmp</value>
                <description>Abase for other temporary directories.</description>
            </property>
      • hdfs-site.xml: 主要是修改上面提到的dfs.name.dir和dfs.data.dir。其实如果保持缺省的话这个文件就不用改了。
      • <property>
                <name>dfs.namenode.name.dir</name>
                <value>file:/home/hadoop-2.6.2/dfs/name</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
        <value>file:/home/hadoop-2.6.2/dfs/data</value>
        View Code
    • 格式化NameNode: hadoop namenode -format  清空整个文件系统,也就是清空目录树,即原数据。所有关于dataNode的元数据都会丢失。

    Finally

    • 终于一切正常了。关于Hive和Spark的配置更改用的时候再说吧- -。 心累
    满地都是六便士,她却抬头看见了月亮。
  • 相关阅读:
    学习素材、网站
    用 Python脚本生成 Android SALT 扰码
    H面试程序(29):求最大递增数
    常用数据库查询判断表和字段是否存在
    《火球——UML大战需求分析》(第3章 分析业务模型-类图)——3.7 关于对象图
    N个数依次入栈,出栈顺序有多少种
    WIN ERROR:C:WindowsSystem32<LANG_NAME>mstsc.exe.MUI
    大端法和小端法
    freopen()重定向的打开和关闭
    Linux 的 Spinlock 在 MIPS 多核处理器中的设计与实现
  • 原文地址:https://www.cnblogs.com/wttttt/p/6836744.html
Copyright © 2011-2022 走看看