设为首页 加入收藏

TOP

初识hadoop 读hadoop权威指南(二)
2019-05-12 12:32:13 】 浏览:121
Tags:初识 hadoop 权威 指南

这篇开始学习hadoop的hdfs

hdfs 是为以流式数据访问模式存储超大文件而设计的文件系统,不需要再高可靠性的昂贵的硬盘上运行,只需要在普通硬盘上就可以,hdfs不适合延迟率要求在毫秒级别的application。hdfs中的文件只有一个写入者,而且写操作总是在文件末尾。

概念 什么是流式数据?

流式数据就是数据不断地传输,实时处理的数据,也是封装成为byte格式。如果觉得不好理解的话,把流式数据和批式数据对比起来可能就比较好。流式数据是为了解决实时数据流,而批式数据是数据全部传输过来后,再进行数据处理。数据批量处理延迟比较大,流式数据是处理大数据的基础技术支持。可以参考这篇文章:http://www.duozhishidai.com/article-905-1.html

hdfs思想:一次写入多次读取模式是最高效的。一个数据集通常由数据源生成或者复制,接着在此基础上进行各种的分析。每个分析至少都会涉及数据集中的大部分数据甚至全部,读取整个数据集的时间比读取第一条数据的延迟更为重要。

磁盘中有块的概念,hdfs中也有块的概念,hdfs中文件被分为以配置的块大小的块,配置为默认64MB。以下是为什把hdfs的块设计大小的原因:

hdfs的块比磁盘的块大,目的时候为了减小寻址开销。通过让一个块足够大,从磁盘转移数据的时间能够远远大于定位这个块开始端的时间。因此,传送一个由多个块组成的文件的时间就取决于磁盘传输送率。 如果寻址时间在10毫秒左右并且传送速率是100 MB/s 为了使寻址时间为传输时间的1%,我们需要100MB左右大小的块,而默认的大小实际为64MB,尽管很多hdfs设置为128MB的块。这一数字将在以后随着新一代的磁盘驱动带来的传输速度加快而继续调整。


概念: 名称节点、数据节点

hdfs集群有两种节点,名称节点和数据节点,以管理者-工作者模式运行,一个作为管理者的名称节点管理多个数据节点(工作者)。名称节点管理文件系统的命名空间,它维护着这个文件系统树及这个树内所有文件和索引目录。这些信息以这两种形式将文件永久的保存在本地磁盘上:命名空间镜像和编辑日志。名称节点也记录着每个文件的每个块所在的数据节点,但它不永久保存块的位置,因为这些信息会在系统启动时有数据点重建。 数据节点存储并提供定位块的服务(被用户或者名称节点调用时),并且定时的向名称节点发送它们存储块的列表。没有名称节点,文件系统将无法使用。如果运行名称节点的机器被毁坏的话,文件系统上的所有文件都会丢失,因为机器无法知道怎么通过数据节点上的块来重建文件。

hadoop提供了两种机制来保障名称节点机器的可靠性:1 复制那些组成文件系统元数据持久状态的文件,hadoop可以通过配置使名称节点在多个文件系统上写入其持久化状态这些写操作是具有同步性和原子性的。一般的配置选择是,在本地磁盘上写入同时,写入一个远程NFS挂载;2 运行一个二级名称节点,虽然它不能作为名称节点使用。这个二级节点的重要作用是定期的通过编辑日志合并命名空间镜像,以防止编辑日志量过大。这个二级节点一般在其他单独的物理计算机上运行,因为他也需要占用大量的cpu和内存来执行合并操作。它会保存合并后的命名空间镜像副本,在名称节点失效后就可使用。但是二级节点比主节点状态滞后,若主节点数据全部丢失,数据丢失在所难免。



客户端调用fileSystem对象的open()方法打开文件。第二步hdfs 使用rpc调用名称节点,以确定文件开头部分的块的位置。对于每个块,名称节点都会返回具有该块副本的数据节点地址。此外数据节点根据他们与客户端的距离进行排序(根据网络集群的拓扑),distributed filesystem 返回一个fsdata InputStream 对象(支持文件定位的输入流)给客户端读取数据,fsdata InputStream 会包装一个DFSInputStream对象。第3步,输入流会调用read()开始读取数据,存储着文件头部信息的块的数据节点地址DFSInputStream 随即与这些最近的数据节点相连通,通过在数据流中重复调用read(),数据会从数据节点返回客户端。到达块的末端时,DSFInputStream 会关闭与数据节点的联系,然后为找到下一个块找到最佳的数据节点(第5步)。客户端从流中读取数据时,块是按照DFSInputStream 打开与数据节点的新连接的顺序读取的。它也会调用名称节点检索下一个需要块的数据节点位置。一旦读取完成,就对文件系统数据输入流调用close()(第6步)。如果在读取过程中在于数据节点通信过程中出现错误,它会找对这个快来说最近的块,它也会记住那个故障的数据节点,保证之后不会在对这个块进行徒劳的尝试。


为了保证数据的完整性,客户端在读取数据节点上的数据时,会验证【校验和】,将其与数据节点上存储的【校验和】进行对比。每个数据节点维护一个连续校验和。

位衰减:存储在存储介质中的数据的性能和完整性缓慢恶化。为了发现以为位衰减而导致的数据不完整,每个数据节点还会在后台运行一个dataBlockScanner(数据块检测程序),定期验证存储在数据节点上所有的块。


Hadoop中,节点之间的进程通信是用远程过程调用(rpc,remote procedures call)来实现的。rpc协议使用序列化将消息编码为二进制流(将被发送到远程节点),此后二进制流被反序列化为原始消息。一般情况下,可用的rpc序列化格式特点如下:

1紧凑(高效的使用存储空间);2快速(读取或写入tb级数据的开销变得极小);3可扩展(可以透明方式读取用旧格式写的数据);4互操作性(可以使用不同语言读取或者写入持久化数据);




namenode中存储着文件的元数据信息,元数据包括四个方面:1文件的名称,2文件属性,3文件的目录结构,4文件所对应的块,块所对应的节点


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇安装eclipse maven插件m2eclipse 下一篇网站--wpo

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目