Hadoop学习01-hdfs概念

hadoop解决什么问题
1.海量数据如何存储(hdfs)
2.海量数据如何计算(mapreduce)node

1.HDFS

两个核心 namenode与datanode
namenode安全

1.管理各个datanode
2.管理文件信息,文件名、文件多大、文件被切块、存贮位置信息,即管理元数据信息。
3.基于RPC心跳机制控制集群中各个节点(datanode)的状态。
4.namenode存在单点故障问题,能够启用一个备用namenode用来保证元数据信息安全。
5.datanode挂掉后,数据丢失,所以须要控制datanode 的备份,默认3份,本机一份。

datanode:存储数据的节点,数据存放具备备份。网络

1.保存具体的block数据
2.负责数据的读写操做和复制操做
3.DataNode启动会想NameNode报告当前存储的block信息,
4.DataNode之间会进行通讯(RPC),保证数据的冗余性

SecondaryNameNode不是热备,它的职责是合并NameNode 的edit log,到 fsimage这个文件中。
tip:hdfs不适合存储海量小文件 app

缘由:20k放在128M的block里,他只占用了20K,可是须要一个装128M的袋子装,这个袋子不能再装其余东西了。假设我有1000w * 1Kb,则namenode须要这么多元数据信息,致使NameNode 瘫痪。

image.png
hdfs是磁盘,也就是涉及两个问题:写与读。
读流程:
image.png
写流程:
image.png框架

2.Mapreduce

解决海量数据的计算问题,多机器协做计算。
简单的wordcount怎么作?
image.png函数

map阶段:数据处理,输出<key,value>,发到对应的reduce里,每一个block能够起一个map进程
image.pngoop

reduce阶段:不一样map按照某种规则(哈希)发到这个reduce去处理
map输出的同一个key必定在一个reduce里,不一样key可能在同一个reduce,也可能不一样reduce,跟你reduce数量有关。
image.pngspa

map到reduce的过程成为shuffle过程,举个数钱的例子
mapper将相同的key发到指定的reduce中。

combiner3d

Combiner在map阶段进行一次reduce,减小reduce端的压力

Mapreduce中的Combiner就是为了不map任务和reduce任务之间的数据传输而设置的,Hadoop容许用户针对map task的输出指定一个合并函数。即为了减小传输到Reduce中的数据量。它主要是为了削减Mapper的输出从而减小网络带宽和Reducer之上的负载。特别值得注意的一点,一个combiner只是处理一个结点中的的输出,而不能享受像reduce同样的输入(通过了shuffle阶段的数据),这点很是关键。code

hadoop的核心是mapreduce框架,shuffle又是mapreduce的核心!!!

image.png