您好,登录后才能下订单哦!
这期内容当中小编将会给大家带来有关Hadoop分布式文件系统中的HDFS是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
超大文件 PB 级
流式数据访问
一次写入,多次读取是最高效的访问模式
商用硬件 (不需要高昂且高可用的硬件)
节点故障率较高,某些应用不适合
低时间延迟的数据访问
要求低时间延迟的数据访问,例如几十毫秒范围不适合在HDFS上运行
大量的小文件
namenode 将文件系统的元数据存储在内容中,因此该文件系统所能存储的文件总数受限于 namenode 的内存容量
根据经验 每个文件、目录和数据块的存储信息大约占150字节
多用户写入,任意 修改文件
HDFS中的文件只支持单个写入者,而且写操作总是以“只添加”方式在文件末尾写数据,它不支持多个写入者的操作,也不支持在文件的任意位置进行修改。
数据块 默认128mb
HDFS 小于一个块大小的文件不会占据整个块的空间
hdfs fsck / -files -blocks
namenode 和datanode
1.备份那些组成文件系统元数据持久状态的文件,一般的配置是,将持久状态写入本地磁盘的同时,写入NFS
运行辅助namenode 一般在单独的物理机运行。主节点挂了之后,启用辅助节点不能保证数据完整性
namenode 管理文件系统的命名空间。它维护着文件系统树及整棵树内所有的文件和目录。这些信息以两个文件形式永久保存在本地磁盘上:命名空间镜像文件和编辑日志文件。namenode 也记录着每个文件中各个块所在的数据节点信息,但它并不永久保存块的位置信息,因为这些信息会在系统启动时根据数据节点信息重建。
datanode 根据需要存储并检索数据块,并且定期向namenode发送它们所存储的块的列表
namenode 容错机制
块缓存
默认 一个块缓存在一个datanode的内存中
提高读 的性能
缓存池
联邦HDFS
联邦HDFS 允许系统通过添加namenode 实现扩展
每个namenode 管理文件系统命名空间的一部分
两两之间互不通信
HDFS 的高可用
namenode 之间需要通过高可用共享存储实现编辑日志的共享
datanode 需要同时向两个namenode 发送数据块处理报告,因为数据块的映射信息存储在namenode 内存中,而非磁盘
客户端需要使用特定的机制来处理namenode 的失效问题,这一机制对用户是透明的
辅助namenode的角色被备用namenode所包含
共享存储的选择 NFS或群体日志管理器(QJM)
故障切换与规避
撤销namenode 访问共享存储目录的权限
屏蔽网络端口
断电等等...
备份namenode 的方式无法实现高可用
HA 的架构支持
namenode 运行端口8020
从本地copy 文件到 hdfs /user/hadoop/ 目录下
hadoop fs -copyFromLocal max_temperature.sh a.sh
把文件复制回本地文件系统
hadoop fs -copyToLocal a.sh my.sh
md5sum max_temperature.sh my.sh
新建目录
hadoop fs -mkdir books
hadoop fs -ls .
默认情况下 安全措施处于停用状态,生产环境应该启用 dfs.premissions.enabled
对文件而言 执行权限没有意义
HDFS 只是其中一种实现
Hadoop 文件系统 Local,HDFS,WebHDFS,Secure WebHDFS, HAR, View, FTP, S3, Azure, Swift
列出本地文件系统根目录下的文件 hadoop fs -ls file:///
尽管运行的MapReduce 程序可以访问任何文件系统,但在处理大数据集的时候,建议还是选择一个有数据本地化优势的分布式文件系统,如HDFS
接口
用户控件文件系统, 允许将用户空寂那实现的文件系统作为Unix 文件系统进行集成。
通过使用Fuse-DFS 模块,HDFS均可以作为一个标准的本地文件系统进行挂载。
NFS 网关是更好的方案,应该选择
使用hadoop 的NFSv3 网关将HDFS挂载为本地客户端的文件系统是可行的。
可以使用Unix程序与该文件系统交互
HDFS仅能以追加模式写文件,因此可以往文件末尾添加数据,但不能随机修改文件
HTTP接口比原生的Java客户端要慢,不要用它来传出特大数据
访问方式 直接访问(namenode 和 datanode 内嵌的 web服务器作为 WebHDFS 的端节点运行 dfs.webhdfs.enabled 设置为true)
通过代理访问
HttpFS代理提供和 WebHDFS 相同的HTTp接口 使用httpfs.sh 脚本
HTTP
c 语言(libhdfs,libwebhdfs)底层代码都是java
NFS
FUSE
java接口
hadoop jar hadoopdemo-1.0-SNAPSHOT.jar URLCat hdfs:///user/hadoop/output/part-r-00000
public class FileSystemCat { public static void main(String[] args) throws Exception { String uri = args[0]; Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(URI.create(uri), conf); InputStream in = null; try { in = fs.open(new Path(uri)); IOUtils.copyBytes(in, System.out, 4096, false); } finally { IOUtils.closeStream(in); } } }
hadoop jar hadoopdemo-1.0-SNAPSHOT.jar FileSystemCat hdfs:///user/hadoop/output/part-r-00000
hadoop jar hadoopdemo-1.0-SNAPSHOT.jar FileSystemDoubleCat hdfs:///user/hadoop/output/part-r-00000
新建文件
FSDataOutputStream
目录 public boolean mkdirs(Path f) throws IOException
查询文件系统
FileStatus 类封装了文件系统中文件和目录的元数据
public boolean exists(Path f) throws IOException
写入数据
FSDataOutputStream create(FileSystem fs,Path file, FsPermission permission) throws IOException FSDataOutputStream append(Path f) throws IOException //代码 String localSrc = args[0]; String dst = args[1]; InputStream in = new BufferedInputStream(new FileInputStream(localSrc)); Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(URI.create(dst), conf); OutputStream out = fs.create(new Path(dst), new Progressable() { public void progress() { System.out.println("."); } }); IOUtils.copyBytes(in, out, 4096, false);
FSDataInputStream seek()是一个相对高开销的操作,需要谨慎使用,建议用流数据来构建应用的访问模式,而非执行大量的seek()方法 hadoop jar hadoopdemo-1.0-SNAPSHOT.jar FileSystemDoubleCat hdfs:///user/hadoop/output/part-r-00000
通过 FileSystem
通过URL读取数据 FsUrlStreamHandlerFactory IOUtils
上述就是小编为大家分享的Hadoop分布式文件系统中的HDFS是什么了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。