大数据技术之Hadoop HDFS 分布式文件存储系统
沉沙 2018-09-21 来源 : 阅读 1027 评论 0

摘要:本篇教程探讨了大数据技术之Hadoop HDFS 分布式文件存储系统,希望阅读本篇文章以后大家有所收获,帮助大家对大数据技术的理解更加深入。

本篇教程探讨了大数据技术之Hadoop HDFS 分布式文件存储系统,希望阅读本篇文章以后大家有所收获,帮助大家对大数据技术的理解更加深入。

<

多用户写入,任意修改文件HDFS中的文件可能只有一个writer,而且写操作总是将数据添加在文件的末尾。它不支持具有多个写人者的操作,也不支持在文件的任意位置进行修改。可能以后会支持这些操作,但它们相对比较低效。
3.2HDFS的概念
3.2.1数据块
HDFS中数据块默认为64MB,HDFS上的文件被划分为快大小的多个分块,作为独立的存储单元,但是HDFS中小于一个块大小的文件不会占据整个块的空间,HDFS中块这么打是为了最小化寻址开销
   
3.2.2NameNode DataNode 
namenode 管理者
管理文件系统的命名空间,维护文件系统树和整棵树内所有的文件和目录 
客户端(client)通过与namenode和datanode的交互来访问整个文件系统
datanode 工作者
datanode是文件系统的工作节点,他们根据需要存储并检索数据块,并定期想namenode发送锁存储的块的列表
Hadoop提供两种对namenode损坏的容错机制

备份组成文件系统元数据持久状态的文件,一般是将永久状态写入本地磁盘的同时写入一个远程挂载的网络文件系统(NFS)
运行一个辅助namenode,作用是定期通过编辑日志合并名命名空间镜像,来防止编辑日志过大,会保存和明后命名空间镜像的副本,并在namenode故障时启用

3.2.3联邦HDFS 
联邦环境下,每个namenode维护一个命名空间卷,命名空间卷之间相互独立。数据池不再进行划分,集群中的datanode需要到每个namenode中注册,并存储来自多个数据块池中的数据块
3.2.4HDFS的高可用性
在2.x发行版中添加了高可用性的支持,即配置了一对活动-备用namenode,当活动namenode失效时备用的namenode就接管任务,处理来自客户端的请求
3.3命令行接口
文件系统的基本操作 
hadoop fs -help 获得每个命令的详细帮助文件
   
3.4Hadoop文件系统
Hadoop有一个抽象的文件系统的概念,HDFS只是其中的一个实现
接口 
1.HTTP 
2.C语言 Hadoop提供了一个名为libhdfs的c语言库,该语言库是java,FileSystem接口类的一个镜像,开发一般滞后于Java API 
3.FUSE 用户空间文件系统允许吧按照用户空间实现的文件系统整合成一个unix文件系统,Fuse-DFS使用C语言实现的,调用libhdfs作为访问HDFS的接口
3.5Java接口
3.5.1从Hadoop URL读取数据
java.net.URL 通过FsUrlStreamHandlerFactory实例来调用java.net.URL对象的 setURLStreamHandlerFactory方法,每个java虚拟机智能调用一次这个方法。
3.5.2通过FileSystem API读取数据
有时无法在应用中设置URLStreamHandlerFactory实例,在这种情况下,使用FileSystem API 来打开一个输入流
Hadoop文件系统中通过Hadoop Path对象来代表文件,将路径视为一个Hadoop文件系统URI--> 
   
FSFDataInputStream:FileSystem对象中open()方法返回的是FSDataInputStream对象而不是标准java.io类对象
3.5.3写入数据
FileSystem类有一系列新建文件的方法


给准备建的文件一个指定的Path对象,然后返回一个用于写入数据的输出流
public FSDataOutputStream create(Path f) throws IOException 


使用append()方法在一个已有文件末尾追加数据
public FSDataOutputStream append(Path f) throws IOException 
   
FSDataOutputStream:FileSystem实例的create()方法返回FSDataOutputStream对象,
HDFS不支持在文件末尾以外的其他位置追加数据
   


3.5.4目录
FileSystem实例提供了创建目录的方法
punlic boolean mkdirs(Path f) throws IOException 
这个方法可以一次性创建所有必要但还没有的父目录 
3.5.5查询文件系统


文件元数据:Filestatus
FileSystem的getFileStatus()方法用于获取文件或目录的FileStatus对象


列出文件: 
查找一个文件或目录相关的信息: listStatus()方法


文件模式 



PathFilter对象 
通过PathFilter对象,以编程方式控制通配符 
PathFilter对象与java.io.FileFilter一样,是Path对象而不是File对象


删除数据 
使用FileSystem的delete()方法可以永久性删除文件或目录


3.5.6删除数据
3.6数据流
3.6.1剖析文件读取

这个设计中的一个重点是namenode告知客户端每个块中最佳的datanode,并让客户端直接链接到该datanode检索数据 
3.6.2剖析文件写入

namenode选择在那个datanode储存副本,需要对可靠性,写入带宽,读取带宽进行权衡 
3.6.3一致模型
文件系统的一致性模型描述了文件读/写的数据可见性,HDFS为性能牺牲了一些POSIX要求 
新建一个文件之后,它能在文件系统的命名空间中立即可见,但是写入文件的 内容并不能保证立即可见,即使数据流已经刷新并存储,所以长度显示为0; 
当写入超过一个块之后,第一个数据块对新的reader就是可见的,之后的块也不例外,但是,当前正在写入的块对其它reader是不可见的 
3.7通过Flume和Sqoop导入数据 

Apache Flume 将大规模数据流导入HDFS的工具 -例如从另一个系统中收集日志数据
Apache Sqoop 将数据从结构化存储设备批量导入HDFS -例如关系数据库

3.8通过distcp并行复制 
   

   
简单理解是这样的:理解URI和URL的区别,我们引入URN这个概念。URI = Universal Resource Identifier 统一资源标志符URL = Universal Resource Locator 统一资源定位符URN = Universal Resource Name 统一资源名称这三者的关系如下图:也就是说,URI分为三种,URL or URN or (URL and URI)URL代表资源的路径地址,而URI代表资源的名称。通过URL找到资源是对网络位置进行标识,如:    

本文由职坐标整理发布,学习更多的大数据技术相关知识,请关注职坐标大技术云计算大技术技术频道!

本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程