HDFS—configuration
org.apache.hadoop.conf 提供访问配置文件的借口
配置文件是 name/value 的XML 文件,通常每一个元素都是以<code>String</code> 或者 {@link Path} 的方式给出的,如果是以前者的方式给出的,则会配合类路径来检查这个文件,如果是后者方式给出的,则直接检查对应的文件,比如有下面的定义:
1: <property>
2: <name>basedir</name>
3: <value>/user/{user.name}</value>
4: </property>
5:
6: <property>
7: <name>tempdir</name>
8: <value>{basedir}/tmp</value>
9: </property>
当有conf.get(“tempdir”) 这样的调用时,{basedir} 被解析为配置的另一个属性,同样{user.name}最终也被解析为系统中具有这个名称的值。
HDFS—Protocol
core 文件夹下有个versionProtocol 是所有使用Hadoop RPC 的父类。它只具有一个获取版本的方法。
ClientDatanodeProtocol、InterDatanodeProtocol、ClientProtocol、DatanodeProtocol 和 NamenodeProtocol 是他们的子类。关系如下:
他们在Client、Namenode 和 Datanode 三方的关系如下图:
在hdfs protocol 下是一些公用的Protocol,UML 如下(没有包括namenode 内的protocol):
NamenodeProtocol
InterDatanodeProtocol
DatanodeProtocol
ClientProtocol(最复杂重要,实现了客户端操作名字空间的接口)
ClientDatanodeProtocol
最后附上namenode 启动的流程
Hadoop 集群安装
一、集群环境
IP: 192.168.1.31/u31(机器名)/slave、192.168.1.32/u32(机器名)/slave、192.168.1.33/u33(机器名)/master
OS:Ubuntu10 64bits
java:1.6.0
Tool:xshell
HDFS—protocol
org.apache.hadoop.hdfs.protocol 包内类:
- AlreadyBeingCreatedException.java
- The exception that happens when you ask to create a file that already is being created, but is not closed yet.
- 当要求创建一个正在被创建且没有被关闭的文件会抛出这样的错误
- Block.java
- A Block is a Hadoop FS primitive, identified by a long.
- Block 是Hadoop FS 的基元,由long 型定义
- BlockListAsLongs.java
- This class provides an interface for accessing list of blocks that has been implemented as long[]. This class is usefull for block report. Rather than send block reports as a Block[] we can send it as a long[].
- 这个类提供了一个long[] 类型的借口用于访问一组数据块,这个类在DataNode 向NameNode 汇报块时有用。
- BlockLocalPathInfo.java
- A block and the full path information to the block data file and the metadata file stored on the local file system.
- 本地数据块和它在本地元数据的全路径。(0.20.0 版本无,故删除)
- ClientDatanodeProtocol.java
- An client-datanode protocol for block recovery
- 继承VersionedProtocol 的一个接口,用于块恢复。
- ClientProtocol.java
- ClientProtocol is used by user code via {@link org.apache.hadoop.hdfs.DistributedFileSystem} class to communicate with the NameNode. User code can manipulate the directory namespace, as well as open/close file streams, etc.
- ClientProtocol 是Client 端通过org.apache.hadoop.hdfs.DistributedFileSystem 类打开、关闭文件流操作的目录名字空间的
- DatanodeID.java
- DatanodeID is composed of the data node name (hostname:portNumber) and the data storage ID, which it currently represents.
- DatanodeID 由数据节点名称(主机名:端口号)和数据存储ID
- DatanodeInfo.java
- DatanodeInfo represents the status of a DataNode. This object is used for communication in the Datanode Protocol and the Client Protocol.
- DatanodeInfo 代表DataNode 的状态。这个对象是用来在Datanode Protocol 和Client Protocol中进行通信的。
- DataTransferProtocol
- The Client transfers data to/from datanode using a streaming protocol.
- 定义了一些public static final byte 变量,用于Client 流式数据传输协议。
- FSConstants.java 接口
- Some handy constants
- 常用的变量。(每次最小写入5 个数据块,路径长度最多8k,深度最深1k)
- LocatedBlock.java
- A LocatedBlock is a pair of Block, DatanodeInfo[] objects. It tells where to find a Block.
- LocatedBlock 是一组Block,DatanodeInfo[] 对象集合,通过它可以找到一个块(关于块,参考)
- LocatedBlocks.java
- Collection of blocks with their locations and the file length.
- 通过LocatedBlock.java 或者一组数据块的位置和文件长度。
- QuotaExceededException 继承IOException
- The message for the exception specifies the directory where the quota was violated and actual quotas.
- 消息指出异常目录和实际限制
- UnregisteredDatanodeException
- This exception is thrown when a datanode that has not previously registered is trying to access the name node.
- 这个异常是为了应对没有在NameNode 上注册的数据节点要进入NameNode 时抛出的异常,比如其他hadoop 集群部署。
UML 图:
Eclipse Modeling Tools(Eclipse 建模工具)
过程:
- 安装UML2.0 链接==》》失败:在Eclipse/help/Install Detail 可以看到安装了UML 2.0 ,但new->other-> 没有UML 建模选项(安装方法:下载UML2.0 zip 包,features 内文件拷贝到eclipse features 包内,plugin 内文件拷贝到eclipse plugin 包)。
- 在stackoverflow 看到有说明UML2.0 在eclipse 3.6 之上版本不兼容。可以安装,过程比较复杂了,推荐papyrus 。
- 安装papyrus ,同过程一,安装链接 ==》》失败:在Eclipse/help/Install Detail 看不到安装的papyrus,且新建不了UML 文件。
- 在papyrus 链接 查看文档,里面提到的Eclipse Modeling Platform 图标无,故下载Eclipse Modeling Tools 安装,按文档提示安装papyrus,可用。
PS:感觉Eclipse 好处在于不用安装,即下即用,每次关闭Eclipse 都会保存project 文件读取位置,再次打开或者其他版本Eclipse 打开也能方便使用。