Good programmers Big Data learning routes Share HDFS learning summary

Good programmers Big Data learning routes Share HDFS study summary , HDFS introduction

 

HDFS (Hadoop Distributed File System) is a distributed file system , is the Hadoop core subprojects project .

 

Design : a large file, large quantities of documents, stored on a large number of distributed servers, in order to analyze massive data operation to take the form of divide and conquer.

 

HDFS important characteristics

 

1. HDFS files physically ** block storage ** (Block) , the block size can configure parameters (dfs.blocksize) is specified, the default size hadoop2.x is version 128M , old version It is 64M

2. HDFS file system will provide a client ** unified abstract tree ** clients to access files by path

3. ** directory structure and the file block information ( metadata ) ** managed by namenode borne node

4. each file block of a storage management datanode borne node

5. HDFS is designed to accommodate a write once, read many of the scenes, and does not support modifying files

 

HDFS advantage

 

1. High reliability

 

   Hadoop by bit data storage and processing capacity strong

 

2. High Scalability

 

   Hadoop is allocated data to complete the calculation tasks available computer cluster  

 

3. efficiency

 

   Hadoop can dynamically move data between nodes , and each node to ensure dynamic balance

 

4. A high fault tolerance

 

   Hadoop can automatically save multiple copies , and can automatically reassign tasks will fail

 

   

 

HDFS shortcomings

 

1. not suitable for low-latency access , can not quickly access

 

   HDFS is a single Master , and all requests for files that go through it, when the request for a long time, there will certainly be delayed. It is suitable for high-throughput scenarios, is writing large amounts of data within a certain time

 

2. unable to efficiently store large amounts of small files

 

   Storing lots of small files, then it will take NameNode a lot of memory to store files, directories, and block information ( metadata )

 

3. does not support multi-user on-write any modified files

 

   Supports only data append ( additional ) , do not support free to modify file

 

For HDFS disadvantage of possible improvements

 

1. Master设计,正在研发中的GFS II也要改为分布式多Master设计,还支持MasterFailover,而且Block大小改为1M,有意要调优处理小文件。(Alibaba DFS的设计,也是多Master设计,它把Metadata的映射存储和管理分开了,由多个Metadata存储节点和一个查询Master节点组成。)

2.  使用缓存或多master设计可以降低client的数据请求压力,以减少延时。

3. 横向扩展,一个Hadoop集群能管理的小文件有限,那就把几个Hadoop集群拖在一个虚拟服务器后面,形成一个大的Hadoop集群。google也是这么干过的。

 

HDFSShell命令

 

| **-help** 输出命令的手册                                     |

| :----------------------------------------------------------- |

| **-ls** 显示目录信息   `hadoop fs -ls   hdfs://hadoop-server01:9000/`   ps:这些参数中,所有的hdfs**路径都可以简写   -->`hadoop fs -ls /`   等同于上一条命令的效果 |

| **-put**  HDSF上传文件 `hdfs dfs -put 本地文件路径 HDFS文件系统路径` *<易错:记 源路径→目的路径>* |

| **-get**  HDFS文件系统中的文件下载回来  `hdfs dfs -get HDFS文件系统路径 本地文件系统路径`      *<易错>*  psHDFS有一个和putget类似的而方法 copyFromlocal 相当于put copyTolocal 相当于 get |

| **-cat**  查看HDFS文件系统中的文件内容  `hdfs dfs -cat HDFS文件系统中文件的路径`  ps:不要查看非文件 |

| **-cp**   HDFS文件系统中进行复制操作  `hdfs dfs -cp HDFS文件系统中的文件路径 目标HDFS文件系统中的路径` |

| **-mv**  HDFS文件系统中的文件进行移动操作  `hdfs dfs -mv HDFS文件系统中的文件路径 目标HDFS文件系统中的路径` ps: 将源文件移动目标路径,这个命令可允许有多个源路径,此时目标路径必须是一个文件夹(目录)不允许不同的文件系统互相移动文件 |

| **-du**   查看HDFS文件系统中文件的大小   `hdfs dfs -du HDFS文件系统中路径中的一个文件` |

| **-mkdir**   HDSF系统中创建文件夹 mkdir 创建文件夹  ps:递归创建+`-p` |

| **-rm**   删除HDFS文件系统中的目录或文件  `hdfs dfs -rm HDFS文件系统路径`   `hdfs dfs -rm -r HDFS文件系统路径`  ps: 只能是单个文件 或 空目录,若参数文件夹中有多个文件 加 -r |

| **-chmod**   更改文件的权限  `hdfs dfs -chmod -R 权限值 HDFS文件系统路径下的文件夹` ps: 所有每三位可以作为一个八进制处理 777是满权限 rwx +R之后, 文件夹下的所有子文件和文件夹都会被修改 |

| **-appendTofile**  追加一个文件到已经存在文件的末尾 `hadoop fs -appendTofile ./hello.txt /hello.txt` |

| **-getmerge**  合并下载多个文件 `hadoop fs -getmerge /aaa/log.* ./log.sum` |

| **-df**  统计文件系统的可用空间信息 `hadoop fs -df -h /`     |

|                                                              |

 

HDFS的工作机制

 

在了解工作机制之前,我们先来看看几个重要角色:

 

 NameNode

 

1. master,它是一个管理者,维护着整个文件系统的文件目录树

2. 储存数据库(Block)映射信息,保存元数据信息包括:文件的所属权,文件的权限,文件大小,时间(Block列表,Block偏移量),位置信息

3. 主要职责:处理客户端读写请求,收集DateNode汇报的Block列表信息<*不会保存到本地系统中*>

 

**DateNode**

 

1. Slave,它是一个从节点,简单理解就是NameNode的奴隶

2. 存储用户的文件块数据

3. 主要职责:定期向NameNode汇报自身所持有的block信息(心跳机制),执行数据块的读/写操作

 

 Secondary NameNode

 

1. 检查点节点,表面上看SecondaryNameNodeNameNode的备份,实际上SecondaryNameNode的主要作用并不是备份

2. 主要职责:定期合并fsimageedit log ,并推送给NameNode

 

问题引入:一个已经 运行十年的集群,最近的fsimage(镜像)是NameNode十年前格式化产生,这么多年的操作日志被edit log(日志)记录已达几百T。那么问题来了,如果我要重启这个集群,这么大日志文件,必定要重启很久,我们的时间并不充裕该 如何解决这个问题?

 

*<问题提取:只要NameNode不格式化或重新启动,fsimage将保持原始状态,edits会不断的增加 >*

 

此时我们引入Secondary NameNode, 把PN中的edit log fsimageSNmerge,此时PN还会继续产生新的日志,记录合并和合并期间的操作,合并之后新fsimage会拷贝回PN,循环上面的操作.以此能保持edit log文件处于比较小的状态,fsimage的时间点也不会太久远

 

**fsimage是如何产生的呢?**

 

HDFS系统要开始运行的时候需要先对NameNode进行一次格式化,那么第一次格式化就会产生一个fsimage文件,但是这个文件是个空文件,NameNode启动的时候会加载fsimage 然后执行edit log加载到内存中,然后立刻向磁盘中写一个新的fsimage文件,这个fsimage就是一个最新的储存信息

 

**紧急情况时,可以辅助恢复NameNode**

 

namenodesecondary namenode的工作目录存储结构完全相同,所以,当namenode故障退出需要重新恢复时,可以从secondary namenode的工作目录中将fsimage拷贝到namenode的工作目录,以恢复namenode的元数据

 

HDFS读写数据流程

 

HDFS读数据流程

 

简单版本

 

客户端将要读取的文件路径发送给namenodenamenode获取文件的元信息(主要是block的存放位置信息)返回给客户端,客户端根据返回的信息找到相应datanode逐个获取文件的block并在客户端本地进行数据追加合并从而获得整个文件


Guess you like

Origin blog.51cto.com/14479068/2431084