2013年5月22日星期三

ViewFS in hadoop

  ViewFS对于federation这种多namespace具有很好的操作性,省却了用户设置scheme这种繁琐的行为,十分方便。
     相关的类:
     INodeTree<T>     抽象类,实际的实现类需要实现getTargetFileSystem方法,泛型中的T是FileSystem类。
     内部实现有:
     root,根节点,挂载的根节点
  abstract static class INode<T> {
    final String fullPath; // the full path to the root
    public INode(String pathToNode, UserGroupInformation aUgi) {
      fullPath = pathToNode;
    }
  };
  类似于FSNameSystem中的INode。INode两个子类,一个是INodeDir,一个是INodeLink。
  static class MountPoint<T> {
    String src;
    INodeLink<T> target;
    MountPoint(String srcPath, INodeLink<T> mountLink) {
      src = srcPath;
      target = mountLink;
    }

  }
MountPoint实际上就是一个映射,mount name --->  filesystem+scheme。
     ViewFS继承自AbstractFileSystem,同RawLocalFileSystem和DistributedFileSystem一样。ViewFS中有一个INodeTree实例。其实INodeTree所有的挂载行为都是通过conf传递的,我们遇到的一个test case没有通过的问题,即TestFSMainOperationsLocalFileSystem无法跑过就是因为挂载点通过conf传递不正确,导致后续无法进行test。
     ViewFS用到的conf有:
     fs.viewfs.mounttable.default.link.$LINK     $PATH
     fs.viewfs.mounttable.homedir.$HOME     $HOME

     前者是挂载的位置,后者是挂载的home,出问题时候大多去检查一下conf,尤其是抛出ViewFS resolve无法找到文件的异常。

2013年5月21日星期二

使用NFS服务提高hadoop 可靠性


  众所周知 hadoop是一个单点系统,即所谓的spof,所以元数据的保护就是重中之重。目前元数据写两份,分别是本地的磁盘,远程的磁盘。还有一个secondary namenode做冷备。写到远程的磁盘就需要的是NFS服务了。
     NFS(Network File System, 网络文件系统)可以通过网络将分享不同主机(不同的OS)的目录——可以通过NFS挂载远程主机的目录, 访问该目录就像访问本地目录一样。
    首先下载NFS,网址是http://sourceforge.net/projects/nfs/files/ 选择合适的版本下载。到server和client机器安装。
    编辑server主机的文件/etc/exports /etc/hosts.allow /etc/hosts.deny三个文件。
    对/etc/exports  加入例如:/data0 10.39.2.121(rw,no_root_squash)
    其中/data0为对外开放的目录  后面是机器加权限,详细说明见 http://nfs.sourceforge.net/nfs-howto/ar01s03.html
    启动nfs server的服务:
/etc/init.d/portmap start  

/etc/init.d/nfslock start  

/etc/init.d/nfs start   
    在client端同样启动相同的服务。
    同时在client端挂在远程目录   sudo mount master:/data0/ /data1
   /data1是client端本地目录。

CDH4源码 eclipse导入问题

    CDH4向eclipse导入会出现一些问题,导致大面积的错误,看上去十分不爽,解决该问题的方法如下。
    错误一、An internal error occurred during: "Updating Maven Project". Unsupported IClasspathEntry kind=4
maven出现这个问题,
解决方法
     1.Open you terminal, go to your project folder and do “mvm clean eclipse:eclipse”
     2.Right-click on your project, select Maven -> Remove Maven Nature
    错误二、出现access的错误
eclipse     --->     preference     --->     Error/Warnnings     --->     Forbidden reference     设置为warnning
    如上图所示。


安装CDH4遇到的问题

安装CDH4.2.0遇到的一些问题,记录下来:

1、LZO的问题
由于CDH4中JobContext由class变为一个interface,所以直接使用原先的lzo的jar包会出现问题,替换为cloudera提供的一个rpm包中的lzo
2、codec配置
配置core-site.xml
 <property>
    <name>io.compression.codecs</name>    <value>org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.BZip2Codec,org.apache.hadoop.io.compress.DeflateCodec,org.apache.hadoop.io.compress.SnappyCodec,com.hadoop.compression.lzo.LzopCodec</value>
  </property>
注意codec不要有空格
3、切换hadoop用户报错
报错为cannot set user id: Resource temporarily unavailable错误,说明资源不足,经检查是打开文件超出限制
解决方法:在32内核中除了设置/etc/security/limit.conf外,还需要设置/etc/security/limits.d/90-nproc.conf

hadoop 2.0 namenode启动流程1


HDFS层面
一、NameNode
包 包含有org.apache.hadoop.hdfs.server.namenode,org.apache.hadoop.hdfs.server.namenode.ha
NameNode多出的两个功能1、HA     2、Federation
HA:重要的HA
两个角色     AciveNameNode
                   StandbyNameNode
原先NameNode大部分功能都是由NameNodeRpcServer承担
但是只是细分了,管理功能还在NameNode类
NameNode启动流程:

NameNode启动后,都处于standby状态,需要手动去设置某个namenode为active状态。


启动后过程:
1、如果是standby节点,那么他的作用是两个,一个是tail qjm的editlog,一个是做checkpoint,替代seconday namenode的作用
这两个线程是standby最重要的作用,能够做到热备,当然热备还是有一定时间的差距。其他的rpc也都开启,所有的block report,heartbeat会发到两台机器上。
2、如果通过命令,手动调整某台机器变为Active Namenode,将editlog开启写模式,这个又是另一篇博客要写的