It is fine to use MarsEdit in mac to write blog. I hingly recommend it.
sidmeng
2013年8月1日星期四
2013年6月18日星期二
Hadoop 2.0 Datanode
Hadoop 2.0 Datanode 更加细分,将结构分为两个大部分。
DataNode相当于一个包装转发器,将请求发送给相应的处理单元。
DataNode 分为以下两部分:
1、与NameNode汇报的逻辑,block report,heartbeat
2、底层与文件系统交互的datanode 存储逻辑
其中第一部分的调用如下:
DataNode ---> BlockProolManager ---> BPOfferService ---> BPServiceActor
第二部分的调用如下:
DataNode ---> FSDataSetImpl ---> FSVolumeList(FSVolume) ---> BLockPoolSlice
DataNode启动流程:
1、Main
2、StartDatanode
3、初始化BlockPoolManager
4、doRefreshNamenodes
从配置里面读出相应的namespace id,namenode id(HA)
初始化BPOfferService,每个namespace对应一个BPOfferService。
初始化BPActor,每个namenode对应一个BPActor,即Active NameNode和StandbyNameNode各对应一个BPActor。
5、启动所有的BPActor。
BPActor启动过程如下:
(1)与NameNode进行handshake,首先建立BPActor对NameNode的RPC连接
(2)获得namespace info,比较一下与现有的version,目前不会由于svn version不一致直接报错了
(3)verifyAndSetNamespaceInfo,BPOfferService搞定后,调用DataNode的initBlockPool
首先向BlockPoolManager注册该BPOfferService。在这个阶段,初始化FSDataSet,初始化存储层,初始化FSVolume,初始化FSVolumeList和ReplicaMap。启动DataBlockScanner和DirectoryScanner。向底层的文件交互FSVolume注册该BlockPool
(4)handshake第二部,向NameNode注册,NameNode向其内部的DataNode注册该DataNode
(5)设置BlockReport的细节
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
错误一、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开启写模式,这个又是另一篇博客要写的
订阅:
博文 (Atom)