Hadoop学习( HDFS实现分布式存储: |
您所在的位置:网站首页 › hadoop元数据 › Hadoop学习( HDFS实现分布式存储: |
Hadoop 核心-HDFS
前面提过,大数据的特点是: 体量大 类型繁多 值密度低 产生和处理速度快。 当数据集的大小超过一台独立的物理计算机的存储能力时: 就必须对它进行分区并存储到若干台单独的计算机上,然后将这些计算机通过网络连接。 并对网络中的文件系统进行集中管理 , 由此构成 分布式文件系统 (HDFS) HDFS概述 介绍:在现代的企业环境中,单机容量往往无法存储大量数据,需要跨机器存储。 统一管理分布在 :集群上的文件系统称为分布式文件系统 HDFS(Hadoop Distributed File System)是 Apache Hadoop 项目的一个子项目 Hadoop 非常适于存储大型数据 (比如 TB 和 PB) , 其就是使用 HDFS 作为存储系统 HDFS 使用多台计算机 集群 存储文件, 并且提供统一的访问接口, 像是访问一个普通文件系统一样使用分布式文件系统. Google 发布了三篇论文, 被称作为三驾马车, 其中有一篇叫做 GFS 是描述了 Google 内部的一个叫做 GFS 的分布式大规模文件系统 :具有强大的可伸缩性和容错性 Doug Cutting 后来根据GFS的论文, 创造了一个新的文件系统, 叫做 HDFS 适合的应用场景存储非常大的文件: 这里非常大指的是几百M、G、或者TB级别,适合需要高吞吐量,对延时没有要求 的程序。采用流式的数据访问方式: 一次写入、多次读取 数据集经常从数据源生成或者拷贝一 次,然后在其上做很多分析工作 。运行于商业硬件上: Hadoop不需要特别贵的机器,可运行于普通廉价机器; 同样,HDFS也存在缺点 以下应用就不适合在HDFS上运行:低延时的数据访问: 不适合对延时要求在毫秒级别的应用,HDFS是为高吞吐数据传输设计的,因此可能牺牲延时无法大量的存储小文件: 大量小文件,元数据保存在NameNode的内存中, 整个文件系统的文件数量会受限于NameNode的内存大小; NameNode 相当于一个老大, 手下有很多的DataNode 小弟, 小弟存储文件数据, 老大只需要记录不同小弟存储的数据; 当老大的内存满了就不能记录小弟了 无论是大数据还是 1kb小数据 , 记录都在 老大NameNode 的 元数据中…不支持多用户写入/修改文件: 写入/修改, 都是基于 流 访问: 目前在HDFS 的一个文件,同时只能有一个用户写入 , 并且只能写在文件末尾…(还有待升级!!) HDFS 的架构HDFS是一个 主/从(Mater/Slave)体系结构 HDFS由四部分组成,HDFS Client、NameNode、DataNode和Secondary NameNode。
NameNode和DataNode节点: NameNode:就是 master,它是一个主管、管理者。 NameNode 负责管理文件系统的命名空间,属于管理者角色。 它维护文件系统树内所有文件和目录,记录每个文件在各个DataNode.上的位置和副本信息:并协调客户端对文件的访问。 这些信息以两种形式存在:命名空间镜像文件 edits_* 和 编辑日志文件 fsimage_* NameNode元数据: NameNode在内存中保存着整个文件系统的名称 空间和文件数据块的地址映射 整个HDFS可存储的文件数受限于NameNode的内存大小; 位于NameNode节点node1的:hadoop/ dfs/name/ current目录 (由hdfs-site.xml中的dfs .namenode. name. dir 属性指定) NameNode心跳机制 全权管理数据块的复制,周期性的接受心跳和块的状态报告信息(包含该DataNode上所有数据块的列表) 若接受到心跳信息,NameNode认为DataNode工作正常, 如果在10分钟后还接受到不到DN的心跳,那么NameNode认为DataNode已经宕机 , 这时候NN准备要把DN上的数据块进行重新的复制。 确保DataNode 稳定, 进行 存储/记录/备份... 操作, 确保程序稳定…DataNode:就是Slave。NameNode 下达命令,DataNode 执行实际的操作。 存储实际的数据块。执行数据块的读/写操作。 提供真实文件数据的存储服务。 Data Node以数据块的形式存储HDFS文件 典型的块大小是64MB 尽量将数据块分布到各个不同的DataNode节点上。 Data Node 响应HDFS 客户端进行读写请求 Data Node 周期性向NameNode汇报心跳信息 / 数据块信息 / 缓存数据块信息 DataNode节点的数据存储目录为/home/hduser/hadoop/dfs/data (由:hdfs- -site. xml中的dfs.datanode.data.dir 属性指定)。 Secondary NameNode:辅助 NameNode,分担其工作量。 定期合并 fsimage和fsedits,并推送给NameNode,在紧急情况下,可辅助恢复 NameNode。 如果在NameNode上的数据损坏,HDFS中所有的文件都不能被访问 为了保证NameNode的高可用性,Hadoop对NameNode进行了补充Secondary NameNode 相当于NameNode的快照能够周期性地备份NameNode记录NameNode中的元数据等, 也可以用来恢复NameNode,但SecondaryNameNode中的备份会滞后于NameNode. 所以会带来一定的数据损失。 为了防止宕机.通常是将Secondary NameNode 和NameNode 设置为不同的主机。 有点类似于, 老大的助手: 前线在战斗, 司令并不能实时了解情况, 经常有助理讲前选的最新数据报告老大 老大把旧数据 和 新数据 合并就是整个战争的情报数据 ! HDFS的副本机制和机架感知 HDFS 文件副本机制 一个文件有可能大于集群中任意一个磁盘,引入块机制,可以很好的解决这个问题 使用块作为文件存储的逻辑单位可以简化存储子系统 块非常适合用于数据备份进而提供数据容错能力 在 Hadoop1 当中, 文件的 block 块默认大小是 64M, Hadoop2 当中, 文件的 block 块大小默认是128M, block 块的大小可以通过 hdfs-site.xml 当中的配置文件进行指定: dfs.block.size 块大小 以字节为单位 机架感知HDFS分布式文件系统的内部有一个副本存放策略:以默认的副本数=3为例: 1、第一个副本块存本机 2、第二个副本块存跟本机同机架内的其他服务器节点 3、第三个副本块存不同机架的一个服务器节点上 Master/Slave 架构一个HDFS 集群, 由一个 NameNode 和多个 DataNode 组成, 属于典型的Master/Stave模式; 数据读流程: 由客户端向Namelote请求访问某个文件。 Namelede 返回该文件所在位置即在哪个DataNode.上, 然后 由客户端从该DataNode读取数据。 数据写流程: 由客户端向NameNode发出文件写请求NameNode告诉客户该向哪个DataNode写入该文件, 然后由客户将文件写入该DataNode节点,随后该DataNode将该文件自动复制到其他DataNode节点上,默认三份备份。 Hadoop FS Shell 命令:语法: Hadoop fs < args> 其中hadoop: , 命令位于SHADOOP_HOME /bin目录下 fs: 为其参数,表示FS Shell < args>: 是fs的子命令,格式类似于Linux Shell 命令,并且功能也类似,如下: 创建目录:mkdir 列表文件:ls 查看文件:cat 转移文件:put、get、mv、cp 删除文件:rm、rmr 管理命令:test、du、expunge 使用 FS Shell 命令, 操作HDFSHDFS 可以在这里查看, 当前实现要启动 NameNode DataNode … start-all.sh 查看所有文件 hadoop fs -ls / :后面指定要查询文件系统的目录~ 不支持支持同时创建多级目录, 使用-p参数可以递归创建目录 Hadoop fs [-p] -mkdir 文件名 # 在文件系统根目录下创建 user目录 hadoop fs -mkdir /user # 在HDFS中创建“/user/hadoop”目录,前提需要有 /user hadoop fs -mkdir /user/hadoop # 同时创建多个目录,"空格" 分隔区分,创建多个文件目录; hadoop fs -mkdir /user/hadoop/dir1 /user/hadoop/dir2 查看文件 cat指定查看文件路径, 当然前提 HDFS中要有该文件! hadoop fs -cat URI [URI…] # 查看HDFS文件“file1.txt”和“file2.txt” hadoop fs -cat /input2/file1.txt /input2/file2.txt # 查看本地系统文件“file3.txt” hadoop fs -cat file:///home/hduser/file3.txt 转移文件 put ,get, mv, cp put: 对应上传从本地文件系统中复制单个或多个文件到HDFS hadoop fs -put 本地文件1 本地文件2 ... HDFS目录 hadoop fs -moveFromLocal 本地文件 HDFS目录 和put命令类似,但是源文件localsrc拷贝之后自身被删除 # 将本地 /home/hduser/file/file1.txt 文件复制到HDFS目录“/input2” hadoop fs -put /home/hduser/file/file1.txt /input2 # 将多个本地文件复制到HDFS目录“/input2” hadoop fs -put /home/hduser/file/file1.txt /home/hduser/file/file2.txt /input2 get:对应下载复制HDFS文件到本地文件系统,是put的逆操作 hadoop fs -get HDFS上文件 指定存放的本地目录 # 将HDFS文件“/input2/file1”复制到本地文件系统“$HOME/file”中 hadoop fs -get /input2/file1 $HOME/file mv:将hdfs上的文件从原路径移动到目标路径(移动之后文件删除),该命令不能夸文件系统; hadoop fs -mv 文件1 文件2 ... 移动目录 # 将HDFS上的file1.txt、file2.txt移动到dir1中 hadoop fs -mv /input2/file1.txt /input2/file2.txt /user/hadoop/dir1 cp:将文件从源路径复制到目标路径 -f 选项将覆盖目标,如果它已经存在。 -p 选项将保留文件属性(时间戳、所有权、许可、ACL、XAttr)。 hadoop fs -cp 本地文件1 本地文件2 ... HDFS目录 # 在HDFS中复制多个文件到“/user/hadoop/dir1” hadoop fs -cp /input2/file1.txt /input2/file2.txt /user/hadoop/dir1 # 在本地文件系统中复制多个文件到目录“/tmp” hadoop fs -cp file:///file1.txt file:///file2.txt file:///tmp 删除文件 rm , rmr删除指定的文件,只删除非空目录和文件 hadoop fs -rm 非空目录和 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |