NameNode :存储元数据,比如(文件名,文件权限) ,负责处理client端发起的请求任务,读写都先访问namenode
元数据保存到内存中,同时落地到磁盘fsimage ,edits记录了对metadata的操作日志保存文件,block,datanode之间的映射关
系。block 的位置信息保存到内存里面,重启服务的时候上报
SecondaryNameNode(SNN) 是一部分元数据的备份, 它的主要工作 :NN每隔3600s或者超出固定大小,发送edits 和fsimage
给SNN,NN生成一个新的edits, SNN帮namenode 去合并edits l文件,合并完了之后 得到一个新的fsimage 发送 给NN。 --如果
NN挂了,那么 在SNN中有上一次的备份,。可以找回大部分的数据
维护了block id 到datanode本地文件的映射关系..
存储数据单元:block文件被切分成固定大小的数据块,block,这个大小是固定的,默认的 数据块大小为64MB,可以配置,若文件大小<64m,那么
单独成一个block
文件的存储方式:按照大小被切分成N个块,存储到不同节点上。默认block都有3个副本中途block size不可变,但副本数可以 ,,理论上来说 ,只要3个block所在的机器 不同时挂。那么数据都能还原。
上传文件的时候: 放置在上传的DN上,如果集群外提交 ,则随机选一个磁盘不太满,cpu不太忙的节点,第二个block 则选择 不
同机架的服务器节点上
-存储数据
-启动DN线程的时候会想NN 汇报,block 信息
-主动的通过向NN发送心跳 3秒一次 如果NN 10分钟没有收到DN的心跳,那么NN认为DN已经丢失,并copy其上面的副本到其他
的DN
一个namenode和多个datanode节点
数据复制 (冗余机制)
故障检测
数据节点:检测是否宕机权限: HDFS是没有密码的,只要 告诉hdfs 你是谁,那么 hdfs则认为 你是谁,,安全性太差。 一般 HDFS里面放的数据不是很重要
的数据
安全模式:首先把映像文件(fsimage)加入内存,并执行和编辑日志的各项操作。可以理解成初始化的过程,检测和修复的一个过
程,不建议跳过。。
一:低延迟数据访问,比如毫秒级
二:小文件存取,占用NameNode大量内存,元数据是要保存到内存中的。 可以压缩成一个文件存储三:并发写入、文件随机修改 一个文件只能有一个写者,
比如 百度网盘,不能修改数据。。在国内,一般所谓的网盘 80% 都是用的hadoop 来存储的 hadoop2 可以修改数据core-site.xml namenode配置
hdfs-site.xml hdfs配置slaves 指定哪些为datanode
masters 指定哪些为secondaryNameNodebin/hadoop namenode –format 生成会在 core-site.xml配置的hadoop.tmp.dir 工作目录下面 去生成dfs文件
-分布式计算
-移动计算、而不是移动数据
Hadoop的MapReduce功能实现了将单个任务打碎,并将碎片任务(Map)发送到多个节点上,之后再以单个数据集的形式加载(Reduce)
到数据仓库里。
Map-Reduce架构-一主多从架构
- 主JobTracker(在1.0上面才有JobTracker,2.0以后就没有了)
负责调度分配每一个子任务task运行于TaskTracker上,如果发现有失败的task 就重新分配其任务到其他节点上,每一个hadoop集群
只有一个jobTracker,一般运行到master节点上。
- 从TeskTrackerTeskTracker主动与JobTracker通信,接受作业,并负责直接执行每一个任务(map tesk 和reduce tesk),为了减少网络带宽,最
好tesktracker运行到hdfs的datanode上面
原理:每个spliting 对于一个mapping,map上面的数据来源于nodename的block,block经过了split操作,基本不存在数据倾斜的问题
三:shuffler-在mapper和reduce 中间的一个步骤
-可以把mapper的输出按照某种key值重新切分和组合成N个,把key值 符合某种范围的输出送到特定的reduce那里去处理
-可以简化reduce的过程
map是一段计算机程序,得到了一段结果,输出的结果放到内存中,buffer in memory(内存缓冲区),内存 是有溢出的。这个过程就
要落地到磁盘中,这个过程叫做溢写。
这个过程中要partition分区(把map 的输出数据分成一个一个的区,这一步解决了map-reduce负载均衡,标示该map数据属于哪个区,
并非真正的分区)和 spill to disk 溢写到磁盘。sort排序(默认按照ascii码) 默认的partition是可能产生数据倾斜的
每次spill disk 要产生一个临时文件。combiner merge成一个大文件。 按照hash值每个 map tesk 都有一个内存缓冲区(默认是100M),先patition,然后存储map的输出结果,当缓冲区快满的时候,把数据spill磁盘
中(临时文件),spill完了之后,再进行sort&combiner(合成,减少map的输出)
可以自定义几个reduce去做数据块的合并,map的数据量决定reduce的个数
把不同map所在节点的spill to disk 的数据和剩余内存中的数据 , 按照key值,merge所有提交的数据 统计到reduce中