HDFS MapReduce笔记

hadoop的HDFS hadoop分布式文件系统


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中有上一次的备份,。可以找回大部分的数据



DataNode:存储 文件内容,都是一块,一块的, 包括副本信息
文件内容保存在磁盘

维护了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


HDFS 最适合大文件处理:

一个namenode和多个datanode节点

数据复制 (冗余机制)

故障检测

数据节点:检测是否宕机
块报告:安全模式下检测
数据完整性
名称节点:日志文件和镜像文件

权限: HDFS是没有密码的,只要 告诉hdfs 你是谁,那么 hdfs则认为 你是谁,,安全性太差。 一般 HDFS里面放的数据不是很重要

的数据

安全模式:首先把映像文件(fsimage)加入内存,并执行和编辑日志的各项操作。可以理解成初始化的过程,检测和修复的一个过

程,不建议跳过。。


hadoop 的hdfs 的缺点:hadoop1存在单独故障的问题,hadoop2不存在,

一:低延迟数据访问,比如毫秒级

二:小文件存取,占用NameNode大量内存,元数据是要保存到内存中的。 可以压缩成一个文件存储

三:并发写入、文件随机修改 一个文件只能有一个写者,

比如 百度网盘,不能修改数据。。在国内,一般所谓的网盘 80% 都是用的hadoop 来存储的 hadoop2 可以修改数据

hadoop-env.sh 配置java

core-site.xml namenode配置

hdfs-site.xml hdfs配置

slaves 指定哪些为datanode

masters 指定哪些为secondaryNameNode

bin/hadoop namenode –format 生成会在 core-site.xml配置的hadoop.tmp.dir 工作目录下面 去生成dfs文件

hadoop的 MR(map-reduce) 分布式计算框架之一 mr适合做离线计算 storm适合做流式计算框架 适合实时计算 spark 内
存计算框架 适合快速得到结果的计算

HDFS MapReduce笔记_第1张图片
这个框架

-分布式计算

-移动计算、而不是移动数据

Hadoop的MapReduce功能实现了将单个任务打碎,并将碎片任务(Map)发送到多个节点上,之后再以单个数据集的形式加载(Reduce)

到数据仓库里。

Map-Reduce架构

-一主多从架构

- 主JobTracker(在1.0上面才有JobTracker,2.0以后就没有了)

负责调度分配每一个子任务task运行于TaskTracker上,如果发现有失败的task 就重新分配其任务到其他节点上,每一个hadoop集群

只有一个jobTracker,一般运行到master节点上。

- 从TeskTracker

TeskTracker主动与JobTracker通信,接受作业,并负责直接执行每一个任务(map tesk 和reduce tesk),为了减少网络带宽,最

好tesktracker运行到hdfs的datanode上面

原理:

有4个步骤,
一:input split 分裂
把大文件(block)切成小文件


二:map步骤

每个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
会产生数据倾斜,

可以自定义几个reduce去做数据块的合并,map的数据量决定reduce的个数

把不同map所在节点的spill to disk 的数据和剩余内存中的数据 , 按照key值,merge所有提交的数据 统计到reduce中




你可能感兴趣的:(HDFS MapReduce笔记)