近来工作原因需要接触大数据,此前对于大数据基本是听得多了解的少,借此机会仔细研究了一下 Hadoop,记录下 MapReduce 相关的一些概念,大体分为HDFS(存储)、YARN(调度)、MapReduce(计算)。
HDFS:
NameNode : 存储元数据,指挥官,有人要写数据先问问NameNode,分配DataNode,然后数据写到DataNode的数据块上。
DataNode :干具体的活,存数据,提供读写服务。
Secondary NameNode :辅助NameNode做Checkpoint,NameNode只有重启的时候才会把操作记录edits合并到镜像文件fsimage中,得到一个快照,时效性很差,因此需要SN定期同步一下NameNode的edits文件,更新fsimage,并且适时把fsimage同步回NameNode。(拿redis对比一下,edits相对于AOF,fsimage相对于RDB)
类似的架构还有 zk 的 leader、follower、observer,kafka 的 controller,RocketMQ 的 nameserver、broker等,设计思路就是中心化控制,一对多,好处就是简单方便,缺点就是中心节点挂了服务就暂时不可用,需要failover。
写:同步进行(类似zk)
1、先访问NameNode,返回分配的DataNode列表和block id
2、客户端写一个DataNode,然后这些DataNode复制数据块,复制完了告诉客户端完成
3、客户端告诉NameNode完成
4、NameNode确认,更新元数据
读:
1、访问NameNode,返回DataNode列表和block id
2、找个可用的DataNode读即可
MapReduce:
计算模型:
1、从HDFS上读取数据
2、Mapping,分别对读取的数据块统计,生成 KV对,不同的块并行计算(统计词频)。
2.1 Combining,局部聚合Mapping的结果,提高性能。
3、Shuffling,对生成的所有KV对按Key组合,同样的Key放到一起。
3.1 Partitioning,按key做hash取模分配,不同的key分配到不同的多个 reducer 上,多个Reducer并行。
4、Reducing,对Shuffling之后的结果归约,把相同Key的Value进行计算(求和)。
5、输出结果
YARN:
ResourceManager:全局资源管理和任务调度
ApplicationMaster:单个作业的资源管理和任务监控
NodeManager:单个节点的资源管理和监控
Container:资源申请的单位和任务运行的容器