Hadoop学习01-hdfs概念

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

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不适合存储海量小文件

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

image.png

2.Mapreduce

解决海量数据的计算问题,多机器协作计算。
简单的wordcount怎么做?
Hadoop学习01-hdfs概念_第1张图片

map阶段:数据处理,输出,发到对应的reduce里,每个block可以起一个map进程
Hadoop学习01-hdfs概念_第2张图片

reduce阶段:不同map按照某种规则(哈希)发到这个reduce去处理
map输出的同一个key一定在一个reduce里,不同key可能在同一个reduce,也可能不同reduce,跟你reduce数量有关。
Hadoop学习01-hdfs概念_第3张图片

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

combiner

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

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

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

Hadoop学习01-hdfs概念_第4张图片

你可能感兴趣的:(hadoop,hdfs)