一、HDFS概述1.1HDFS产生背景随着数据量越来越大在一个操作系统存不下所有的数据那么就分配到更多的操作系统管理的磁盘中但是不方便管理和维护迫切需要一种系统来管理多台机器上的文件这就是分布式文件管理系统。HDFS只是分布式文件管理系统中的一种。1.2HDFS定义Hadoop Distributed File System是一个文件系统用于存储文件通过目录树来定位文件其次它是分布式的由很多服务器联合起来实现其功能集群中的服务器有各自的角色。HDFS的使用场景适合一次写入多次读出的场景且不支持文件的修改。适合用来做数据分析并不适合用来做网盘应用。1.3HDFS优缺点优点1高容错性数据自动保存多个副本。它通过增加副本的形式提高容错性。某个副本丢失以后它可以自动恢复。2适合处理大数据数据规模能够处理数据规模达到GB、TB、甚至PB级别的数据。文件规模能够处理百万规模以上的文件数量数量相当之大。3可构建在廉价机器上通过多副本机制提高可靠性。缺点1不适合低延时数据访问比如毫秒级的存储数据是做不到的。2无法高效的对大量小文件进行存储。存储大量小文件的话它会占用NameNode大量的内存来存储文件目录和块信息。这样是不可取的因为NameNode的内存总是有限的理解书包含目录和具体内容小文件存储的寻址时间会超过读取时间它违反了HDFS的设计目标。3不支持并发写入文件随机修改。一个文件只能有一个写不允许多个线程同时写仅支持数据追加append不支持文件的随机修改。1.4HDFS组成架构NameNode(nn):就是Master老板主管、管理者。管理HDFS的名称空间配置副本策略管理数据块Block映射信息处理客户端的读写请求。DataNode就是Slave。NameNode下达命令DataNode执行实际的操作。存储实际的数据块执行数据块的读/写操作。Client就是客户端。文件切分。文件上传HDFS的时候Client将文件切分成为一个一个的Block然后进行上传跟NameNode交互获取文件的位置信息·跟DataNode交互读取或写入数据Client提供一些命令来管理HDFS比如NameNode格式化Client可以通过一些命令来访问HDFS比如对HDFS增删改查操作。Secondary NameNode并非NameNode的热备当NameNode挂掉的时候它不能马上替换NameNode并提供服务。辅助NameNode分担其工作量比如定期合并Fsimage硬盘为了防止断电数据丢失和Edits,并推送给nameNode在紧急情况下可辅助恢复NameNode1.5文件块block大小面试重点HDFS中文件在物理上是分块存储Block块的大小可以通过配合参数dfs.blocksize来规定默认大小在Hadoop2.x版本中128M老版本是64M。block1.....block661.如果寻址时间10ms即查找到目标block的时间约为10ms。2.寻址时间为传输时间的1%时则为最佳状态。传输时间*0.0110ms传输时间为1000ms1s3.目前磁盘的输出速率普遍为100MB/s 块大小100M/s * 1s100M 128M普通机械硬盘80M/s~90M/s块大小80M/s * 1s80M~90M 64M128M固态硬盘200M/s~300M/s块大小200M/s * 1s200M~300M 256M思考为什么块的大小不能设置太小也不能设置太大(1)HDFS的块设置太小会增加寻址时间程序一直在找块的开始位置。(2如果块设置的太大从磁盘传输数据的时间会明显大于定位这个块开始新的位置所需要的时间寻址时间。导致程序在处理这块数据时会非常慢。总结HDFS块的大小设置主要取决于磁盘传输速率。1.6HDFS的Shell操作(10分)1.基本语法bin/hadoop fs 具体的命令bin/hdfs dfs 具体的命令2.常用的操作命令0启动Hadoop集群sbin/start-dfs.sh 启动hdfssbin/start-yarn.sh 启动yarn1-help 输出这个命令的参数2-ls显示目录信息列出 HDFS 根目录下的文件 / 文件夹3-mkdir在HDFS上创建目录/文件夹4-moveFromLocal从本地剪切粘贴hadoop fs -moveFromLocal 本地文件 HDFS路径执行后本地文件会消失文件跑到 HDFS 里和-put的区别-put 复制本地还留着-moveFromLocal 剪切本地不留hadoop fs -touch /路径/文件名在 HDFS 里创建一个【空文件】就像是右键新建文本文档文件大小 0二、