良いプログラマはビッグデータがルートを学習シェアHDFS学習概要

良いプログラマビッグデータ学習ルート共有 HDFSの研究の概要 HDFSの導入

 

HDFS(Hadoopの分散ファイルシステム)分散ファイルシステムではあるHadoopのコアサブプロジェクト

 

設計分散サーバの多数に格納されている大規模なファイル、ドキュメントの大量、分割統治の形態を取る大規模なデータ操作を分析するためです。

 

HDFS 重要な特性

 

1. HDFSのファイルを物理的** ブロックストレージ**(ブロック)、ブロック・サイズはパラメータ設定することができます(dfs.blocksize)に指定され、デフォルトのサイズのhadoop2.x あるバージョン128M 、古いバージョンそれは64M

2. HDFSのファイルシステムは、クライアントに提供します** 統一抽象ツリー** パスでファイルにアクセスするクライアントを

3. ** ディレクトリ構造とファイルブロック情報メタデータ)** によって管理名前ノード負担ノード

4. 各ファイルブロックストレージ管理のデータノード媒介ノード

5. HDFSは、シーンの多くを読んで、一回の書き込みに対応するように設計されており、ファイルの変更をサポートしていません。

 

HDFSの利点

 

1. 高い信頼性

 

   Hadoopの強いビット・データ記憶及び処理能力によって

 

2. 高いスケーラビリティ

 

   Hadoopのは、計算タスクに利用可能なコンピュータクラスタを完了するために、データを割り当てられ、  

 

3. 効率

 

   Hadoopのは、動的にノード間でデータを移動させることができ各ノードは動的バランスを確保するため

 

4. 高い耐障害性

 

   Hadoopが自動的に複数のコピーを保存することができかつ自動的にタスクが失敗します再割り当てすることができます

 

   

 

HDFSの欠点

 

1. 低遅延アクセスに適していないすぐにアクセスすることはできません

 

   HDFSは単一であるマスター、それを通過するファイルに対するすべての要求、ときに長い時間のための要求は、確かにそこに延期されます。これは、一定時間内に大量のデータを書き込んで、高スループットのシナリオに適しています

 

2. 効率的に小さなファイルを大量に保存することができません

 

   小さなファイルの多くを保存、それはかかります名前ノード、ファイルを保存するために多くのメモリをディレクトリ、情報を遮断するメタデータ

 

3. オンライトマルチユーザ任意の修正されたファイルをサポートしていません。

 

   データのみのサポートのappend(追加、ファイルを変更する自由をサポートしていませんが

 

以下のための HDFSの可能な改善の欠点

 

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并在客户端本地进行数据追加合并从而获得整个文件


おすすめ

転載: blog.51cto.com/14479068/2431084