一、hdfs相关概念
namenode包括fsimage和editlog组成。
fsimage:保存系统文件树,记录块大小及组成文件的块、访问权限、文件的复制等级、修改和访问时间。
editlog:记录对数据的增删改查等操作。
datanode:将数据保存到linux文件系统即可,负责存和取。
至于块被放在哪个地方是由namenode构建清单,与datanode沟通。
- 如果只有fsimage则运行过慢,所以设置editlog。
- editlog不断增大怎么解决,secondnamenode冷备份,某个阶段停止使用editlog,使用secondnamenode来操作。
二、hdfs体系结构
基于tcp/ip通信协议名称节点交互,客户端取数据通过RPC协议与数据节点远程交互。
局限性:所有元数据都保存在名称节点的内存中,内存有上限;性能瓶颈,整个hdfs吞吐量受单个名称节点的限制;隔离问题,只有一个名称节点,一个命名空间,无法对不同应用进行隔离;单点故障,secondnamenode冷备份。在hdfs2.0中解决。
三、hdfs存储原理
3.1.冗余保存的问题:
- 加快数据传输速度:当多个客户端同时访问时,可分别访问各节点的数据。
- 易检查数据错误:参照。
- 保证数据可靠性:当数据副本数小于设定副本,自动周期性恢复。
![hdfs优势](https://img-blog.csdnimg.cn/20200208130325979.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NoZW5iZW5nYW5n,size_16,color_FFFFFF,t_70
hdfs文件副本存放策略: - 1.集群内部发起请求,谁发起存给谁
- 2.如果外部某个节点发起写数据请求,随机挑选磁盘不太满,cpu不太忙的节点存放第一个副本,第二个副本放在和第一个副本不同机架上,第三个副本放在第一个副本几机架上的其他节点上。第四个第五个等随机放。hdfs读取数据策略:
- 1.就近读取:调用API获取所属ji架的ID,从NameNode获取副本存放的位置,调用API获取机架ID,如果发现某个数据副本的机架ID与客户端ID相同,则就近获取,如果没有则随机选取一个副本读取。
- 2.数据的错误恢复:当NameNode出错后,暂停一段时间,去SecondNameNode中去将相关元数据恢复。hdfs1.0是冷备份需要暂停服务,2.0热备份不存在暂停。如果数据节点宕机,则将其他节点数据复制。
- 3.数据出现错误:存储时生成的块的校验码判断数据是否出错。
四、hdfs数据的读写过程
4.1hdfs读取数据原理:
4.2hdfs写数据原理
hdfs编程实践
步骤一:新建java工程,拷贝hadoop-common jar包,将hadoop目录下的core-site.xml和hdfs-site.xml文件拷贝到eclipse工作目录的bin目录下。
步骤二:判断hdfs文件系统下是否存在input.txt文件。