大数据来源是在全球各地的用户频繁大量地生成和更新数据导致的。处理大量的数据在实时环境中是一项非常具有挑战性的任务。
分布式文件系统是处理大量的实时数据的一种策略。分布式文件系统是多台独立的计算机的集合,将用户的系统作为一个连贯的系统之一。在分布式文件系统中常见的文件可以在节点之间共享,缺点是可伸缩性差、复制、可用性差和非常昂贵的硬件服务器。为了克服这一问题,Hadoop分布式文件系统便应运而生。
Hadoop 分布式文件系统上运行集群的硬件如个人电脑和笔记本电脑。HDFS提供可伸缩性强、容错存储Bigdata。Hadoop分布式文件系统支持数据复制来实现很高的数据可靠性。但是需要额外的存储空间占用------由于复制策略。
HDFS存储空间通过实现重复数据删除技术可以有效地管理。研究的目的是消除通过实现重复数据删除文件复制策略。使用HDFS的方法是一种新型、高效的重复数据删除系统介绍了研究工作。实现重复数据删除策略,计算散列值使用MD5、SHA1算法的文件。为一个文件检查生成的散列值与现有文件来识别重复的存在。如果存在重复,系统将不允许用户上传HDFS的副本。因此在HDFS中能有效地处理内存利用率。
Hadoop1提供了一个分布式文件系统和一个框架分析和转换的非常大的数据集使用MapReduce DG04范式。在接口HDFS的Unix文件系统后,诚实标准牺牲了有利于改善应用程序的性能。
Hadoop的一个重要特征是分区的数据和计算在许多成千上万的主机,和执行应用程序并行计算接近他们的数据。Hadoop集群规模的计算能力、存储能力和I / O带宽通过简单地增加商品的服务器。Hadoop集群在雅虎!跨度40000台服务器,存储40 pb应用程序数据,4000年最大的集群服务器。使用Hadoop全球一百其他组织报告。
HDFS分别存储文件系统元数据和应用程序数据。与其他分布式文件系统,如PVFS CIRT00,Lustre2,GFS(GGL03),HDFS将元数据存储在一个专用的服务器,称为NameNode。应用程序数据存储在其他服务器被称为datanode。所有服务器是完全连接,使用基于tcp协议相互通信。与光泽和PVFS的datanode HDFS不依赖数据保护机制,如RAID数据持久。相反,像GFS、文件内容复制在多个datanode的可靠性。同时确保数据持久性,这种策略有优势,数据传输带宽成倍增加,有更多的机会为附近的定位计算所需的数据。
HDFS名称空间是一个层次的文件和目录。文件和目录NameNode,索引节点表示。inode记录属性权限、修改、访问时间、名称空间和磁盘空间配额。文件内容分为大块(通常128字节,但用户可选择的逐个文件),和每一块独立的文件复制多个datanode逐个文件)(通常3,但用户可选择的。NameNode维护树的名称空间和datanode的映射块。目前的设计有一个为每个集群NameNode。集群可以有成千上万的DataNode和成千上万的HDFS客户每个集群,因为每个DataNode可能同时执行多个应用程序任务。8.2.2。形象和杂志inode和块的列表定义的元数据系统被称为图像的名称。NameNode保持整个名称空间形象在RAM中。持续记录的图像存储在NameNode当地文件系统被称为一个检查点。NameNode HDFS记录变化写前日志叫《华尔街日报》在其本地本地文件系统。块副本的位置并不是持久的检查点的一部分。每个客户端发起的事务被记录在《华尔街日报》,和《文件确认之前刷新和同步发送到客户端。检查点文件由NameNode从未改变;编写一个新文件在重新创建检查点时,当管理员,要求的或由CheckpointNode在下一节中描述。启动期间NameNode初始化名称空间图像从检查站,然后回放从《华尔街日报》。新的检查点和一个空的杂志写回到存储目录NameNode开始前为客户服务。提高耐久性、冗余副本的检查点和日志通常存储在多个独立的本地卷和远程NFS服务器。第一选择阻止损失单个卷失败,第二个选择防止整个节点的失败。如果NameNode遇到错误写《华尔街日报》的一个存储目录从列表中它会自动排除了该目录的存储目录。NameNode自动关闭了如果没有可用的存储目录。NameNode是一个多线程的系统和流程同时来自多个客户端的请求。事务保存到磁盘成为一个瓶颈,因为所有其他线程需要等到同步flush-and-sync过程由其中一个是完整的。为了优化这个过程,NameNode批次多个事务。当一个NameNode启动一个线程的flush-and-sync操作,所有事务批处理当时承诺在一起。剩下的线程只需要检查他们的交易已经保存,不需要启动flush-and-sync操作。
每一块复制DataNode上由两个文件在当地的本地文件系统。第一个文件包含文件记录数据本身,第二块的元数据包括数据和校验和代邮票。数据文件的大小等于物体的实际长度,并且不需要额外的空间,它的名义在传统的文件系统块大小。因此,如果一个街区就半满的需要只有一半的空间完整块的本地驱动器上。
在启动每个DataNode连接NameNode并执行握手。握手的目的是验证名称空间ID和DataNode的软件版本。如果不匹配,NameNode,DataNode自动关闭。
文件系统名称空间ID分配给实例时格式化。名称空间ID总是存储在集群中的所有节点。与不同的名称空间节点ID将无法加入到集群中,从而保护文件系统的完整性。一个DataNode新初始化,没有任何名称空间ID是允许加入集群和接收集群的名称空间ID。握手后与NameNode DataNode寄存器。datanode持久存储他们独特的存储id。存储ID是一个DataNode的内部标识符,这使得它可辨认的即使是重新启动使用不同的IP地址或端口。存储ID分配给DataNode首次当它与NameNode寄存器之后,从未改变。
一个DataNode标识块副本的占有NameNode通过发送一块报告。块报告包含ID,一代邮票和长度为每个块副本服务器主机。第一个块DataNode登记后立即发送报告。随后块报告发送每小时,NameNode提供一个最新的观点,块副本位于集群。在正常操作的DataNode发送心跳确认DataNode NameNode是操作和它所承载的块副本。默认的心跳间隔三秒。如果NameNode没有收到心跳在十分钟内从一个DataNode NameNode认为DataNode的服务和DataNode的块副本由不可用。NameNode然后安排创建新副本的其他datanode上那些块。
心跳也从一个DataNode携带信息的总存储容量,一部分存储在使用和数据传输的数量目前在进步。这些数据用于NameNode块分配和负载平衡的决定。datanode NameNode并不直接发送请求。它使用回复datanode心跳发送指令。指令包括命令块复制到其他节点,删除本地块副本,登记并发送立即报告,并关闭节点。
这些命令是重要的维持整个系统的完整性,因此关键要心跳频繁甚至在大集群。NameNode每秒可以处理成千上万的心跳而不影响其他NameNode操作。8.2.4。HDFS客户用户应用程序访问文件系统使用HDFS客户端,一个图书馆,出口HDFS文件系统接口。像大多数传统的文件系统,HDFS支持操作读、写和删除文件,和操作来创建和删除目录。用户路径引用文件和目录的名称空间。用户应用程序不需要知道文件系统元数据存储在不同的服务器上,或者块有多个副本。
当一个应用程序读取一个文件,HDFS客户端首先问NameNode datanode的列表,主机模块的文件的副本。列表是由网络拓扑距离排序的客户端。客户端直接接触DataNode和请求所需的块的转移。当客户端写道,它首先要求NameNode选择datanode主办的第一块文件的副本。客户端组织管道从节点到节点和发送数据。第一个块填充时,客户端请求新datanode选择主机下一个块的复制品。一条新管道是有组织的,客户端发送文件的字节。datanode的选择为每个块可能是不同的。客户端之间的交互,NameNode datanode如图8.1所示。 一个应用程序将数据添加到HDFS通过创建一个新文件和写数据。文件关闭后,字节写不能修改或删除,除了新数据添加到文件重新附加的文件。HDFS实现单一,多个读取方模型。
HDFS客户端打开一个文件文件编写取得租赁;没有其他客户机可以写入文件。编写客户端定期更新租赁通过发送心跳NameNode。当文件关闭时,租赁被吊销。租赁期限是受软限制和硬限制。软限制期满之前,作者是某些独占访问的文件。如果软限制和客户到期未能关闭文件或更新租赁,另一个客户端可以抢占租赁。如果硬限制到期后(一个小时)和客户端未能续签租赁,HDFS假定客户端已经辞职,会自动关闭该文件代表作家,并恢复租赁。作者的租赁不阻止其他客户机读取文件;一个文件可能有多个并发的读者。一个HDFS文件包含块。当需要一个新块,NameNode分配一块一块独特的ID,并确定一个datanode列表主办的复制品。DataNode形成一个管道,订单的客户端最小化总网络距离最后一个DataNode。字节推到管道作为数据包的顺序。应用程序的字节写在客户端第一个缓冲区。包缓冲区满后(通常是64 KB),数据推到管道。下一个包可以推到管道之前收到的确认之前的数据包。杰出的数据包的数量是有限的杰出的数据包窗口大小的客户端。
数据被写入到一个HDFS文件之后,HDFS不提供任何保证数据是可见的新读者,直到文件关闭。如果一个用户应用程序需要的可见性保证,它可以显式地调用hflush操作。那么当前包立刻推到管道,和hflush操作将等到所有datanode管道承认成功传输的数据包。
hflush之前所有数据写操作然后肯定会看到读者。如果没有错误发生,阻止建设经历了三个阶段,如图8.2说明三个datanode的管道(DN)和一块五包。图中粗线表示数据包,虚线代表确认消息,细线表示控制消息设置并关闭管道。竖线代表活动客户端和三个datanode按照时间顺序从上到下。从t0 t1是管道安装阶段。t1到t2的间隔是数据流阶段,t1的时候第一个数据包发送和t2是确认最后一个包的时间就收到了。这里一个hflush操作传送数据包2。hflush指示和数据包的数据并不是一个单独的操作。最后间隔t2与t3管道近阶段这一块。在数千个节点的集群,失败的一个节点(通常存储故障)日常事件。副本存储在一个DataNode的缺点可能会损坏,因为内存、磁盘或网络。HDFS生成并存储为每个数据块校验和一个HDFS文件。
校验和验证的HDFS客户在阅读帮助发现任何腐败引起的通过客户端,datanode或网络。当一个客户端创建一个HDFS文件时,它计算校验和序列为每个块并将其发送给一个DataNode的数据。一个DataNode校验和存储在元数据文件的数据块文件分开。当HDFS读取一个文件,每个块的数据和校验和运送到客户端。客户对收到的数据和计算校验和验证,新计算校验和匹配它收到的校验和。如果没有,客户通知NameNode腐败的副本,然后从另一个DataNode获取一块不同的复制品。
当客户端打开一个文件阅读,它获取的列表块和每一块的位置从NameNode复制品。每一块的位置是有序与读者的距离。当阅读的内容块,客户最近的副本。如果读取失败,客户端序列的下一个副本。读可能会失败如果目标DataNode不可用时,节点不再主机的复制品,或复制时发现腐败的校验和测试。HDFS允许客户端读取一个文件,是开放的写作。阅读为写作打开一个文件时,还在写最后一块的长度是NameNode未知。在这种情况下,客户要求一个最新副本的长度在开始阅读其内容。HDFS I / O特别优化的设计对于批处理系统,像MapReduce,要求顺序读写高吞吐量。持续努力改善读/写响应时间需要实时数据流或随机访问的应用程序。
大型集群,它可能不是实际连接所有节点在一个平面拓扑。一个常见的做法是节点传播到多个机架。架的节点共享一个开关,齿条开关由一个或多个核心交换机相连。两个节点之间的通信在不同机架必须经过多个交换机。在大多数情况下,网络带宽节点之间在同一架大于节点之间的网络带宽不同的货架。图8.3描述了一个集群有两架,每一个都包含三个节点。NameNode努力确保每个块总是预定数量的副本。NameNode检测到下一个街区已经成为——或者over-replicated当一块从一个DataNode获取报告。当一块复制,NameNode选择删除一个复制品。NameNode将不愿意减少主机副本的货架,其次喜欢删除一个副本从DataNode最少的可用磁盘空间。datanode的目标是平衡存储利用率降低块的可用性。
当一块under-replicated,复制优先队列。一块只有一个副本具有最高优先级,而一块的副本数量大于2/3的复制因子最低优先级。后台线程定期扫描复制队列的负责人决定,新副本的地方。块复制类似政策的新的块位置。如果现有的复制的数量是1,HDFS的地方下一个副本不同的架子上。的块有两个现有的副本,如果两个现有的副本在同一机架上,第三个复制品是放在不同的机架;否则,第三个复制品是放在不同的节点在同一架作为一个现有的副本。这里的目标是降低成本创造新的副本。NameNode也不确保所有副本的一块位于一个架子上。如果NameNode检测到一个街区的副本在一个机架,NameNode将块mis-replicated和复制到另一个架子上使用相同的块放置上述政策。NameNode收到通知之后,创建副本,块变得over-replicated。NameNode然后将决定移除旧的复制品,因为over-replication政策不愿减少机架。