您的位置:首页 > 运维架构

Hadoop HDFS笔记

2015-07-20 10:51 183 查看
怎样设计一个分布式分布式系统?

将200M的文件写入到HDFS中的过程,一个NameNode,四个DataNode。存储数据 的意思就是client将某个数据放到某个dataNode里面。client先于NameNode联系,通知NameNode要上传数据,NameNode查看本身记录的数据存储的信息,确定可以将数据存放到那个dataNode里面,然后将这个信息传递给client,再由client将数据传递给DataNode。此时数据存放在一台机器上,为了实现冗余存储,DataNode会将本身的数据水平传递几份。(在传递过程中目的块儿需要通过NameNode交互来确定)。这就是以流水线的当时;来实现冗余。

该文件最终存储在了那些DataNode上面,NameNode都将这些信息记录了下来,此时是问了方便其他客户端对这些数据的读取。

数据上传的时候需要进行分块。

HDFS一次写入,多次读取。如果要修改HDFS上的某一行,要将这个文件下载下来,修改之后再上传到HDFS。现在可以将本地一个文件的内容追加到HDFS上一个文件后面。

hadoop fs -appendToFile ./a.txt hdfs://192.168.8.128:9000/FirstFile.txt

不支持并发写,比如8个块的数据,存储到HDFS中的时候,不能同时写每个块,只有一个个安装顺序来写。

不支持小文件,因为每一个文件都有一个元数据信息,在内存不变的情况下,内存中存放的元数据的个数是不变的。

添加执行权限:hadoop fs -chmod a+x /a.txt 增加执行权限;hadoop fs -chmod -R -x /wcount 对该文件下的子文件或者子文件夹去掉执行权限

修改文件的用户组和用户:hadoop fs -chown -R root:root /wcount 递归的修改wcount文件的子文件或者子文件夹所属的用户组,用户

现在hadoop已经把接口都拆分了,例如:刚才的HDFS的操作,都可以使用HDFS命令。

1 NameNode是负责管理的

2 datenode是负责存储数据的

3 Secondary NameNode不能替代NameNode,只是帮助NameNode做一些事情

客户端先从NameNode中获得一些元数据信息(Metadata ops),NameNode查询元数据信息,元数据信息保存在NameNode内存中一份,磁盘中一份。

元数据信息:文件名字,副本的个数,分成每个块的名字,每个块所在的位置。所以知道元数据信息,就可以知道文件的信息了。

NameNode是整个文件系统的管理节点。它维护着整个文件系统的文件目录树,文件/目录的元信息和每个文件对应的数据块列表。接收用户的操作请求。

文件包括:

fsimage:元数据镜像文件。存储某一时段NameNode内存元数据信息。存储在磁盘上的文件,防止内存中的元数据丢失。(伪分布式不可以实时同步,但是集群模式可以完全实时同步)

edits:操作日志文件。也记录了一些元数据信息,比如一个文件要写多少块儿,每个块在那个地方存储。以日志的形式记录。

fstime:保存最近一次checkpoint的时间(最后一次做还原点的时间,当初问题之后,可以还原到这个位置)

以上这些文件是保存在linux的文件系统中。

镜像文件其实就是将内存的信息存储到磁盘,计算机启动的时候再读取到到内存,重新恢复成关机时候的状态。

Namenode始终在内存中保存metedata,用于处理“读请求”

到有“写请求”到来时,namenode会首先写editlog到磁盘,即向edits文件中写日志,成功返回后,才会修改内存,并且向客户端返回

Hadoop会维护一个fsimage文件,也就是namenode中metedata的镜像,但是fsimage不会随时与namenode内存中的metedata保持一致,而是每隔一段时间通过合并edits文件来更新内容。

Secondary namenode就是用来合并fsimage和edits文件来更新NameNode的metedata的。

SecondaryNameNode

HA(高可靠性)的一个解决方案。但不支持热备。配置即可。

执行过程:从NameNode上下载元数据信息(fsimage,edits),加载到内存,然后把二者合并,生成新的fsimage,在本地保存,并将其推送到NameNode,替换旧的fsimage.

默认在安装在NameNode节点上,但这样...不安全!

hadoop 2.0 不存在SecondaryNameNode,但是带伪分布式中存在SecondaryNameNode

secondary namenode的工作流程

secondary通知namenode切换edits文件

secondary从namenode获得fsimage和edits(通过http)

secondary将fsimage载入内存,然后开始合并edits

secondary将新的fsimage发回给namenode

namenode用新的fsimage替换旧的fsimage

写文件的过程简单点儿来说就是,客户端先将写请求发送到NameNode,NameNode将可以存放数据的DataNode地址告诉给客户端,此时客户端将文件分块儿,

一次写到DataNode中,每成功的写一次文件,edits的就会记录一次写成功了,此时内存中的元数据就会增加一条该文件的信息,然后SecondNameNode就会

通过http协议,将NameNode中的edits和fsImage下载下来进行合并,合并之后将fsImage上传到NameNode,这就完成了一次同步。每次上传一个文件就是一次

此类的循环。

默认情况下SecondaryNameNode和Namenode是放在一个机器中的,但是需要分开放,是为了防止Namenode坏掉之后,整个元数据丢失,所以分开部署

/itcast/hadoop-2.2.0/tmp/dfs/data/current/BP-605606042-192.168.8.128-1434935710032/current/finalized;这个就是上传到HDFS上的块的数据
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: