分布式文件系统--HDFS

一、HDFS概述及设计目标

1.是什么:Hadoop实现了一个分布式文件系统,源自于Google的GFS的论文,是其克隆版。

2.目标:

非常巨大的分布式文件系统;

运行在普通的廉价的硬件上(普通PC机组成一个集群即可使用);

易扩展、为用户提供性能不错的文件存储服务。(文件分块部署在不同节点上)

二、HDFS架构


HDFS架构:

1 Master(NameNode/NN) ,N个Slaves(DataNode/DN)

NN:

负责客户端请求的响应;负责元数据的管理(文件名称、副本系数、Block存放的DN)

DN:

存储用户的文件对应的数据块(Block);要定期向NN发送心跳信息,汇报本身及其所有的Block信息,健康状况

A typical deployment has a dedicated machine that runs only the NameNode software. Each of the other machines in the cluster runs one instance of the DataNode software. The architecture does not preclude running multiple DataNodes on the same machine but in a real deployment that is rarely the case.

NameNode+N个DataNode,NN和DN部署在不同节点上

三、HDFS副本机制


HDFS副本存放策略:分机架部署存放


一个文件被拆分成多个block,然后每个block存多份,默认是3份。

褐色所在节点是client ,在同一节点存放第一个副本;然后在第二个机架上存放副本;第三个副本存储在与第二个副本相同机架上不同节点上。分机架存放!

四、HDFS环境搭建

1.Hadoop伪分布式安装:

jdk安装,配置环境变量;

SSH安装配置:cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys

五、HDFS shell

与centos下的命令差不多,前面增加hadoop fs +命令

hadoop fs [generic options][-appendToFile...]

[-cat [-ignoreCrc]...][-checksum...][-chgrp [-R] GROUP PATH...][-chmod [-R]PATH...][-chown [-R] [OWNER][:[GROUP]] PATH...][-copyFromLocal [-f] [-p] [-l]...][-copyToLocal [-p] [-ignoreCrc] [-crc]...][-count [-q] [-h] [-v]...][-cp [-f] [-p | -p[topax]]...][-createSnapshot[]][-deleteSnapshot][-df [-h] [...]][-du [-s] [-h]...][-expunge][-find......][-get [-p] [-ignoreCrc] [-crc]...][-getfacl [-R]][-getfattr [-R] {-n name | -d} [-e en]][-getmerge [-nl]][-help [cmd ...]][-ls [-d] [-h] [-R] [...]][-mkdir [-p]...][-moveFromLocal...][-moveToLocal][-mv...][-put [-f] [-p] [-l]...][-renameSnapshot][-rm [-f] [-r|-R] [-skipTrash]...][-rmdir [--ignore-fail-on-non-empty]...][-setfacl [-R] [{-b|-k} {-m|-x}]|[--set]][-setfattr {-n name [-v value] | -x name}][-setrep [-R] [-w]...][-stat [format]...][-tail [-f]][-test -[defsz]][-text [-ignoreCrc]...][-touchz...]

[-usage [cmd ...]]

六、Java API操作HDFS


七、HDFS文件读写流程




读:



八、HDFS优缺点

数据冗余、硬件容错;处理流式的数据访问,一次写入多次读取操作;适合存储大文件;构建在廉价机器上;

低延迟的数据访问;不适合小文件存储

HDFS的优点:

1、处理超大文件

这里的超大文件通常是指百MB、甚至数百TB大小的文件。目前在实际应用中,HDFS已经能用来存储管理PB级的数据了。

2、流式的访问数据

HDFS的设计建立在“一次写入、多次读写”任务的基础上。这意味着一个数据集一旦由数据源生成,就会被复制分发到不同的存储节点中,然后响应各种各样的数据分析任务请求。在多数情况下,分析任务都会涉及数据集中的大部分数据,也就是说,对HDFS来说,请求读取整个数据集要比读取一条记录更加高效。

3、运行于廉价的商用机器集群上

Hadoop设计对应急需求比较低,只须运行在低廉的商用硬件集群上,而无需在昂贵的高可用性机器上。廉价的商用机也就意味着大型集群中出现节点故障情况的概率非常高。HDFS遇到了上述故障时,被设计成能够继续运行且不让用户察觉到明显的中断。

HDFS的缺点:

1、不适合低延迟数据访问

如果要处理一些用户要求时间比较短的低延迟应用请求,则HDFS不适合。HDFS是为了处理大型数据集分析任务的,主要是为达到高的数据吞吐量而设计的,这就可能要求以高延迟作为代价。

改进策略:

对于那些有低延时要求的应用程序,HBase是一个更好的选择,通过上层数据管理项目尽可能地弥补这个不足。在性能上有了很大的提升,它的口号是goes real time。使用缓存或多个master设计可以降低Clinet的数据请求压力,以减少延时。

2、无法高效存储大量的小文件

因为NameNode把文件系统的元数据放置在内存中,所有文件系统所能容纳的文件数目是由NameNode的内存大小来决定。还有一个问题就是,因为MapTask的数量是由Splits来决定的,所以用MR处理大量的小文件时,就会产生过多的MapTask,线程管理开销将会增加作业时间。当Hadoop处理很多小文件(文件大小小于HDFS中Block大小)的时候,由于FileInputFormat不会对小文件进行划分,所以每一个小文件都会被当做一个Split并分配一个Map任务,导致效率底下。

例如:一个1G的文件,会被划分成16个64MB的Split,并分配16个Map任务处理,而10000个100Kb的文件会被10000个Map任务处理。

改进策略:

要想让HDFS能处理好小文件,有不少方法。利用SequenceFile、MapFile、Har等方式归档小文件,这个方法的原理就是把小文件归档起来管理,HBase就是基于此的。

3、不支持多用户写入及任意修改文件

在HDFS的一个文件中只有一个写入者,而且写操作只能在文件末尾完成,即只能执行追加操作,目前HDFS还不支持多个用户对同一文件的写操作,以及在文件任意位置进行修改。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • HDFS是Hadoop的数据储存部分,类似我们电脑的硬盘,主要由NameNode,DataNode****,Sec...
    饥渴计科极客杰铿阅读 3,287评论 0 0
  • 首先,我们在使用前先看看HDFS是什麽?这将有助于我们是以后的运维使用和故障排除思路的获得。 HDFS采用mast...
    W_Bousquet阅读 9,801评论 0 2
  • 当数据量增大到超出了单个物理计算机存储容量时,有必要把它分开存储在多个不同的计算机中。那些管理存储在多个网络互连的...
    单行线的旋律阅读 6,025评论 0 7
  • 和你一样 看得到一路的风景 但必须用力踮脚 和你一样 路过很多行走的人 但必须拼命抬头 和你一样 我也想拥有一双健...
    陌上离々阅读 1,436评论 0 5
  • 今天的由于身体的原因,我的感觉陷入到混沌状态,头脑一直处于空白的状态,思维能力急速下降,理解力也脱节,刚才孩子和我...
    尚巾林阅读 1,594评论 0 0

友情链接更多精彩内容