hadoop解决什么问题
1.海量数据如何存储(hdfs)
2.海量数据如何计算(mapreduce)node
两个核心 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 瘫痪。
hdfs是磁盘,也就是涉及两个问题:写与读。
读流程:
写流程:框架
解决海量数据的计算问题,多机器协做计算。
简单的wordcount怎么作?函数
map阶段:数据处理,输出<key,value>,发到对应的reduce里,每一个block能够起一个map进程oop
reduce阶段:不一样map按照某种规则(哈希)发到这个reduce去处理
map输出的同一个key必定在一个reduce里,不一样key可能在同一个reduce,也可能不一样reduce,跟你reduce数量有关。spa
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的核心!!!