HDFS简介
时间:2022-07-25
本文章向大家介绍HDFS简介,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
HDFS(Hadoop Distributed FileSystem)hadoop 分布式文件系统
把数据文件分布到不同的节点上的目的是什么?在不同的节点上分布式计算,计算靠近数据的原则。
Hadoop集群硬件部署结构:
* Rack为机架,Switch为交换机(千兆,百兆) * 浅黄色服务器为Master节点(雇主,负责统一管理) * 灰蓝色服务器为Slave节点(奴隶,负责具体任务)
HDFS数据存储集群模型
- 一个HDFS集群是由一个Namenode和一定数目的Datanodes组成。(在hadoop2.0中解决了单点问题)
- Namenode:负责管理文件系统的名字空间,记录数据块的位置和副本信息。统一调度datanode进行数据块的创建、删除和复制。
- Datanode:一般是一个节点一个,负责管理它所在节点上的存储。负责处理文件系统具体的读写工作。
- SecondaryNameNode:
- conf/masters文件指定的为Secondary NameNode节点主机名
- 监控HDFS的辅助后台进程,一个集群只有一个,
- 与NameNode通讯,保存HDFS元数据快照
- 当NameNode故障,可以做为备用NameNode使用(必须人为手工接入,无法自动切换,hadoop2.0解决)
注:masters文件用于指定secondary的主机而不是namenode。slaves文件用于指定datanode和tasktracker, namenode由core-site.xml fs.default.name指定,jobtracker由mapred-site.xml mapred.job.tracker指定
HDFS冗余机制
* HDFS提供分布式的存储机制,一个文件分成很多的数据块,很多的数据块有分布在不同的节点上 * HDFS认为硬件错误是常态,因此提供自动数据冗余,一个数据块可以有多个副本(可配置副本系数)。当一个副本所在节点硬件错误,可自动使用其他副本数据块。
- conf/ hdfs-site.xml里面配置副本系数
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
- 在大多数情况下,副本系数是3. HDFS的存放数据块策略是将一个副本存放在本地机架的节点上,一个副本放在同一机架的另一个节点上,最后一个副本放在不同机架的节点上。为了降低整体的带宽消耗和读取延时,HDFS会尽量让读取程序读取离它最近的副本
机架感知策略
- 可以降低网络传输次数,提高效率
- 只需修改namenode和jobtracker节点的配置即可,打开conf/core-site.xml里面设置
<property>
<name>topology.script.file.name</name>
<value>/opt/modules/hadoop/hadoop-1.0.3/bin/RackAware.py</value>
<!--机架感知脚本路径-->
</property>
<property>
<name>topology.script.number.args</name>
<value>20</value>
<!--机架服务器数量,由于我写了20个,所以这里写20-->
</property>
- 机架感知脚本内容
#!/usr/bin/python
#-*-coding:UTF-8 -*-
import sys
rack = {"hadoop-node-31":"rack1",
"hadoop-node-32":"rack1",
"hadoop-node-33":"rack1",
"hadoop-node-34":"rack1",
"hadoop-node-49":"rack2",
"hadoop-node-50":"rack2",
"hadoop-node-51":"rack2",
"hadoop-node-52":"rack2",
"hadoop-node-53":"rack2",
"hadoop-node-54":"rack2",
"192.168.1.31":"rack1",
"192.168.1.32":"rack1",
"192.168.1.33":"rack1",
"192.168.1.34":"rack1",
"192.168.1.49":"rack2",
"192.168.1.50":"rack2",
"192.168.1.51":"rack2",
"192.168.1.52":"rack2",
"192.168.1.53":"rack2",
"192.168.1.54":"rack2",
}
if __name__=="__main__":
print "/" + rack.get(sys.argv[1],"rack0")
由于hadoop没有明确的说明机架感知是感知IP还是感知主机名,所以就都写上。 然后将脚本赋予可执行权限chmod u+x RackAware.py,并放到bin/目录下。 重启namenode,如果配置成功,namenode启动日志中会输出:0 2011-12-21 14:28:44,495 INFO org.apache.hadoop.net.NetworkTopology: Adding a new node: /rack1/192.168.1.15:50010
心跳机制
- NameNode周期性的从datanode接收心跳信号和块报告
- NameNode根据块报告验证元数据
- 没有按时发送心跳的datanode会被标记为宕机,不会再给它IO请求
- 如果datanode失效照成副本数量下降,并且低于预先设置的阀值,namenode会检测出这些数据块,并在合适的时机进行重新复制
- 引发重新复制的原因还有副本本身损坏,磁盘错误,复制印子增大等
回收站
在etc/hadoop/core-site.xml添加配置:
<property>
<name>fs.trash.interval</name>
<value>10080<value>
</property>
设置回收站数据保存时间:毫秒
喜欢 (1)or分享 (0)
- 提高服务器程序性能的一些方法
- A+B for Matrices 及 C++ transform的用法
- socket读写返回值的处理
- 记录服务上线一年来的点点滴滴
- 实现两个N*N矩阵的乘法,矩阵由一维数组表示
- C++实现线程安全的单例模式
- 实现两个N*N矩阵的乘法,矩阵由一维数组表示
- 一步一步实现读写锁
- 二维数组的查找
- 从I/O复用谈epoll为什么高效
- C++ STL算法系列2---find ,find_first_of , find_if , adjacent_find的使用
- 2017企业安全技术热词有哪些?
- Raft协议实战之Redis Sentinel的选举Leader源码解析
- 进制之间的转换
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 详解Android Selinux 权限及问题
- Android图片采样缩放功能实例代码
- Android开发中使用Intent打开第三方应用及验证可用性的方法详解
- Android 7.0开发获取存储设备信息的方法
- Android中默认系统的声音/大小修改和配置详解
- Android开发中计算器的sin、cos及tan值计算问题分析
- Android开发实现绘制淘宝收益图折线效果示例
- Android自定义View实现搜索框(SearchView)功能
- android 监听SD卡文件变化的实现代码
- Android监听手机短信的示例代码
- Android开发之图片压缩工具类完整实例
- Android6.0开发中屏幕旋转原理与流程分析
- Android中WebView的基本配置与填坑记录大全
- Android开发实现ListView异步加载数据的方法详解
- Android开发实现AlertDialog中View的控件设置监听功能分析